@@ -40,6 +40,14 @@ enum AuthMenu: String {
40
40
case removeLastIdTokenChangeListener
41
41
case verifyClient
42
42
case deleteApp
43
+ case actionType
44
+ case continueURL
45
+ case requestVerifyEmail
46
+ case requestPasswordReset
47
+ case resetPassword
48
+ case checkActionCode
49
+ case applyActionCode
50
+ case verifyPasswordResetCode
43
51
44
52
// More intuitively named getter for `rawValue`.
45
53
var id : String { rawValue }
@@ -95,6 +103,23 @@ enum AuthMenu: String {
95
103
return " Verify Client "
96
104
case . deleteApp:
97
105
return " Delete App "
106
+ // OOB
107
+ case . actionType:
108
+ return " Action Type "
109
+ case . continueURL:
110
+ return " Continue URL "
111
+ case . requestVerifyEmail:
112
+ return " Request Verify Email "
113
+ case . requestPasswordReset:
114
+ return " Request Password Reset "
115
+ case . resetPassword:
116
+ return " Reset Password "
117
+ case . checkActionCode:
118
+ return " Check Action Code "
119
+ case . applyActionCode:
120
+ return " Apply Action Code "
121
+ case . verifyPasswordResetCode:
122
+ return " Verify Password Reset Code "
98
123
}
99
124
}
100
125
@@ -150,6 +175,52 @@ enum AuthMenu: String {
150
175
self = . verifyClient
151
176
case " Delete App " :
152
177
self = . deleteApp
178
+ case " Action Type " :
179
+ self = . actionType
180
+ case " Continue URL " :
181
+ self = . continueURL
182
+ case " Request Verify Email " :
183
+ self = . requestVerifyEmail
184
+ case " Request Password Reset " :
185
+ self = . requestPasswordReset
186
+ case " Reset Password " :
187
+ self = . resetPassword
188
+ case " Check Action Code " :
189
+ self = . checkActionCode
190
+ case " Apply Action Code " :
191
+ self = . applyActionCode
192
+ case " Verify Password Reset Code " :
193
+ self = . verifyPasswordResetCode
194
+ default :
195
+ return nil
196
+ }
197
+ }
198
+ }
199
+
200
+ enum ActionCodeRequestType : String {
201
+ case email
202
+ case `continue`
203
+ case inApp
204
+
205
+ var name : String {
206
+ switch self {
207
+ case . email:
208
+ return " Email Only "
209
+ case . inApp:
210
+ return " In-App + Continue URL "
211
+ case . continue:
212
+ return " Continue URL "
213
+ }
214
+ }
215
+
216
+ init ? ( rawValue: String ) {
217
+ switch rawValue {
218
+ case " Email Only " :
219
+ self = . email
220
+ case " In-App + Continue URL " :
221
+ self = . inApp
222
+ case " Continue URL " :
223
+ self = . continue
153
224
default :
154
225
return nil
155
226
}
@@ -158,14 +229,14 @@ enum AuthMenu: String {
158
229
159
230
// MARK: DataSourceProvidable
160
231
161
- extension AuthMenu : DataSourceProvidable {
232
+ class AuthMenuData : DataSourceProvidable {
162
233
private static var providers : [ AuthMenu ] {
163
234
[ . google, . apple, . twitter, . microsoft, . gitHub, . yahoo, . facebook, . gameCenter]
164
235
}
165
236
166
237
static var settingsSection : Section {
167
238
let header = " Auth Settings "
168
- let item = Item ( title: settings. name, hasNestedContent: true )
239
+ let item = Item ( title: AuthMenu . settings. name, hasNestedContent: true )
169
240
return Section ( headerDescription: header, items: [ item] )
170
241
}
171
242
@@ -179,7 +250,7 @@ extension AuthMenu: DataSourceProvidable {
179
250
static var emailPasswordSection : Section {
180
251
let image = UIImage ( named: " firebaseIcon " )
181
252
let header = " Email and Password Login "
182
- let item = Item ( title: emailPassword. name, hasNestedContent: true , image: image)
253
+ let item = Item ( title: AuthMenu . emailPassword. name, hasNestedContent: true , image: image)
183
254
return Section ( headerDescription: header, items: [ item] )
184
255
}
185
256
@@ -190,10 +261,10 @@ extension AuthMenu: DataSourceProvidable {
190
261
let shieldSymbol = UIImage . systemImage ( " lock.shield.fill " , tintColor: . systemOrange)
191
262
192
263
let otherOptions = [
193
- Item ( title: passwordless. name, image: lockSymbol) ,
194
- Item ( title: phoneNumber. name, image: phoneSymbol) ,
195
- Item ( title: anonymous. name, image: anonSymbol) ,
196
- Item ( title: custom. name, image: shieldSymbol) ,
264
+ Item ( title: AuthMenu . passwordless. name, image: lockSymbol) ,
265
+ Item ( title: AuthMenu . phoneNumber. name, image: phoneSymbol) ,
266
+ Item ( title: AuthMenu . anonymous. name, image: anonSymbol) ,
267
+ Item ( title: AuthMenu . custom. name, image: shieldSymbol) ,
197
268
]
198
269
let header = " Other Authentication Methods "
199
270
return Section ( headerDescription: header, items: otherOptions)
@@ -202,44 +273,58 @@ extension AuthMenu: DataSourceProvidable {
202
273
static var recaptchaSection : Section {
203
274
let image = UIImage ( named: " firebaseIcon " )
204
275
let header = " Initialize reCAPTCHA Enterprise "
205
- let item = Item ( title: initRecaptcha. name, hasNestedContent: false , image: image)
276
+ let item = Item ( title: AuthMenu . initRecaptcha. name, hasNestedContent: false , image: image)
206
277
return Section ( headerDescription: header, items: [ item] )
207
278
}
208
279
209
280
static var customAuthDomainSection : Section {
210
281
let image = UIImage ( named: " firebaseIcon " )
211
282
let header = " Custom Auth Domain "
212
- let item = Item ( title: customAuthDomain. name, hasNestedContent: false , image: image)
283
+ let item = Item ( title: AuthMenu . customAuthDomain. name, hasNestedContent: false , image: image)
213
284
return Section ( headerDescription: header, items: [ item] )
214
285
}
215
286
216
287
static var appSection : Section {
217
288
let header = " APP "
218
289
let items : [ Item ] = [
219
- Item ( title: getToken. name) ,
220
- Item ( title: getTokenForceRefresh. name) ,
221
- Item ( title: addAuthStateChangeListener. name) ,
222
- Item ( title: removeLastAuthStateChangeListener. name) ,
223
- Item ( title: addIdTokenChangeListener. name) ,
224
- Item ( title: removeLastIdTokenChangeListener. name) ,
225
- Item ( title: verifyClient. name) ,
226
- Item ( title: deleteApp. name) ,
290
+ Item ( title: AuthMenu . getToken. name) ,
291
+ Item ( title: AuthMenu . getTokenForceRefresh. name) ,
292
+ Item ( title: AuthMenu . addAuthStateChangeListener. name) ,
293
+ Item ( title: AuthMenu . removeLastAuthStateChangeListener. name) ,
294
+ Item ( title: AuthMenu . addIdTokenChangeListener. name) ,
295
+ Item ( title: AuthMenu . removeLastIdTokenChangeListener. name) ,
296
+ Item ( title: AuthMenu . verifyClient. name) ,
297
+ Item ( title: AuthMenu . deleteApp. name) ,
227
298
]
228
299
return Section ( headerDescription: header, items: items)
229
300
}
230
301
231
- static var sections : [ Section ] {
232
- [ settingsSection, providerSection, emailPasswordSection, otherSection, recaptchaSection,
233
- customAuthDomainSection, appSection]
302
+ static var oobSection : Section {
303
+ let header = " OOB "
304
+ let items : [ Item ] = [
305
+ Item ( title: AuthMenu . actionType. name, detailTitle: ActionCodeRequestType . inApp. name) ,
306
+ Item ( title: AuthMenu . continueURL. name, detailTitle: " -- " , isEditable: true ) ,
307
+ Item ( title: AuthMenu . requestVerifyEmail. name) ,
308
+ Item ( title: AuthMenu . requestPasswordReset. name) ,
309
+ Item ( title: AuthMenu . resetPassword. name) ,
310
+ Item ( title: AuthMenu . checkActionCode. name) ,
311
+ Item ( title: AuthMenu . applyActionCode. name) ,
312
+ Item ( title: AuthMenu . verifyPasswordResetCode. name) ,
313
+ ]
314
+ return Section ( headerDescription: header, items: items)
234
315
}
235
316
317
+ static var sections : [ Section ] =
318
+ [ settingsSection, providerSection, emailPasswordSection, otherSection, recaptchaSection,
319
+ customAuthDomainSection, appSection, oobSection]
320
+
236
321
static var authLinkSections : [ Section ] {
237
- let allItems = AuthMenu . sections. flatMap { $0. items }
322
+ let allItems = AuthMenuData . sections. flatMap { $0. items }
238
323
let header = " Manage linking between providers "
239
324
let footer =
240
325
" Select an unchecked row to link the currently signed in user to that auth provider. To unlink the user from a linked provider, select its corresponding row marked with a checkmark. "
241
326
return [ Section ( headerDescription: header, footerDescription: footer, items: allItems) ]
242
327
}
243
328
244
- var sections : [ Section ] { AuthMenu . sections }
329
+ var sections : [ Section ] = AuthMenuData . sections
245
330
}
0 commit comments