Untitled
unknown
plain_text
3 years ago
34 kB
12
Indexable
//
// LoginSignUpPageViewControllerStudent.swift
// Testable
//
// Created by Salman Navroz on 11/13/20.
// Copyright © 2020 Salman Navroz. All rights reserved.
//
import UIKit
import Firebase
import GoogleSignIn
import GoogleUtilities
import CryptoKit
import AuthenticationServices
class LoginSignUpPageViewControllerStudent: UIViewController, GIDSignInDelegate {
let passwordField = UITextField(frame: CGRect(x: 14, y: 38, width: 225, height: 18))
let emailField = UITextField(frame: CGRect(x: 14, y: 38, width: 225, height: 18))
let check = UIButton(frame: CGRect(x: 0, y: 2, width: 16, height: 16))
let apple = UIButton(frame: CGRect(x: 20, y: 486, width: 374, height: 50))
let google = UIButton(frame: CGRect(x: 20, y: 546, width: 374, height: 50))
let logIn = UIButton(frame: CGRect(x: 20, y: 338, width: 374, height: 50))
let loginLabel = UILabel(frame: CGRect(x: 0, y: 42, width: 243, height: 42))
var viewHeight: CGFloat = 0
var viewWidth: CGFloat = 0
// let appleButton = ASAuthorizationAppleIDButton(type: .continue, style: .black)
override func viewDidLoad() {
super.viewDidLoad()
viewHeight = UIScreen.main.bounds.height
viewWidth = UIScreen.main.bounds.width
self.hideKeyboardWhenTappedAround()
GIDSignIn.sharedInstance()?.presentingViewController = self
GIDSignIn.sharedInstance().delegate = self
self.view.backgroundColor = .testBlue
navigationController?.navigationBar.setValue(true, forKey: "hidesShadow")
self.extendedLayoutIncludesOpaqueBars = true
let header = setUpHeader()
let base = setUpBase()
let bottom = setUpBottomBox()
self.view.addSubviews([header,base, bottom])
addBackgroundConstraints(viewToBeConstrained: header, x: 35, y: 73, width: 243, height: 81, centered: false)
addBackgroundConstraints(viewToBeConstrained: base, x: 0, y: 186, width: 414, height: 710, centered: true)
addBackgroundConstraints(viewToBeConstrained: bottom, x: 0, y: 826, width: 414, height: 70, centered: true)
}
func addBackgroundConstraints(viewToBeConstrained: UIView, x: CGFloat, y: CGFloat, width: CGFloat, height: CGFloat, centered: Bool) {
viewToBeConstrained.translatesAutoresizingMaskIntoConstraints = false
if UIDevice.current.userInterfaceIdiom == .pad {
viewToBeConstrained.widthAnchor.constraint(equalToConstant: (width/896)*viewHeight * (1 + (viewWidth/viewHeight - 414/896)/2)).isActive = true
} else {
viewToBeConstrained.widthAnchor.constraint(equalToConstant: (width/414)*viewWidth).isActive = true
}
if centered {
viewToBeConstrained.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
} else {
viewToBeConstrained.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: (x/414)*viewWidth).isActive = true
}
viewToBeConstrained.heightAnchor.constraint(equalToConstant: (height/896)*viewHeight).isActive = true
viewToBeConstrained.topAnchor.constraint(equalTo: view.topAnchor, constant: (y/896)*viewHeight).isActive = true
}
func addConstraints(viewToBeConstrained: UIView, viewToConstraintTo: UIView, x: CGFloat, y: CGFloat, width: CGFloat, height: CGFloat, biggerHeight: Bool, biggerWidth: Bool, centered: Bool, viewToCenterTo: UIView, aligned: Bool, viewToAlignTo: UIView, bottomButtons: Bool, trailing: Bool) {
viewToBeConstrained.translatesAutoresizingMaskIntoConstraints = false
if biggerHeight {
viewToBeConstrained.widthAnchor.constraint(equalToConstant: (width/414)*viewWidth).isActive = true
viewToBeConstrained.heightAnchor.constraint(equalToConstant: (height/896)*viewHeight * (1 + (viewWidth/viewHeight - 414/896)*1.5)).isActive = true
} else if biggerWidth {
viewToBeConstrained.widthAnchor.constraint(equalToConstant: (width/414)*viewWidth).isActive = true
viewToBeConstrained.heightAnchor.constraint(equalToConstant: (height/896)*viewHeight).isActive = true
} else {
viewToBeConstrained.heightAnchor.constraint(equalToConstant: (height/896)*viewHeight).isActive = true
viewToBeConstrained.widthAnchor.constraint(equalTo: viewToBeConstrained.heightAnchor, multiplier: (width/height)).isActive = true
}
if centered {
viewToBeConstrained.centerXAnchor.constraint(equalTo: viewToCenterTo.centerXAnchor).isActive = true
} else if aligned {
viewToBeConstrained.leadingAnchor.constraint(equalTo: viewToAlignTo.leadingAnchor).isActive = true
} else if bottomButtons {
viewToBeConstrained.leadingAnchor.constraint(equalTo: viewToConstraintTo.leadingAnchor, constant: (x/896)*viewHeight).isActive = true
} else if trailing {
viewToBeConstrained.leadingAnchor.constraint(equalTo: viewToConstraintTo.trailingAnchor, constant: -(x/896)*viewHeight).isActive = true
} else {
viewToBeConstrained.leadingAnchor.constraint(equalTo: viewToConstraintTo.leadingAnchor, constant: (x/414)*viewWidth).isActive = true
}
if let textField = viewToBeConstrained as? UITextField {
textField.topAnchor.constraint(equalTo: viewToConstraintTo.topAnchor, constant: (y/896)*viewHeight * (1 - (viewWidth/viewHeight - 414/896)/2)).isActive = true
} else {
viewToBeConstrained.topAnchor.constraint(equalTo: viewToConstraintTo.topAnchor, constant: (y/896)*viewHeight).isActive = true
}
}
// Adapted from https://auth0.com/docs/api-auth/tutorials/nonce#generate-a-cryptographically-random-nonce
private func randomNonceString(length: Int = 32) -> String {
precondition(length > 0)
let charset: Array<Character> =
Array("0123456789ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvwxyz-._")
var result = ""
var remainingLength = length
while remainingLength > 0 {
let randoms: [UInt8] = (0 ..< 16).map { _ in
var random: UInt8 = 0
let errorCode = SecRandomCopyBytes(kSecRandomDefault, 1, &random)
if errorCode != errSecSuccess {
fatalError("Unable to generate nonce. SecRandomCopyBytes failed with OSStatus \(errorCode)")
}
return random
}
randoms.forEach { random in
if remainingLength == 0 {
return
}
if random < charset.count {
result.append(charset[Int(random)])
remainingLength -= 1
}
}
}
return result
}
// Unhashed nonce.
fileprivate var currentNonce: String?
@available(iOS 13, *)
@objc func startSignInWithAppleFlow() {
let nonce = randomNonceString()
currentNonce = nonce
let appleIDProvider = ASAuthorizationAppleIDProvider()
let request = appleIDProvider.createRequest()
request.requestedScopes = [.fullName, .email]
request.nonce = sha256(nonce)
print("starting apple")
let authorizationController = ASAuthorizationController(authorizationRequests: [request])
authorizationController.delegate = self
authorizationController.presentationContextProvider = self
authorizationController.performRequests()
}
@available(iOS 13, *)
private func sha256(_ input: String) -> String {
let inputData = Data(input.utf8)
let hashedData = SHA256.hash(data: inputData)
let hashString = hashedData.compactMap {
return String(format: "%02x", $0)
}.joined()
return hashString
}
func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) {
if user == nil {
return
}
if let authentication = user.authentication {
let credential = GoogleAuthProvider.credential(withIDToken: authentication.idToken!, accessToken: authentication.accessToken)
Auth.auth().signIn(with: credential, completion: { (user, error) -> Void in
if error != nil {
print("Problem at signing in with google with error : \(error!)")
} else if error == nil {
print("user successfully signed in through GOOGLE! uid:\(Auth.auth().currentUser!.uid)")
print("signed in")
UserDefaults.standard.set("student", forKey: "person")
UserDefaults.standard.synchronize()
self.performSegue(withIdentifier: "studentSignIntostudentTabBar", sender: self)
}
})
}
// let credential = GoogleAuthProvider.credential(withIDToken: user.authentication.idToken!, accessToken: user.authentication.accessToken)
//
// Auth.auth().signIn(with: credential, completion: { (user, error) -> Void in
// if error != nil {
// print("Problem at signing in with google with error : \(error!)")
// } else if error == nil {
// print("user successfully signed in through GOOGLE! uid:\(Auth.auth().currentUser!.uid)")
// print("signed in")
//
// UserDefaults.standard.set("student", forKey: "person")
// UserDefaults.standard.synchronize()
//
// self.performSegue(withIdentifier: "studentSignIntostudentTabBar", sender: self)
// }
// })
if let authentication = user.authentication {
let credential = GoogleAuthProvider.credential(withIDToken: authentication.idToken!, accessToken: authentication.accessToken)
Auth.auth().signIn(with: credential, completion: { (user, error) -> Void in
if error != nil {
print("Problem at signing in with google with error : \(error!)")
} else if error == nil {
print("user successfully signed in through GOOGLE! uid:\(Auth.auth().currentUser!.uid)")
print("signed in")
UserDefaults.standard.set("student", forKey: "person")
UserDefaults.standard.synchronize()
self.performSegue(withIdentifier: "studentSignIntostudentTabBar", sender: self)
}
})
}
}
open func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
return GIDSignIn.sharedInstance().handle(url)
}
func setUpHeader() -> UIView {
let header = UIView(frame: CGRect(x: 35, y: 73, width: 243, height: 81))
let backButton = UIButton(frame: CGRect(x: 2, y: 0, width: 20, height: 17))
backButton.setImage(UIImage(named: "Leftarr"), for: .normal)
backButton.contentMode = .scaleAspectFit
backButton.contentHorizontalAlignment = .fill
backButton.contentVerticalAlignment = .fill
backButton.addTarget(self, action: #selector(self.backButtonTapped), for: .touchUpInside)
loginLabel.font = UIFont(name: "Poppins-Bold", size: 28)
loginLabel.textColor = .white
loginLabel.text = "Login to Testable"
header.addSubviews([backButton,loginLabel])
addConstraints(viewToBeConstrained: backButton, viewToConstraintTo: header, x: 2, y: 0, width: 20, height: 17, biggerHeight: false, biggerWidth: false, centered: false, viewToCenterTo: view, aligned: false, viewToAlignTo: view, bottomButtons: false, trailing: false)
addConstraints(viewToBeConstrained: loginLabel, viewToConstraintTo: header, x: 0, y: 42, width: 243, height: 42, biggerHeight: true, biggerWidth: false, centered: false, viewToCenterTo: view, aligned: false, viewToAlignTo: view, bottomButtons: false, trailing: false)
return header
}
func setUpBase() -> UIView {
let base = UIView(frame: CGRect(x: 0, y: 186, width: 414, height: 710))
base.layer.cornerRadius = 30
base.layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner]
base.backgroundColor = .white
let welcomeLabel = UILabel(frame: CGRect(x: 20, y: 30, width: 169, height: 33))
welcomeLabel.font = UIFont(name: "Poppins-Bold", size: 22)
welcomeLabel.textColor = .testBlue
welcomeLabel.text = "Welcome Back"
let pleaseLabel = UILabel(frame: CGRect(x: 20, y: 63, width: 254, height: 20))
pleaseLabel.font = UIFont(name: "Poppins-Regular", size: 14)
pleaseLabel.textColor = UIColor(red: 122.0/255.0, green: 134.0/255.0, blue: 154.0/255.0, alpha: 1.0)
pleaseLabel.text = "Please sign in to continue"
let logIn = UIButton(frame: CGRect(x: 20, y: 338, width: 374, height: 50))
logIn.layer.cornerRadius = 14
logIn.backgroundColor = .testBlue
logIn.setTitle("Login", for: .normal)
logIn.setTitleColor(.white, for: .normal)
logIn.titleLabel?.font = UIFont(name: "Poppins-Medium", size: 18)
logIn.addTarget(self, action: #selector(self.loginPressed), for: .touchUpInside)
let apple = UIButton(frame: CGRect(x: 20, y: 486, width: 374, height: 50))
apple.frame = CGRect(x: 20, y: 486, width: 374, height: 50)
apple.layer.cornerRadius = 14
apple.backgroundColor = .black
apple.setTitle("Continue with Apple", for: .normal)
apple.setTitleColor(.white, for: .normal)
apple.titleLabel?.font = UIFont(name: "Poppins-SemiBold", size: 14)
apple.addTarget(self, action: #selector(startSignInWithAppleFlow), for: .touchUpInside)
let appleImage = UIImageView(frame: CGRect(x: 19.46, y: 12, width: 21.19, height: 25.26))
appleImage.image = UIImage(named: "apple")
apple.addSubview(appleImage)
addConstraints(viewToBeConstrained: appleImage, viewToConstraintTo: apple, x: 19.46, y: 12, width: 21.19, height: 25.26, biggerHeight: false, biggerWidth: false, centered: false, viewToCenterTo: view, aligned: false, viewToAlignTo: view, bottomButtons: false, trailing: false)
let google = UIButton(frame: CGRect(x: 20, y: 546, width: 374, height: 50))
google.layer.cornerRadius = 14
google.backgroundColor = UIColor(red: 81.0/255.0, green: 155.0/255.0, blue: 247.0/255.0, alpha: 1.0)
google.setTitle("Continue with Google", for: .normal)
google.setTitleColor(.white, for: .normal)
google.titleLabel?.font = UIFont(name: "Poppins-SemiBold", size: 14)
google.addTarget(self, action: #selector(self.googlePressed), for: .touchUpInside)
let googleImage = UIImageView(frame: CGRect(x: 19, y: 14, width: 22, height: 22))
googleImage.image = UIImage(named: "google")
google.addSubview(googleImage)
addConstraints(viewToBeConstrained: googleImage, viewToConstraintTo: google, x: 19, y: 14, width: 22, height: 22, biggerHeight: false, biggerWidth: false, centered: false, viewToCenterTo: view, aligned: false, viewToAlignTo: view, bottomButtons: false, trailing: false)
let emailField = setUpEmailField()
let passwordField = setUpPasswordField()
let bottomButtons = setUpButtomButtons()
base.addSubviews([welcomeLabel,pleaseLabel, emailField, passwordField, bottomButtons, logIn, apple, google])
addConstraints(viewToBeConstrained: welcomeLabel, viewToConstraintTo: base, x: 20, y: 30, width: 169, height: 33, biggerHeight: false, biggerWidth: true, centered: false, viewToCenterTo: view, aligned: false, viewToAlignTo: view, bottomButtons: false, trailing: false)
addConstraints(viewToBeConstrained: pleaseLabel, viewToConstraintTo: base, x: 20, y: 63, width: 254, height: 20, biggerHeight: true, biggerWidth: false, centered: false, viewToCenterTo: view, aligned: false, viewToAlignTo: view, bottomButtons: false, trailing: false)
addConstraints(viewToBeConstrained: emailField, viewToConstraintTo: base, x: 20, y: 113, width: 374, height: 68, biggerHeight: false, biggerWidth: false, centered: true, viewToCenterTo: base, aligned: false, viewToAlignTo: view, bottomButtons: false, trailing: false)
addConstraints(viewToBeConstrained: passwordField, viewToConstraintTo: base, x: 20, y: 201, width: 374, height: 68, biggerHeight: false, biggerWidth: false, centered: true, viewToCenterTo: base, aligned: false, viewToAlignTo: view, bottomButtons: false, trailing: false)
addConstraints(viewToBeConstrained: bottomButtons, viewToConstraintTo: base, x: 20, y: 285, width: 374, height: 68, biggerHeight: false, biggerWidth: false, centered: true, viewToCenterTo: base, aligned: false, viewToAlignTo: view, bottomButtons: false, trailing: false)
addConstraints(viewToBeConstrained: logIn, viewToConstraintTo: base, x: 20, y: 338, width: 374, height: 50, biggerHeight: false, biggerWidth: false, centered: true, viewToCenterTo: base, aligned: false, viewToAlignTo: view, bottomButtons: false, trailing: false)
addConstraints(viewToBeConstrained: apple, viewToConstraintTo: base, x: 20, y: 486, width: 374, height: 50, biggerHeight: false, biggerWidth: false, centered: true, viewToCenterTo: base, aligned: false, viewToAlignTo: view, bottomButtons: false, trailing: false)
addConstraints(viewToBeConstrained: google, viewToConstraintTo: base, x: 20, y: 546, width: 374, height: 50, biggerHeight: false, biggerWidth: false, centered: true, viewToCenterTo: base, aligned: false, viewToAlignTo: view, bottomButtons: false, trailing: false)
return base
}
func setUpEmailField() -> UIView {
let container = UIView(frame: CGRect(x: 20, y: 113, width: 374, height: 68))
container.layer.cornerRadius = 14
container.layer.borderWidth = 2.5
container.layer.borderColor = .testBlue
let emailContainer = UIView(frame: CGRect(x: 14, y: 12, width: 57, height: 17))
let mailImage = UIImageView(frame: CGRect(x: 0, y: 4, width: 13.3333333, height: 10))
mailImage.image = #imageLiteral(resourceName: "envelope")
mailImage.contentMode = .scaleAspectFit
let emailLabel = UILabel(frame: CGRect(x: 23, y: 0, width: 34, height: 18))
emailLabel.font = UIFont(name: "Poppins-Medium", size: 12)
emailLabel.textColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.5341)
emailLabel.text = "Email"
emailContainer.addSubviews([mailImage,emailLabel])
addConstraints(viewToBeConstrained: mailImage, viewToConstraintTo: emailContainer, x: 0, y: 4, width: 13.3333333, height: 10, biggerHeight: false, biggerWidth: false, centered: false, viewToCenterTo: view, aligned: false, viewToAlignTo: view, bottomButtons: false, trailing: false)
addConstraints(viewToBeConstrained: emailLabel, viewToConstraintTo: emailContainer, x: 23, y: 0, width: 34, height: 18, biggerHeight: false, biggerWidth: true, centered: false, viewToCenterTo: view, aligned: false, viewToAlignTo: view, bottomButtons: false, trailing: false)
emailField.font = UIFont(name: "Poppins-Medium", size: 12)
emailField.attributedPlaceholder = NSAttributedString(string: "Enter your email here", attributes: [NSAttributedString.Key.foregroundColor : UIColor(red: 105.0/255.0, green: 105.0/255.0, blue: 105.0/255.0, alpha: 0.5341)])
container.addSubviews([emailContainer, emailField])
addConstraints(viewToBeConstrained: emailContainer, viewToConstraintTo: container, x: 14, y: 12, width: 57, height: 17, biggerHeight: false, biggerWidth: false, centered: false, viewToCenterTo: view, aligned: false, viewToAlignTo: view, bottomButtons: false, trailing: false)
addConstraints(viewToBeConstrained: emailField, viewToConstraintTo: container, x: 14, y: 38, width: 225, height: 18, biggerHeight: true, biggerWidth: false, centered: false, viewToCenterTo: view, aligned: false, viewToAlignTo: view, bottomButtons: false, trailing: false)
return container
}
func setUpPasswordField() -> UIView {
let container = UIView(frame: CGRect(x: 20, y: 201, width: 374, height: 68))
container.layer.cornerRadius = 14
container.layer.borderWidth = 2.5
container.layer.borderColor = .testBlue
let passwordContainer = UIView(frame: CGRect(x: 14, y: 15, width: 57, height: 17))
let lockImage = UIImageView(frame: CGRect(x: 0, y: 0, width: 9.5, height: 12.67))
lockImage.image = #imageLiteral(resourceName: "padlock")
lockImage.contentMode = .scaleAspectFit
let passwordLabel = UILabel(frame: CGRect(x: 115.0/6.0, y: 0, width: 59, height: 18))
passwordLabel.font = UIFont(name: "Poppins-Medium", size: 12)
passwordLabel.textColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.5341)
passwordLabel.text = "Password"
passwordContainer.addSubviews([lockImage,passwordLabel])
addConstraints(viewToBeConstrained: lockImage, viewToConstraintTo: passwordContainer, x: 0, y: 0, width: 9.5, height: 12.67, biggerHeight: false, biggerWidth: false, centered: false, viewToCenterTo: view, aligned: false, viewToAlignTo: view, bottomButtons: false, trailing: false)
addConstraints(viewToBeConstrained: passwordLabel, viewToConstraintTo: passwordContainer, x: 115.0/6.0, y: 0, width: 59, height: 18, biggerHeight: false, biggerWidth: true, centered: false, viewToCenterTo: view, aligned: false, viewToAlignTo: view, bottomButtons: false, trailing: false)
passwordField.font = UIFont(name: "Poppins-Medium", size: 12)
passwordField.attributedPlaceholder = NSAttributedString(string: "Enter your password", attributes: [NSAttributedString.Key.foregroundColor : UIColor(red: 105.0/255.0, green: 105.0/255.0, blue: 105.0/255.0, alpha: 0.5341)])
passwordField.isSecureTextEntry = true
let eyeButton = UIButton(frame: CGRect(x: 336, y: 28, width: 18.47, height: 11.94))
eyeButton.setImage(UIImage(named: "eye"), for: .normal)
eyeButton.contentMode = .scaleAspectFit
eyeButton.contentHorizontalAlignment = .fill
eyeButton.contentVerticalAlignment = .fill
eyeButton.addTarget(self, action: #selector(self.eyePressed), for: .touchUpInside)
container.addSubviews([passwordContainer, passwordField, eyeButton])
addConstraints(viewToBeConstrained: passwordContainer, viewToConstraintTo: container, x: 14, y: 15, width: 57, height: 17, biggerHeight: false, biggerWidth: false, centered: false, viewToCenterTo: view, aligned: false, viewToAlignTo: view, bottomButtons: false, trailing: false)
addConstraints(viewToBeConstrained: passwordField, viewToConstraintTo: container, x: 14, y: 38, width: 225, height: 18, biggerHeight: true, biggerWidth: false, centered: false, viewToCenterTo: view, aligned: false, viewToAlignTo: view, bottomButtons: false, trailing: false)
addConstraints(viewToBeConstrained: eyeButton, viewToConstraintTo: container, x: 38, y: 28, width: 18.47, height: 11.94, biggerHeight: false, biggerWidth: false, centered: false, viewToCenterTo: view, aligned: false, viewToAlignTo: view, bottomButtons: false, trailing: true)
return container
}
func setUpButtomButtons() -> UIView {
let container = UIView(frame: CGRect(x: 20, y: 285, width: 374, height: 20))
check.contentMode = .scaleAspectFit
check.contentHorizontalAlignment = .fill
check.contentVerticalAlignment = .fill
check.isSelected = true
check.setImage(UIImage(named: "onCheck"), for: .selected)
check.setImage(UIImage(named: "offCheck"), for: .normal)
check.addTarget(self, action: #selector(self.rememberPressed), for: .touchUpInside)
let rememberLabel = UILabel(frame: CGRect(x: 24, y: 0, width: 106, height: 21))
rememberLabel.amx_autoScaleEnabled = false
rememberLabel.font = UIFont(name: "Poppins-Medium", size: (14/896)*viewHeight)
rememberLabel.textColor = .testBlue
rememberLabel.text = "Remember Me"
let forgotButton = UIButton(frame: CGRect(x: 248, y: 0, width: 126, height: 21))
forgotButton.setTitle("Forgot Password?", for: .normal)
forgotButton.titleLabel?.amx_autoScaleEnabled = false
forgotButton.titleLabel?.font = UIFont(name: "Poppins-Medium", size: (14/896)*viewHeight)
forgotButton.setTitleColor(.testBlue, for: .normal)
forgotButton.addTarget(self, action: #selector(self.forgotPressed), for: .touchUpInside)
container.addSubviews([check,rememberLabel,forgotButton])
addConstraints(viewToBeConstrained: check, viewToConstraintTo: container, x: 0, y: 2, width: 16, height: 16, biggerHeight: false, biggerWidth: false, centered: false, viewToCenterTo: view, aligned: false, viewToAlignTo: view, bottomButtons: false, trailing: false)
addConstraints(viewToBeConstrained: rememberLabel, viewToConstraintTo: container, x: 24, y: 0, width: 106, height: 21, biggerHeight: false, biggerWidth: false, centered: false, viewToCenterTo: view, aligned: false, viewToAlignTo: view, bottomButtons: true, trailing: false)
addConstraints(viewToBeConstrained: forgotButton, viewToConstraintTo: container, x: 248, y: 0, width: 126, height: 21, biggerHeight: false, biggerWidth: false, centered: false, viewToCenterTo: view, aligned: false, viewToAlignTo: view, bottomButtons: true, trailing: false)
return container
}
func setUpBottomBox() -> UIView {
let bottom = UIView(frame: CGRect(x: 0, y: 826, width: 414, height: 70))
bottom.layer.cornerRadius = 20
bottom.layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner]
bottom.backgroundColor = .white
bottom.layer.shadowColor = CGColor(red: 125.0/255.0, green: 125.0/255.0, blue: 125.0/255.0, alpha: 0.5)
bottom.layer.shadowOpacity = 1
bottom.layer.shadowOffset = CGSize(width: 0, height: 2)
bottom.layer.shadowRadius = 10 / 2
bottom.layer.shadowPath = nil
let bottomContainer = UIView(frame: CGRect(x: 103, y: 15, width: 215, height: 20))
let accountLabel = UILabel(frame: CGRect(x: 103, y: 15, width: 155, height: 20))
accountLabel.text = "Don't have an account?"
accountLabel.textColor = UIColor(red: 169.0/255.0, green: 169.0/255.0, blue: 186.0/255.0, alpha: 1)
accountLabel.amx_autoScaleEnabled = false
accountLabel.font = UIFont(name: "Poppins-Regular", size: (13/896)*viewHeight)
let signUpButton = UIButton(frame: CGRect(x: 262, y: 15, width: 55, height: 20))
signUpButton.setTitle("Sign Up", for: .normal)
signUpButton.setTitleColor(UIColor(red: 98.0/255.0, green: 54.0/255.0, blue: 1.0, alpha: 1.0), for: .normal)
signUpButton.titleLabel?.amx_autoScaleEnabled = false
signUpButton.titleLabel?.font = UIFont(name: "Poppins-Bold", size: (13/896)*viewHeight)
signUpButton.addTarget(self, action: #selector(self.signUpPressed), for: .touchUpInside)
bottomContainer.addSubviews([accountLabel,signUpButton])
addConstraints(viewToBeConstrained: accountLabel, viewToConstraintTo: bottomContainer, x: 0, y: 0, width: 155, height: 20, biggerHeight: false, biggerWidth: false, centered: false, viewToCenterTo: view, aligned: false, viewToAlignTo: view, bottomButtons: true, trailing: false)
addConstraints(viewToBeConstrained: signUpButton, viewToConstraintTo: bottomContainer, x: 159, y: 0, width: 55, height: 20, biggerHeight: false, biggerWidth: false, centered: false, viewToCenterTo: view, aligned: false, viewToAlignTo: view, bottomButtons: true, trailing: false)
bottom.addSubview(bottomContainer)
addConstraints(viewToBeConstrained: bottomContainer, viewToConstraintTo: bottom, x: 103, y: 15, width: 215, height: 20, biggerHeight: false, biggerWidth: false, centered: true, viewToCenterTo: bottom, aligned: false, viewToAlignTo: view, bottomButtons: false, trailing: false)
return bottom
}
@objc func eyePressed(sender : UIButton) {
passwordField.isSecureTextEntry.toggle()
}
@objc func backButtonTapped(sender : UIButton) {
self.navigationController?.popViewController(animated: true)
}
@objc func forgotPressed(sender : UIButton) {
self.performSegue(withIdentifier: "logInToForgotStudent", sender: self)
}
@objc func rememberPressed(sender : UIButton) {
check.isSelected.toggle()
}
@objc func googlePressed(sender : UIButton) {
GIDSignIn.sharedInstance().signIn()
}
@objc func loginPressed(sender : UIButton) {
if let email = emailField.text, let password = passwordField.text {
Auth.auth().signIn(withEmail: email, password: password) { authResult, error in
if let authResult = authResult {
let user = authResult.user
if user.isEmailVerified {
UserDefaults.standard.set("student", forKey: "person")
UserDefaults.standard.synchronize()
self.performSegue(withIdentifier: "studentSignIntostudentTabBar", sender: self)
} else {
let alert = UIAlertController(title: "Alert", message: "Please confirm email", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { action in
switch action.style{
case .default:
print("default")
case .cancel:
print("cancel")
case .destructive:
print("destructive")
}
}))
self.present(alert, animated: true, completion: nil)
}
}
if let e = error {
print(e)
}
}
}
}
@objc func signUpPressed(sender : UIButton) {
self.performSegue(withIdentifier: "studentSignInToStudentSignUp", sender: self)
}
}
@available(iOS 13.0, *)
extension LoginSignUpPageViewControllerStudent: ASAuthorizationControllerDelegate {
func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
print("authorizes")
if let appleIDCredential = authorization.credential as? ASAuthorizationAppleIDCredential {
guard let nonce = currentNonce else {
fatalError("Invalid state: A login callback was received, but no login request was sent.")
}
guard let appleIDToken = appleIDCredential.identityToken else {
print("Unable to fetch identity token")
return
}
guard let idTokenString = String(data: appleIDToken, encoding: .utf8) else {
print("Unable to serialize token string from data: \(appleIDToken.debugDescription)")
return
}
let credential = OAuthProvider.credential(withProviderID: "apple.com",
idToken: idTokenString,
rawNonce: nonce)
Auth.auth().signIn(with: credential) { (authResult, error) in
if (error != nil) {
if let fullNameA = appleIDCredential.fullName, let fullNameB = authResult?.user.displayName, fullNameB == "" {
let f = PersonNameComponentsFormatter()
let changeRequest = authResult?.user.createProfileChangeRequest()
changeRequest?.displayName = f.string(from: fullNameA)
changeRequest?.commitChanges { error in
print("error saving name \(error)")
}
}
print("errrrrrrrrrr")
print(error?.localizedDescription ?? "")
return
}
UserDefaults.standard.set("student", forKey: "person")
UserDefaults.standard.synchronize()
self.performSegue(withIdentifier: "studentSignIntostudentTabBar", sender: self)
}
}
}
func authorizationController(controller: ASAuthorizationController, didCompleteWithError error: Error) {
// Handle error.
print("Sign in with Apple errored: \(error)")
}
}
extension LoginSignUpPageViewControllerStudent : ASAuthorizationControllerPresentationContextProviding {
func presentationAnchor(for controller: ASAuthorizationController) -> ASPresentationAnchor {
return self.view.window!
}
}
Editor is loading...