Skip to content

Commit b738d23

Browse files
author
aforge
committed
Password reset by phone (basic).
UI isn't fully functional yet.
1 parent b2f2913 commit b738d23

File tree

6 files changed

+399
-94
lines changed

6 files changed

+399
-94
lines changed

TinodeSDK/AuthScheme.swift

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,14 @@
77

88
import Foundation
99

10-
struct AuthScheme {
10+
public struct AuthScheme {
1111
enum AuthSchemeError: Error {
1212
case invalidParams(String)
1313
}
1414
static let kLoginBasic = "basic"
1515
static let kLoginToken = "token"
1616
static let kLoginReset = "reset"
17+
static let kLoginCode = "code"
1718

1819
let scheme: String
1920
let secret: String
@@ -74,6 +75,11 @@ struct AuthScheme {
7475
static func tokenInstance(secret: String) -> AuthScheme {
7576
return AuthScheme(scheme: kLoginToken, secret: secret)
7677
}
78+
79+
public static func codeInstance(code: String, method: String, value: String) throws -> AuthScheme {
80+
// The secret is structured as <code>:<cred_method>:<cred_value>, "123456:email:[email protected]".
81+
return AuthScheme(scheme: AuthScheme.kLoginCode, secret: try encodeResetToken(scheme: code, method: method, value: value))
82+
}
7783
}
7884

7985
extension String {

TinodeSDK/Tinode.swift

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -835,9 +835,9 @@ public class Tinode {
835835
/// - desc: default access parameters for this account
836836
/// - creds: creds
837837
/// - Returns: PromisedReply of the reply ctrl message
838-
public func account<Pu: Codable, Pr: Codable>(uid: String?, scheme: String, secret: String, loginNow: Bool, tags: [String]?, desc: MetaSetDesc<Pu, Pr>?, creds: [Credential]?) -> PromisedReply<ServerMessage> {
838+
public func account<Pu: Codable, Pr: Codable>(uid: String?, tmpscheme: String? = nil, tmpsecret: String? = nil, scheme: String, secret: String, loginNow: Bool, tags: [String]?, desc: MetaSetDesc<Pu, Pr>?, creds: [Credential]?) -> PromisedReply<ServerMessage> {
839839
let msgId = getNextMsgId()
840-
let msga = MsgClientAcc(id: msgId, uid: uid, scheme: scheme, secret: secret, doLogin: loginNow, desc: desc)
840+
let msga = MsgClientAcc(id: msgId, uid: uid, tmpscheme: tmpscheme, tmpsecret: tmpsecret, scheme: scheme, secret: secret, doLogin: loginNow, desc: desc)
841841

842842
if let creds = creds, creds.count > 0 {
843843
for c in creds {
@@ -967,8 +967,10 @@ public class Tinode {
967967
}
968968
}
969969
}
970-
private func updateAccountSecret(uid: String?, scheme: String, secret: String) -> PromisedReply<ServerMessage> {
971-
return account(uid: uid, scheme: scheme, secret: secret, loginNow: false, tags: nil, desc: nil as MetaSetDesc<Int, Int>?, creds: nil)
970+
private func updateAccountSecret(uid: String?,
971+
tmpscheme: String? = nil, tmpsecret: String? = nil,
972+
scheme: String, secret: String) -> PromisedReply<ServerMessage> {
973+
return account(uid: uid, tmpscheme: tmpscheme, tmpsecret: tmpsecret, scheme: scheme, secret: secret, loginNow: false, tags: nil, desc: nil as MetaSetDesc<Int, Int>?, creds: nil)
972974
}
973975
@discardableResult
974976
public func updateAccountBasic(uid: String?, username: String, password: String) -> PromisedReply<ServerMessage> {
@@ -979,6 +981,17 @@ public class Tinode {
979981
return PromisedReply(error: error)
980982
}
981983
}
984+
985+
@discardableResult
986+
public func updateAccountBasic(usingAuthScheme auth: AuthScheme, username: String, password: String) -> PromisedReply<ServerMessage> {
987+
do {
988+
return try updateAccountSecret(uid: nil, tmpscheme: auth.scheme, tmpsecret: auth.secret, scheme: AuthScheme.kLoginBasic,
989+
secret: AuthScheme.encodeBasicToken(uname: username, password: password))
990+
} catch {
991+
return PromisedReply(error: error)
992+
}
993+
}
994+
982995
public func requestResetPassword(method: String, newValue: String) -> PromisedReply<ServerMessage> {
983996
do {
984997
return try login(scheme: AuthScheme.kLoginReset, secret: AuthScheme.encodeResetToken(scheme: AuthScheme.kLoginBasic, method: method, value: newValue), creds: nil)

TinodeSDK/model/ClientMessages.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,8 @@ public class Credential: Codable, Comparable, CustomStringConvertible {
7676
public class MsgClientAcc<Pu: Codable, Pr: Codable>: Codable {
7777
var id: String?
7878
var user: String?
79+
var tmpscheme: String?
80+
var tmpsecret: String?
7981
var scheme: String?
8082
var secret: String?
8183
var login: Bool?
@@ -85,12 +87,16 @@ public class MsgClientAcc<Pu: Codable, Pr: Codable>: Codable {
8587

8688
init(id: String?,
8789
uid: String?,
90+
tmpscheme: String? = nil,
91+
tmpsecret: String? = nil,
8892
scheme: String?,
8993
secret: String?,
9094
doLogin: Bool,
9195
desc: MetaSetDesc<Pu, Pr>?) {
9296
self.id = id
9397
self.user = uid
98+
self.tmpscheme = tmpscheme
99+
self.tmpsecret = tmpsecret
94100
self.scheme = scheme
95101
self.login = doLogin
96102
self.desc = desc

0 commit comments

Comments
 (0)