|
|
|
|
@ -83,6 +83,10 @@ public class Services { |
|
|
|
|
var request = URLRequest(url: url) |
|
|
|
|
request.httpMethod = method.rawValue |
|
|
|
|
request.setValue("application/json", forHTTPHeaderField: "Content-Type") |
|
|
|
|
// if let token = try? self.keychainStore.getToken() { |
|
|
|
|
// request.addValue("Token \(token)", forHTTPHeaderField: "Authorization") |
|
|
|
|
// } |
|
|
|
|
|
|
|
|
|
return request |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -124,22 +128,31 @@ public class Services { |
|
|
|
|
let user = User(username: username, password: password, email: email) |
|
|
|
|
postRequest.httpBody = try jsonEncoder.encode(user) |
|
|
|
|
let _: User = try await self.runRequest(postRequest) |
|
|
|
|
let _ = try await requestToken(user: user) |
|
|
|
|
let _ = try await requestToken(username: username, password: password) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func requestToken(user: User) async throws -> String { |
|
|
|
|
var postRequest = try self._baseRequest(servicePath: "api-token-auth/", method: .post) |
|
|
|
|
postRequest.httpBody = try jsonEncoder.encode(user) |
|
|
|
|
func requestToken(username: String, password: String) async throws -> String { |
|
|
|
|
var postRequest = try self._baseRequest(servicePath: "plus/api-token-auth/", method: .post) |
|
|
|
|
let credentials = Credentials(username: username, password: password) |
|
|
|
|
postRequest.httpBody = try jsonEncoder.encode(credentials) |
|
|
|
|
let response: AuthResponse = try await self.runRequest(postRequest) |
|
|
|
|
try self.keychainStore.add(username: user.username, token: response.token) |
|
|
|
|
do { |
|
|
|
|
try self.keychainStore.add(username: username, token: response.token) |
|
|
|
|
} catch { |
|
|
|
|
Logger.error(error) |
|
|
|
|
} |
|
|
|
|
return response.token |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public func login(username: String, password: String) async throws -> User { |
|
|
|
|
var postRequest = try self._baseRequest(servicePath: "users/", method: .post) |
|
|
|
|
let credentials = Credentials(username: username, password: password) |
|
|
|
|
postRequest.httpBody = try jsonEncoder.encode(credentials) |
|
|
|
|
return try await self.runRequest(postRequest) |
|
|
|
|
let token: String = try await requestToken(username: username, password: password) |
|
|
|
|
Logger.log("token = \(token)") |
|
|
|
|
var postRequest = try self._baseRequest(servicePath: "plus/user-by-token/", method: .post) |
|
|
|
|
postRequest.httpBody = try jsonEncoder.encode(Token(token: token)) |
|
|
|
|
let user: User = try await self.runRequest(postRequest) |
|
|
|
|
Logger.log("user = \(user.username), id = \(user.id)") |
|
|
|
|
Store.main.setUserUUID(uuidString: user.id) |
|
|
|
|
return user |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func forgotPassword(user: User) async throws { |
|
|
|
|
@ -150,8 +163,6 @@ public class Services { |
|
|
|
|
// let _ = try await requestToken(credentials: credentials) |
|
|
|
|
// return response |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -164,6 +175,10 @@ struct Credentials: Codable { |
|
|
|
|
var password: String |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
struct Token: Codable { |
|
|
|
|
var token: String |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public struct User: Codable { |
|
|
|
|
var id: String = Store.randomId() |
|
|
|
|
var username: String |
|
|
|
|
|