@@ -47,57 +47,68 @@ func (h ScheduleOnboardingStates) determineCredentialOnboardingStates(c flowpilo
47
47
cfg := deps .Cfg
48
48
result := make ([]flowpilot.StateName , 0 )
49
49
50
- alwaysAcquirePasskey := cfg .Passkey .Enabled && cfg .Passkey .AcquireOnLogin == "always"
51
- alwaysAcquirePassword := cfg .Password .Enabled && cfg .Password .AcquireOnLogin == "always"
52
- conditionalAcquirePasskey := cfg .Passkey .Enabled && cfg .Passkey .AcquireOnLogin == "conditional"
53
- conditionalAcquirePassword := cfg .Password .Enabled && cfg .Password .AcquireOnLogin == "conditional"
54
- neverAcquirePasskey := ! cfg .Passkey .Enabled || cfg .Passkey .AcquireOnLogin == "never"
55
- neverAcquirePassword := ! cfg .Password .Enabled || cfg .Password .AcquireOnLogin == "never"
56
-
57
- if alwaysAcquirePasskey && alwaysAcquirePassword {
58
- if ! hasPasskey && ! hasPassword {
59
- if ! cfg .Password .Optional && cfg .Passkey .Optional {
60
- result = append (result , shared .StatePasswordCreation , shared .StateOnboardingCreatePasskey )
61
- } else {
62
- result = append (result , shared .StateOnboardingCreatePasskey , shared .StatePasswordCreation )
50
+ webauthnAvailable := c .Stash ().Get (shared .StashPathWebauthnAvailable ).Bool ()
51
+ passkeyEnabled := webauthnAvailable && deps .Cfg .Passkey .Enabled
52
+ passwordEnabled := deps .Cfg .Password .Enabled
53
+ passwordAndPasskeyEnabled := passkeyEnabled && passwordEnabled
54
+
55
+ alwaysAcquirePasskey := cfg .Passkey .AcquireOnLogin == "always"
56
+ alwaysAcquirePassword := cfg .Password .AcquireOnLogin == "always"
57
+ conditionalAcquirePasskey := cfg .Passkey .AcquireOnLogin == "conditional"
58
+ conditionalAcquirePassword := cfg .Password .AcquireOnLogin == "conditional"
59
+ neverAcquirePasskey := cfg .Passkey .AcquireOnLogin == "never"
60
+ neverAcquirePassword := cfg .Password .AcquireOnLogin == "never"
61
+
62
+ if passwordAndPasskeyEnabled {
63
+ if alwaysAcquirePasskey && alwaysAcquirePassword {
64
+ if ! hasPasskey && ! hasPassword {
65
+ if ! cfg .Password .Optional && cfg .Passkey .Optional {
66
+ result = append (result , shared .StatePasswordCreation , shared .StateOnboardingCreatePasskey )
67
+ } else {
68
+ result = append (result , shared .StateOnboardingCreatePasskey , shared .StatePasswordCreation )
69
+ }
70
+ } else if hasPasskey && ! hasPassword {
71
+ result = append (result , shared .StatePasswordCreation )
72
+ } else if ! hasPasskey && hasPassword {
73
+ result = append (result , shared .StateOnboardingCreatePasskey )
74
+ }
75
+ } else if alwaysAcquirePasskey && conditionalAcquirePassword {
76
+ if ! hasPasskey && ! hasPassword {
77
+ result = append (result , shared .StateOnboardingCreatePasskey ) // skip should lead to password onboarding
78
+ } else if ! hasPasskey && hasPassword {
79
+ result = append (result , shared .StateOnboardingCreatePasskey )
80
+ }
81
+ } else if conditionalAcquirePasskey && alwaysAcquirePassword {
82
+ if ! hasPasskey && ! hasPassword {
83
+ result = append (result , shared .StatePasswordCreation ) // skip should lead to passkey onboarding
84
+ } else if hasPasskey && ! hasPassword {
85
+ result = append (result , shared .StatePasswordCreation )
86
+ }
87
+ } else if conditionalAcquirePasskey && conditionalAcquirePassword {
88
+ if ! hasPasskey && ! hasPassword {
89
+ result = append (result , shared .StateCredentialOnboardingChooser ) // credential_onboarding_chooser can be skipped
90
+ }
91
+ } else if conditionalAcquirePasskey && neverAcquirePassword {
92
+ if ! hasPasskey && ! hasPassword {
93
+ result = append (result , shared .StateOnboardingCreatePasskey )
94
+ }
95
+ } else if neverAcquirePasskey && conditionalAcquirePassword {
96
+ if ! hasPasskey && ! hasPassword {
97
+ result = append (result , shared .StatePasswordCreation )
98
+ }
99
+ } else if neverAcquirePasskey && alwaysAcquirePassword {
100
+ if ! hasPassword {
101
+ result = append (result , shared .StatePasswordCreation )
102
+ }
103
+ } else if alwaysAcquirePasskey && neverAcquirePassword {
104
+ if ! hasPasskey {
105
+ result = append (result , shared .StateOnboardingCreatePasskey )
63
106
}
64
- } else if hasPasskey && ! hasPassword {
65
- result = append (result , shared .StatePasswordCreation )
66
- } else if ! hasPasskey && hasPassword {
67
- result = append (result , shared .StateOnboardingCreatePasskey )
68
- }
69
- } else if alwaysAcquirePasskey && conditionalAcquirePassword {
70
- if ! hasPasskey && ! hasPassword {
71
- result = append (result , shared .StateOnboardingCreatePasskey ) // skip should lead to password onboarding
72
- } else if ! hasPasskey && hasPassword {
73
- result = append (result , shared .StateOnboardingCreatePasskey )
74
- }
75
- } else if conditionalAcquirePasskey && alwaysAcquirePassword {
76
- if ! hasPasskey && ! hasPassword {
77
- result = append (result , shared .StatePasswordCreation ) // skip should lead to passkey onboarding
78
- } else if hasPasskey && ! hasPassword {
79
- result = append (result , shared .StatePasswordCreation )
80
- }
81
- } else if conditionalAcquirePasskey && conditionalAcquirePassword {
82
- if ! hasPasskey && ! hasPassword {
83
- result = append (result , shared .StateCredentialOnboardingChooser ) // credential_onboarding_chooser can be skipped
84
- }
85
- } else if conditionalAcquirePasskey && neverAcquirePassword {
86
- if ! hasPasskey && ! hasPassword {
87
- result = append (result , shared .StateOnboardingCreatePasskey )
88
- }
89
- } else if neverAcquirePasskey && conditionalAcquirePassword {
90
- if ! hasPasskey && ! hasPassword {
91
- result = append (result , shared .StatePasswordCreation )
92
- }
93
- } else if neverAcquirePasskey && alwaysAcquirePassword {
94
- if ! hasPassword {
95
- result = append (result , shared .StatePasswordCreation )
96
- }
97
- } else if alwaysAcquirePasskey && neverAcquirePassword {
98
- if ! hasPasskey {
99
- result = append (result , shared .StateOnboardingCreatePasskey )
100
107
}
108
+ } else if passkeyEnabled && (alwaysAcquirePasskey || conditionalAcquirePasskey ) {
109
+ result = append (result , shared .StateOnboardingCreatePasskey )
110
+ } else if passwordEnabled && (alwaysAcquirePassword || conditionalAcquirePassword ) {
111
+ result = append (result , shared .StatePasswordCreation )
101
112
}
102
113
103
114
return result
0 commit comments