@@ -19,6 +19,7 @@ var hostSocket: String = ""
1919public var auth : Auth ?
2020var socketManager = SocketManager ( )
2121var runtime = Runtime ( )
22+ let timeoutLogin = 10
2223public typealias CallBackTypeConnection = ( String ) -> Void
2324var authConnection = [ String: CallBackTypeConnection] ( )
2425
@@ -63,6 +64,8 @@ enum Router: URLRequestConvertible {
6364 case refreshToken( )
6465 case broadcast( [ String : Any ] , String )
6566 case respond( [ String : Any ] )
67+ case getCurrentUser( )
68+ case getToken( [ String : Any ] )
6669 //create
6770 case createDevice( [ String : Any ] )
6871 case createData( String , String , [ String : Any ] )
@@ -165,6 +168,10 @@ enum Router: URLRequestConvertible {
165168 return . delete
166169 case . deleteThing:
167170 return . delete
171+ case . getCurrentUser:
172+ return . get
173+ case . getToken:
174+ return . post
168175 }
169176 }
170177
@@ -248,7 +255,10 @@ enum Router: URLRequestConvertible {
248255 return " /api/locations/ \( uuid) "
249256 case . deleteThing( let uuid) :
250257 return " /api/things/ \( uuid) "
251-
258+ case . getCurrentUser:
259+ return " /api/users/current "
260+ case . getToken:
261+ return " /api/auth/token "
252262 }
253263 }
254264
@@ -334,6 +344,9 @@ enum Router: URLRequestConvertible {
334344 case . saveThing( _, let parameters) :
335345 urlRequest = try JSONEncoding . default. encode ( urlRequest, with: parameters)
336346 expLogging ( " EXP Http Request saveThing: \( urlRequest) " )
347+ case . getToken( let parameters) :
348+ urlRequest = try JSONEncoding . default. encode ( urlRequest, with: parameters)
349+ expLogging ( " EXP Http Request getToken: \( urlRequest) " )
337350 default :
338351 break
339352 }
@@ -366,10 +379,19 @@ Initialize the SDK and connect to EXP.
366379@param options.
367380@return Promise<Bool>.
368381*/
369- public func start( _ options: [ String : String ] ) -> Promise < Bool > {
382+ public func start( _ options: [ String : Any ] ) -> Promise < Bool > {
370383 return runtime. start ( options)
371384}
372385
386+ /**
387+ Initialize the SDK and connect to EXP.
388+ @param options.
389+ @return Promise<Bool>.
390+ */
391+ public func start( _ host: String , auth: Auth ) -> Promise < Bool > {
392+ return runtime. start ( host, auth: auth)
393+ }
394+
373395/**
374396 Get list of devices
375397 @param dictionary of search params
@@ -843,9 +865,9 @@ public func deleteFeed(_ uuid:String) -> Promise<Void>{
843865 @param options.
844866 @return Promise<Auth>.
845867 */
846- func login( _ options: [ String : String ] ) -> Promise < Auth > {
868+ func login( _ options: [ String : Any ? ] ) -> Promise < Auth > {
847869 return Promise { fulfill, reject in
848- Alamofire . request ( Router . login ( options as [ String : AnyObject ] ) ) . validate ( )
870+ Alamofire . request ( Router . login ( options) ) . validate ( )
849871 . responseObject { ( response: DataResponse < Auth > ) in
850872 switch response. result{
851873 case . success( let data) :
@@ -1015,6 +1037,80 @@ public func respond(_ params:[String:Any]) -> Promise<Message>{
10151037 }
10161038}
10171039
1040+ /**
1041+ Get Current User
1042+ @param params.
1043+ @return Promise<User>.
1044+ */
1045+ public func getCurrentUser( ) -> Promise < User > {
1046+ return Promise { fulfill, reject in
1047+ Alamofire . request ( Router . getCurrentUser ( ) ) . validate ( )
1048+ . responseObject { ( response: DataResponse < User > ) in
1049+ switch response. result{
1050+ case . success( let data) :
1051+ fulfill ( data)
1052+ case . failure( let error) :
1053+ return reject ( error)
1054+ }
1055+ }
1056+ }
1057+ }
1058+
1059+ /**
1060+ Get Current User
1061+ @param params.
1062+ @return Promise<User>.
1063+ */
1064+ public func getToken( _ options: [ String : Any ] ) -> Promise < Auth > {
1065+ return Promise { fulfill, reject in
1066+ Alamofire . request ( Router . getToken ( options) ) . validate ( )
1067+ . responseObject { ( response: DataResponse < Auth > ) in
1068+ switch response. result{
1069+ case . success( let data) :
1070+ fulfill ( data)
1071+ case . failure( let error) :
1072+ return reject ( error)
1073+ }
1074+ }
1075+ }
1076+ }
1077+
1078+
1079+ /**
1080+ Get Current User
1081+ @param params.
1082+ @return Promise<User>.
1083+ */
1084+ public func getUser( _ host: String , token: String ) -> Promise < User > {
1085+ expLogging ( " EXP GET USER : \( token) " )
1086+ tokenSDK = token
1087+ hostUrl = host
1088+ return Promise { fulfill, reject in
1089+ Alamofire . request ( Router . getCurrentUser ( ) ) . validate ( )
1090+ . responseObject { ( response: DataResponse < User > ) in
1091+ switch response. result{
1092+ case . success( let data) :
1093+ fulfill ( data)
1094+ case . failure( let error) :
1095+ return reject ( error)
1096+ }
1097+ }
1098+ }
1099+ }
1100+
1101+ /**
1102+ Starth with Auth
1103+ @param options.
1104+ @return Promise<Auth>.
1105+ */
1106+ func startAuth( _ data: Auth ) {
1107+ //set auth to context
1108+ auth = data
1109+ setTokenSDK ( data)
1110+ refreshAuthToken ( data)
1111+ }
1112+
1113+
10181114
10191115/**
10201116Connection Socket
@@ -1046,7 +1142,7 @@ public func stop(){
10461142
10471143
10481144/**
1049- Refresh Auth Token Recursive with Timeout
1145+ Refresh Auth Token Recursive with Auth
10501146*/
10511147private func refreshAuthToken( _ result: Auth ) {
10521148 after ( interval: getTimeout ( result) ) . then { result -> Void in
@@ -1057,14 +1153,39 @@ private func refreshAuthToken(_ result:Auth){
10571153 refreshAuthToken ( result)
10581154 }
10591155 }
1156+ }
10601157
1158+ /**
1159+ Refresh Auth Token Recursive with Timeout
1160+ */
1161+ private func refreshAuthToken( _ timeout: String ) {
1162+ after ( interval: getTimeout ( Double ( timeout) !) ) . then { result -> Void in
1163+ refreshToken ( ) . then { result -> Void in
1164+ setTokenSDK ( result)
1165+ expLogging ( " EXP refreshAuthToken: \( result. document) " )
1166+ socketManager. refreshConnection ( )
1167+ refreshAuthToken ( result)
1168+ }
1169+ }
10611170}
10621171
10631172/**
10641173 Get Time Out
10651174 */
10661175private func getTimeout( _ data: Auth ) -> TimeInterval {
1067- let expiration = data. get ( " expiration " ) as! Double
1176+ var timeoutVal : TimeInterval = TimeInterval ( timeoutLogin) ;
1177+ if let expiration = data. get ( " expiration " ) as? Double {
1178+ let startDate = Date ( timeIntervalSince1970: expiration/ 1000 )
1179+ var timeout = startDate. timeIntervalSince ( Date ( ) )
1180+ timeoutVal = TimeInterval ( Int64 ( timeout) )
1181+ }
1182+ return timeoutVal
1183+ }
1184+
1185+ /**
1186+ Get Time Out
1187+ */
1188+ private func getTimeout( _ expiration: Double ) -> TimeInterval {
10681189 let startDate = Date ( timeIntervalSince1970: expiration/ 1000 )
10691190 let timeout = startDate. timeIntervalSince ( Date ( ) )
10701191 return TimeInterval ( Int64 ( timeout) )
0 commit comments