Advertisement
Guest User

Untitled

a guest
Aug 19th, 2019
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 13.69 KB | None | 0 0
  1. import UIKit
  2. import WebKit
  3. import Dispatch
  4. import UserNotifications
  5.  
  6. // === INFOS ===
  7. // LOGIN URL : https://esam.imageinfrance.com/login
  8. // email : postmaster@imageinfrance.com
  9. // mdp : iifIIF130899
  10.  
  11. class ViewController: UIViewController {
  12.     @IBOutlet weak var emailTXT: UITextField!
  13.     @IBOutlet weak var passwordTXT: UITextField!
  14.     @IBOutlet weak var connexionBTN: UIButton!
  15.    
  16.     let device = UIDevice.current
  17.    
  18.     var csrf_token : String?
  19.     var cookie: [HTTPCookie]?
  20.    
  21.     override func viewDidLoad() {
  22.         super.viewDidLoad()
  23.        
  24.         let url = "https://esam.imageinfrance.com/login";
  25.        
  26.         var req = URLRequest(url: URL(string:url)!)
  27.         req.httpMethod = "POST"
  28.         req.addValue("iOS esam/", forHTTPHeaderField: "User-Agent")
  29.         req.addValue("XMLHttpRequest", forHTTPHeaderField: "XMLHttpRequest")
  30.         req.addValue("application/json", forHTTPHeaderField: "Content-Type")
  31.         req.addValue("application/json", forHTTPHeaderField: "Accept")
  32.         req.httpShouldHandleCookies = true
  33.        
  34.         let session = URLSession.shared
  35.         session.configuration.httpCookieStorage = HTTPCookieStorage.shared
  36.         session.configuration.httpCookieAcceptPolicy = .always
  37.         session.configuration.httpShouldSetCookies = true
  38.        
  39.         session.dataTask(with: req, completionHandler: { (data, res, err) in
  40.             if err != nil {
  41.                 displayMsg(self, userMsg: "La requete a échoué ! Veuillez recommencer (session.dataTask Error)")
  42.                 print("Related Error = \(String(describing: err))")
  43.                 return
  44.             }
  45.            
  46.             if let res = res {
  47.                 print("Res:: ", (res as! HTTPURLResponse).allHeaderFields)
  48.                 self.cookie = HTTPCookie.cookies(withResponseHeaderFields: (res as! HTTPURLResponse).allHeaderFields as! [String:String], for: URL(string: url)!)
  49.                 if let cookie = self.cookie {
  50.                     print("Cookies : \(cookie)")
  51.                 }
  52.             }
  53.            
  54.             if let data = data {
  55.                 print("Data:: ", data)
  56.                 do {
  57.                     let json = try JSONSerialization.jsonObject(with: data, options: []) as? [String:Any]
  58.                    
  59.                     if let jsonData = json {
  60.                         self.csrf_token = jsonData["_csrf_token"] as? String
  61.                     }
  62.                    
  63.                     print(json);
  64.                 } catch { print(error) }
  65.             }
  66.         }).resume()
  67.        
  68.         let model = device.model                    // ex: "iPhone"
  69.         print(model)
  70.         let modelName = device.modelName            // ex: "iPhone 6"
  71.         print(modelName)
  72.         let deviceName = device.name                // ex: "My iPhone"
  73.         print(deviceName)
  74.         let systemName = device.systemName          // ex: "iOS"
  75.         print(systemName)
  76.         let systemVersion = device.systemVersion    // ex: "iOS"
  77.         print(systemVersion)
  78.     }
  79.    
  80.     override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() }
  81.     override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) }
  82.    
  83.     @IBAction func connectBTN(_ sender: Any) {
  84.         print("Btn Connect Pressed !");
  85.        
  86.         DispatchQueue.main.async {
  87.             self.emailTXT.isEnabled = false
  88.             self.passwordTXT.isEnabled = false
  89.             (sender as! UIButton).isEnabled = false
  90.             let email = self.emailTXT.text
  91.             let password = self.passwordTXT.text
  92.            
  93.             if (email?.isEmpty)! || (password?.isEmpty)! {
  94.                 print("User \(String(describing: email)) or password \(String(describing: password)) is empty")
  95.                 displayMsg(self, userMsg: "Tous les champs sont requis")
  96.                 return
  97.             }
  98.            
  99.             // Activity Indicator
  100.             let activityIndic = UIActivityIndicatorView(style: UIActivityIndicatorView.Style.whiteLarge)
  101.             activityIndic.center = self.view.center
  102.             activityIndic.hidesWhenStopped = false
  103.             activityIndic.startAnimating()
  104.             self.view.addSubview(activityIndic)
  105.            
  106.             // Send HTTP Req to sign in
  107.             let finalURL = URL(string: "https://esam.imageinfrance.com/login")
  108.             var req = URLRequest(url: finalURL!)
  109.             req.httpMethod = "POST"
  110.            
  111.             if let cookie = self.cookie {
  112.                 // req.addValue(self.cookie, forHTTPHeaderField: "Cookie")
  113.                 print("Cookies : \(cookie)")
  114.                
  115.                 let headers = HTTPCookie.requestHeaderFields(with: cookie)
  116.                
  117.                 if let cookieString = headers["Cookie"] {
  118.                     req.addValue(cookieString, forHTTPHeaderField: "Cookie")
  119.                 }
  120.             }
  121.            
  122.             req.addValue("XMLHttpRequest", forHTTPHeaderField: "X-Requested-With")
  123.             req.addValue("iOS", forHTTPHeaderField: "User-Agent")
  124.            
  125.             req.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
  126.             print("REQ = \(req.allHTTPHeaderFields ?? [:])")
  127.            
  128.             if let csrf = self.csrf_token {
  129.                 let postString = [
  130.                     "email" : email!,
  131.                     "password": password!,
  132.                     "type": UIDevice.current.modelName,
  133.                     "_csrf_token": csrf,
  134.                     "os": "iOS",
  135.                     "version": UIDevice.current.systemVersion,
  136.                     "name": UIDevice.current.name,
  137.                 ] as [String: String]
  138.                
  139.                 //String.init(format: "email=%@&password=%@", email!, password!)
  140.                
  141.                 var components = URLComponents()
  142.                 components.queryItems = postString.map {
  143.                     URLQueryItem(name: $0, value: $1)
  144.                 }
  145.                
  146.                
  147.                 if let url = components.url {
  148.                     print(url.absoluteString)
  149.                     req.httpBody = url.absoluteString.data(using: .utf8)
  150.                 }
  151.                
  152.                 DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.4, execute: {
  153.                     let task = URLSession.shared.dataTask(with: req) { (data: Data?, response: URLResponse?, error: Error?) in
  154.                         removeActivityIndicator(self, activityIndicator: activityIndic)
  155.                        
  156.                         if error != nil {
  157.                             displayMsg(self, userMsg: "Erreur pendant la requete ! Veuillez réesayer !")
  158.                             print("error=\(String(describing: error))")
  159.                             return
  160.                         }
  161.                        
  162.                         do {
  163.                             let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? [String:Any]
  164.                             if let parseJson = json {
  165.                                 let access_token = parseJson["token"] as? String
  166.                                 let user_id = parseJson["id"] as? String
  167.                                 DispatchQueue.main.async {
  168.                                     let csrf_token: String? = parseJson["_csrf_token"] as? String
  169.                                     let goToHomePage = self.storyboard?.instantiateViewController(withIdentifier: "HomePageViewController") as! HomePageViewController
  170.                                     let appDelegate  = UIApplication.shared.delegate
  171.                                     appDelegate?.window??.rootViewController = goToHomePage
  172.                                 }
  173.                             } else {
  174.                                 displayMsg(self, userMsg: "La requete a échoué 2 - ! Veuillez réésayer")
  175.                             }
  176.                         } catch {
  177.                             displayMsg(self, userMsg: "La requete a échoué 1 - ! Veuillez réesayer")
  178.                             print(String.init(data: data!, encoding: .utf8))
  179.                             print(error)
  180.                         }
  181.                     }
  182.                     task.resume()
  183.                 })
  184.             }
  185.         }
  186.         return
  187.     }
  188. }
  189.  
  190. /*
  191. private func setCookies(response: URLResponse) {
  192.     if let httpResponse = response as? HTTPCookie {
  193.         let cookies = HTTPCookie.cookies(withResponseHeaderFields: (httpResponse as? HTTPURLResponse)?.allHeaderFields as! [String : String], for: response.url!) as! [HTTPCookie]
  194.         HTTPCookieStorage.shared.setCookies(cookies, for: response.url!, mainDocumentURL: nil)
  195.         for cookie in cookies {
  196.             var cookieProperties = [HTTPCookiePropertyKey: AnyObject]()
  197.             cookieProperties[HTTPCookiePropertyKey.name] = cookie.name as AnyObject
  198.             cookieProperties[HTTPCookiePropertyKey.value] = cookie.value as AnyObject
  199.             cookieProperties[HTTPCookiePropertyKey.domain] = cookie.domain as AnyObject
  200.             cookieProperties[HTTPCookiePropertyKey.path] = cookie.path as AnyObject
  201.             cookieProperties[HTTPCookiePropertyKey.version] = cookie.version as AnyObject
  202.             cookieProperties[HTTPCookiePropertyKey.expires] = NSDate().addingTimeInterval(31536000) as AnyObject
  203.            
  204.             let newCookie = HTTPCookie(properties: cookieProperties)
  205.             HTTPCookieStorage.shared.setCookie(newCookie!)
  206.            
  207.             print("name: \(cookie.name) value: \(cookie.value)")
  208.         }
  209.     }
  210. }
  211. */
  212.  
  213.  
  214. func displayMsg(_ controller: UIViewController, userMsg:String) -> Void {
  215.     DispatchQueue.main.async {
  216.         let alertCtrl = UIAlertController(title: "Attention", message: userMsg, preferredStyle: .alert)
  217.         let OnOK = UIAlertAction(title: "OK", style: .default) {
  218.             (action: UIAlertAction!) in
  219.             print("Ok Btn !")
  220.             DispatchQueue.main.async {
  221.                 controller.dismiss(animated: true, completion: nil)
  222.             }
  223.         }
  224.         alertCtrl.addAction(OnOK)
  225.         controller.present(alertCtrl, animated: true, completion: nil)
  226.     }
  227. }
  228.  
  229. func removeActivityIndicator(_ controller: UIViewController, activityIndicator: UIActivityIndicatorView) {
  230.     DispatchQueue.main.async {
  231.         activityIndicator.stopAnimating()
  232.         activityIndicator.removeFromSuperview()
  233.     }
  234. }
  235.  
  236. extension UIDevice {
  237.     var modelName: String {
  238.         var systemInfo = utsname()
  239.         uname(&systemInfo)
  240.        
  241.         let machineMirror = Mirror(reflecting: systemInfo.machine)
  242.        
  243.         let identifier = machineMirror.children.reduce("") { identifier, element in
  244.             guard let value = element.value as? Int8, value != 0 else { return identifier }
  245.             return identifier + String(UnicodeScalar(UInt8(value)))
  246.         }
  247.        
  248.         switch identifier {
  249.             case "iPod5,1":                                 return "iPod Touch 5"
  250.             case "iPod7,1":                                 return "iPod Touch 6"
  251.             case "iPhone3,1", "iPhone3,2", "iPhone3,3":     return "iPhone 4"
  252.             case "iPhone4,1":                               return "iPhone 4s"
  253.             case "iPhone5,1", "iPhone5,2":                  return "iPhone 5"
  254.             case "iPhone5,3", "iPhone5,4":                  return "iPhone 5c"
  255.             case "iPhone6,1", "iPhone6,2":                  return "iPhone 5s"
  256.             case "iPhone7,2":                               return "iPhone 6"
  257.             case "iPhone7,1":                               return "iPhone 6 Plus"
  258.             case "iPhone8,1":                               return "iPhone 6s"
  259.             case "iPhone8,2":                               return "iPhone 6s Plus"
  260.             case "iPhone9,1", "iPhone9,3":                  return "iPhone 7"
  261.             case "iPhone9,2", "iPhone9,4":                  return "iPhone 7 Plus"
  262.             case "iPhone8,4":                               return "iPhone SE"
  263.             case "iPad2,1", "iPad2,2", "iPad2,3", "iPad2,4":return "iPad 2"
  264.             case "iPad3,1", "iPad3,2", "iPad3,3":           return "iPad 3"
  265.             case "iPad3,4", "iPad3,5", "iPad3,6":           return "iPad 4"
  266.             case "iPad4,1", "iPad4,2", "iPad4,3":           return "iPad Air"
  267.             case "iPad5,3", "iPad5,4":                      return "iPad Air 2"
  268.             case "iPad6,11", "iPad6,12":                    return "iPad 5"
  269.             case "iPad2,5", "iPad2,6", "iPad2,7":           return "iPad Mini"
  270.             case "iPad4,4", "iPad4,5", "iPad4,6":           return "iPad Mini 2"
  271.             case "iPad4,7", "iPad4,8", "iPad4,9":           return "iPad Mini 3"
  272.             case "iPad5,1", "iPad5,2":                      return "iPad Mini 4"
  273.             case "iPad6,3", "iPad6,4":                      return "iPad Pro 9.7 Inch"
  274.             case "iPad6,7", "iPad6,8":                      return "iPad Pro 12.9 Inch"
  275.             case "iPad7,1", "iPad7,2":                      return "iPad Pro 12.9 Inch 2. Generation"
  276.             case "iPad7,3", "iPad7,4":                      return "iPad Pro 10.5 Inch"
  277.             case "AppleTV5,3":                              return "Apple TV"
  278.             case "i386", "x86_64":                          return "Simulator"
  279.             default:                                        return identifier
  280.         }
  281.     }
  282. }
  283.  
  284.  
  285. extension ViewController: UITextFieldDelegate {
  286.     func textFieldShouldReturn(_ textField: UITextField) -> Bool {
  287.         if textField == self.emailTXT {
  288.             textField.resignFirstResponder()
  289.             self.passwordTXT.becomeFirstResponder()
  290.         } else if textField == self.passwordTXT {
  291.             textField.resignFirstResponder()
  292.             self.connectBTN(self.connexionBTN!)
  293.         }
  294.         return true
  295.     }
  296. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement