1
1
import { assign , createMachine } from "xstate"
2
2
import * as API from "../../api/api"
3
3
import * as TypesGen from "../../api/typesGenerated"
4
- import { displaySuccess } from "../../components/GlobalSnackbar/utils"
4
+ import { displayError , displaySuccess } from "../../components/GlobalSnackbar/utils"
5
5
6
6
export const Language = {
7
7
successProfileUpdate : "Updated preferences." ,
8
+ successRegenerateSSHKey : "SSH Key regenerated successfully" ,
9
+ errorRegenerateSSHKey : "Error on regenerate the SSH Key" ,
8
10
}
9
11
10
12
export const checks = {
@@ -31,12 +33,87 @@ export interface AuthContext {
31
33
methods ?: TypesGen . AuthMethods
32
34
permissions ?: Permissions
33
35
checkPermissionsError ?: Error | unknown
36
+ // SSH
37
+ sshKey ?: TypesGen . GitSSHKey
38
+ getSSHKeyError ?: Error | unknown
39
+ regenerateSSHKeyError ?: Error | unknown
34
40
}
35
41
36
42
export type AuthEvent =
37
43
| { type : "SIGN_OUT" }
38
44
| { type : "SIGN_IN" ; email : string ; password : string }
39
45
| { type : "UPDATE_PROFILE" ; data : TypesGen . UpdateUserProfileRequest }
46
+ | { type : "GET_SSH_KEY" }
47
+ | { type : "REGENERATE_SSH_KEY" }
48
+ | { type : "CONFIRM_REGENERATE_SSH_KEY" }
49
+ | { type : "CANCEL_REGENERATE_SSH_KEY" }
50
+
51
+ const sshState = {
52
+ initial : "idle" ,
53
+ states : {
54
+ idle : {
55
+ on : {
56
+ GET_SSH_KEY : {
57
+ target : "gettingSSHKey" ,
58
+ } ,
59
+ } ,
60
+ } ,
61
+ gettingSSHKey : {
62
+ entry : "clearGetSSHKeyError" ,
63
+ invoke : {
64
+ src : "getSSHKey" ,
65
+ onDone : [
66
+ {
67
+ actions : [ "assignSSHKey" ] ,
68
+ target : "#authState.signedIn.ssh.loaded" ,
69
+ } ,
70
+ ] ,
71
+ onError : [
72
+ {
73
+ actions : "assignGetSSHKeyError" ,
74
+ target : "#authState.signedIn.ssh.idle" ,
75
+ } ,
76
+ ] ,
77
+ } ,
78
+ } ,
79
+ loaded : {
80
+ initial : "idle" ,
81
+ states : {
82
+ idle : {
83
+ on : {
84
+ REGENERATE_SSH_KEY : {
85
+ target : "confirmSSHKeyRegenerate" ,
86
+ } ,
87
+ } ,
88
+ } ,
89
+ confirmSSHKeyRegenerate : {
90
+ on : {
91
+ CANCEL_REGENERATE_SSH_KEY : "idle" ,
92
+ CONFIRM_REGENERATE_SSH_KEY : "regeneratingSSHKey" ,
93
+ } ,
94
+ } ,
95
+ regeneratingSSHKey : {
96
+ entry : "clearRegenerateSSHKeyError" ,
97
+ invoke : {
98
+ src : "regenerateSSHKey" ,
99
+ onDone : [
100
+ {
101
+ actions : [ "assignSSHKey" , "notifySuccessSSHKeyRegenerated" ] ,
102
+ target : "#authState.signedIn.ssh.loaded.idle" ,
103
+ } ,
104
+ ] ,
105
+ onError : [
106
+ {
107
+ actions : [ "assignRegenerateSSHKeyError" , "notifySSHKeyRegenerationError" ] ,
108
+ target : "#authState.signedIn.ssh.loaded.idle" ,
109
+ } ,
110
+ ] ,
111
+ } ,
112
+ } ,
113
+ } ,
114
+ } ,
115
+ } ,
116
+ }
40
117
41
118
export const authMachine =
42
119
/** @xstate -layout N4IgpgJg5mDOIC5QEMCuAXAFgZXc9YAdLAJZQB2kA8hgMTYCSA4gHID6DLioADgPal0JPuW4gAHogDsABgCshOQA4AzABY5ARgBMUgJxrtcgDQgAnok0zNSwkpkrNKvQDY3aqS6kBfb6bRYuPhEpBQk5FAM5LQQIkThAG58ANYhZORRYvyCwqJIEohyMlKE2mrFKo7aLq5SJuaILtq2mjZqrboy2s4+fiABOHgExOnhkdFgAE6TfJOEPAA2+ABmswC2IxSZ+dkkQiJikgiyCsrqWroGRqYWCHoq2oQyDpouXa1qGmq+-hiDwYQYOghBEAKqwKYxOKERIpIhAgCyYCyAj2uUOiF0mieTik3UqMhqSleN0QhgUOhUbzUKhk9jKch+-T+QWGQJBUHBkKmMzmixW60BYHQSJROQO+SOUmxVKUniUcjkUgVLjlpOOCqecj0LyKmmVeiUTIGrPhwo5SKwfAgsChlBh5CSqSFIuFmGt8B2qP2eVARxUeNKCo02k0cllTRc6qUalsCtU731DikvV+gSGZuBY0t7pttB5s3mS3Qq0mG0Rbo9YrREr9iHUMkIUnKHSklQVKnqtz0BkImjUbmeShcVmejL6Jozm0oECi8xmyxIC3iEGXtFBAAUACIAQQAKgBRNgbgBKVAAYgwADIH6s+jEIOV6Qgj1oxnTBkfq7qNlxyT4aC4saaPcVLGiyU6hDOc48AuS5EKgPAQPgYwbnBa6xPasLOpOAJQZAMHoQhSEoREaF8Iuy4ILCADGKEiAA2jIAC6d7opKiBPi+rRtB+-5fg0CDqM+YafG8+jWLI2jgemeHpAR5DzhR8GEIhyEcuRlFgPm0yFvyJaCrhwz4bOimwcpy6qSRGlEdRjp8HRPpMaxXrir6BSPvo3Fvu0zT8Zo6oDmoTb-p8cjaFcsjqDJ-zGfJpn0Mw7BUKCe5sbWHm6CU2jWKGnhaFSeLqv2jZKMOehOE49i0v+MWmtOYw0OgdrxPZzpQU16XuUcAC0-aPGGSgVQOTS4ko2jfjGhC0gB1WeDIBguHVkGjBETU6byRYCmW06da5NbdZiKalLl+p-k4XgTYJNhxuVNKGCB77fEy5DWnAYhGWkFDUBgXUPoqLiKOoxIqGVejNKoxXPCUMgjZ8zj6sORoThBclhBE2y8N67F1o+xIvhoejavqEX-gFgl6IGFWOC2bzWNqy0AuyYxcpMf0cQghjqn+JT6GJeJynIqrI2msWZhalY2uzuN9dojwpn+epDvqHjRkUL7KBDEljiLzKyXF32mUpWkwquRCvQeuls-t94c606s8c0A5C00UjqqDja5cUXQRXiDiMwb0FmURpuWQW1tY25D7242jsxn+bi6IFhh2K4qjKP+fsqAHX1B8bKkkGb0seR0gNx87idu4JtIwzoxTdELzbheOov1SZhEWcR6moURxdHCOgPhsBoNDRDKju84hCfHS4ZAXPqg59OCn58ufeFODQPD2DY-FUqGsASmdShgvKP67nClrwgQu2EPIPb2V4+CVNf7w5TOphs22en2LDVrb9Ns4w8j1coU8iafDKJVWQagDDqmOsOKBVhXDgweNJb+ppL59TcH2ZQw1E5jSurcYK8CHCODfE0B4vRfBAA */
@@ -70,6 +147,12 @@ export const authMachine =
70
147
checkPermissions : {
71
148
data : TypesGen . UserAuthorizationResponse
72
149
}
150
+ getSSHKey : {
151
+ data : TypesGen . GitSSHKey
152
+ }
153
+ regenerateSSHKey : {
154
+ data : TypesGen . GitSSHKey
155
+ }
73
156
} ,
74
157
} ,
75
158
id : "authState" ,
@@ -197,6 +280,7 @@ export const authMachine =
197
280
} ,
198
281
} ,
199
282
} ,
283
+ ssh : sshState ,
200
284
} ,
201
285
on : {
202
286
SIGN_OUT : {
@@ -249,6 +333,9 @@ export const authMachine =
249
333
checks : permissionsToCheck ,
250
334
} )
251
335
} ,
336
+ // SSH
337
+ getSSHKey : ( ) => API . getUserSSHKey ( ) ,
338
+ regenerateSSHKey : ( ) => API . regenerateUserSSHKey ( ) ,
252
339
} ,
253
340
actions : {
254
341
assignMe : assign ( {
@@ -302,6 +389,28 @@ export const authMachine =
302
389
clearGetPermissionsError : assign ( {
303
390
checkPermissionsError : ( _ ) => undefined ,
304
391
} ) ,
392
+ // SSH
393
+ assignSSHKey : assign ( {
394
+ sshKey : ( _ , event ) => event . data ,
395
+ } ) ,
396
+ assignGetSSHKeyError : assign ( {
397
+ getSSHKeyError : ( _ , event ) => event . data ,
398
+ } ) ,
399
+ clearGetSSHKeyError : assign ( {
400
+ getSSHKeyError : ( _ ) => undefined ,
401
+ } ) ,
402
+ assignRegenerateSSHKeyError : assign ( {
403
+ regenerateSSHKeyError : ( _ , event ) => event . data ,
404
+ } ) ,
405
+ clearRegenerateSSHKeyError : assign ( {
406
+ regenerateSSHKeyError : ( _ ) => undefined ,
407
+ } ) ,
408
+ notifySuccessSSHKeyRegenerated : ( ) => {
409
+ displaySuccess ( Language . successRegenerateSSHKey )
410
+ } ,
411
+ notifySSHKeyRegenerationError : ( ) => {
412
+ displayError ( Language . errorRegenerateSSHKey )
413
+ } ,
305
414
} ,
306
415
} ,
307
416
)
0 commit comments