@@ -25,6 +25,15 @@ import {
25
25
AuthProviderType ,
26
26
OAuth2Config ,
27
27
} from "@gitpod/public-api/lib/gitpod/v1/authprovider_pb" ;
28
+ import {
29
+ Identity ,
30
+ User ,
31
+ User_EmailNotificationSettings ,
32
+ User_RoleOrPermission ,
33
+ User_UserFeatureFlag ,
34
+ User_WorkspaceAutostartOption ,
35
+ User_WorkspaceTimeoutSettings ,
36
+ } from "@gitpod/public-api/lib/gitpod/v1/user_pb" ;
28
37
import {
29
38
BranchMatchingStrategy ,
30
39
Configuration ,
@@ -73,6 +82,8 @@ import {
73
82
UnauthorizedRepositoryAccessError ,
74
83
} from "./messaging/error" ;
75
84
import {
85
+ User as UserProtocol ,
86
+ Identity as IdentityProtocol ,
76
87
AuthProviderEntry as AuthProviderProtocol ,
77
88
AuthProviderInfo ,
78
89
CommitContext ,
@@ -89,6 +100,9 @@ import {
89
100
Token ,
90
101
SuggestedRepository as SuggestedRepositoryProtocol ,
91
102
UserSSHPublicKeyValue ,
103
+ NamedWorkspaceFeatureFlag ,
104
+ WorkspaceAutostartOption ,
105
+ IDESettings ,
92
106
} from "./protocol" ;
93
107
import {
94
108
OrgMemberInfo ,
@@ -109,6 +123,7 @@ import {
109
123
} from "./workspace-instance" ;
110
124
import { Author , Commit } from "@gitpod/public-api/lib/gitpod/v1/scm_pb" ;
111
125
import type { DeepPartial } from "./util/deep-partial" ;
126
+ import { RoleOrPermission } from "./permission" ;
112
127
113
128
export type PartialConfiguration = DeepPartial < Configuration > & Pick < Configuration , "id" > ;
114
129
@@ -910,4 +925,138 @@ export class PublicAPIConverter {
910
925
result . lastUsedTime = Timestamp . fromDate ( new Date ( sshKey . lastUsedTime || sshKey . creationTime ) ) ;
911
926
return result ;
912
927
}
928
+
929
+ toUser ( from : UserProtocol ) : User {
930
+ const {
931
+ id,
932
+ name,
933
+ creationDate,
934
+ identities,
935
+ additionalData,
936
+ avatarUrl,
937
+ featureFlags,
938
+ organizationId,
939
+ rolesOrPermissions,
940
+ usageAttributionId,
941
+ blocked,
942
+ lastVerificationTime,
943
+ verificationPhoneNumber,
944
+ } = from ;
945
+ const {
946
+ disabledClosedTimeout,
947
+ dotfileRepo,
948
+ emailNotificationSettings,
949
+ ideSettings,
950
+ profile,
951
+ workspaceAutostartOptions,
952
+ workspaceClasses,
953
+ workspaceTimeout,
954
+ } = additionalData || { } ;
955
+
956
+ return new User ( {
957
+ id,
958
+ name,
959
+ createdAt : this . toTimestamp ( creationDate ) ,
960
+ avatarUrl,
961
+ organizationId,
962
+ usageAttributionId,
963
+ blocked,
964
+ identities : identities ?. map ( ( i ) => this . toIdentity ( i ) ) ,
965
+ rolesOrPermissions : rolesOrPermissions ?. map ( ( rp ) => this . toRoleOrPermission ( rp ) ) ,
966
+ workspaceFeatureFlags : featureFlags ?. permanentWSFeatureFlags ?. map ( ( ff ) => this . toUserFeatureFlags ( ff ) ) ,
967
+ timeoutSettings : new User_WorkspaceTimeoutSettings ( {
968
+ disabledClosedTimeout,
969
+ workspaceTimeout,
970
+ } ) ,
971
+ dotfileRepo,
972
+ emailNotificationSettings : new User_EmailNotificationSettings ( {
973
+ allowsChangelogMail : emailNotificationSettings ?. allowsChangelogMail ,
974
+ allowsDevxMail : emailNotificationSettings ?. allowsDevXMail ,
975
+ allowsOnboardingMail : emailNotificationSettings ?. allowsOnboardingMail ,
976
+ } ) ,
977
+ editorSettings : this . toEditorReference ( ideSettings ) ,
978
+ lastVerificationTime : this . toTimestamp ( lastVerificationTime ) ,
979
+ verificationPhoneNumber,
980
+ workspaceClass : workspaceClasses ?. regular ,
981
+ workspaceAutostartOptions : workspaceAutostartOptions ?. map ( ( o ) => this . toWorkspaceAutostartOption ( o ) ) ,
982
+ profile,
983
+ } ) ;
984
+ }
985
+
986
+ toTimestamp ( from ?: string | undefined ) : Timestamp | undefined {
987
+ return from ? Timestamp . fromDate ( new Date ( from ) ) : undefined ;
988
+ }
989
+
990
+ toIdentity ( from : IdentityProtocol ) : Identity {
991
+ const { authId, authName, authProviderId, lastSigninTime, primaryEmail } = from ;
992
+ return new Identity ( {
993
+ authProviderId,
994
+ authId,
995
+ authName,
996
+ lastSigninTime : this . toTimestamp ( lastSigninTime ) ,
997
+ primaryEmail,
998
+ } ) ;
999
+ }
1000
+
1001
+ toRoleOrPermission ( from : RoleOrPermission ) : User_RoleOrPermission {
1002
+ switch ( from ) {
1003
+ case "admin" :
1004
+ return User_RoleOrPermission . ADMIN ;
1005
+ case "devops" :
1006
+ return User_RoleOrPermission . DEVOPS ;
1007
+ case "viewer" :
1008
+ return User_RoleOrPermission . VIEWER ;
1009
+ case "developer" :
1010
+ return User_RoleOrPermission . DEVELOPER ;
1011
+ case "registry-access" :
1012
+ return User_RoleOrPermission . REGISTRY_ACCESS ;
1013
+ case "admin-permissions" :
1014
+ return User_RoleOrPermission . ADMIN_PERMISSIONS ;
1015
+ case "admin-users" :
1016
+ return User_RoleOrPermission . ADMIN_USERS ;
1017
+ case "admin-workspace-content" :
1018
+ return User_RoleOrPermission . ADMIN_WORKSPACE_CONTENT ;
1019
+ case "admin-workspaces" :
1020
+ return User_RoleOrPermission . ADMIN_WORKSPACE ;
1021
+ case "admin-projects" :
1022
+ return User_RoleOrPermission . ADMIN_PROJECTS ;
1023
+ case "new-workspace-cluster" :
1024
+ return User_RoleOrPermission . NEW_WORKSPACE_CLUSTER ;
1025
+ }
1026
+ return User_RoleOrPermission . UNSPECIFIED ;
1027
+ }
1028
+
1029
+ toUserFeatureFlags ( from : NamedWorkspaceFeatureFlag ) : User_UserFeatureFlag {
1030
+ switch ( from ) {
1031
+ case "full_workspace_backup" :
1032
+ return User_UserFeatureFlag . FULL_WORKSPACE_BACKUP ;
1033
+ case "workspace_class_limiting" :
1034
+ return User_UserFeatureFlag . WORKSPACE_CLASS_LIMITING ;
1035
+ case "workspace_connection_limiting" :
1036
+ return User_UserFeatureFlag . WORKSPACE_CONNECTION_LIMITING ;
1037
+ case "workspace_psi" :
1038
+ return User_UserFeatureFlag . WORKSPACE_PSI ;
1039
+ }
1040
+ return User_UserFeatureFlag . UNSPECIFIED ;
1041
+ }
1042
+
1043
+ toEditorReference ( from ?: IDESettings ) : EditorReference | undefined {
1044
+ if ( ! from ) {
1045
+ return undefined ;
1046
+ }
1047
+ return new EditorReference ( {
1048
+ name : from . defaultIde ,
1049
+ version : from . useLatestVersion ? "latest" : "stable" ,
1050
+ } ) ;
1051
+ }
1052
+
1053
+ toWorkspaceAutostartOption ( from : WorkspaceAutostartOption ) : User_WorkspaceAutostartOption {
1054
+ return new User_WorkspaceAutostartOption ( {
1055
+ cloneUrl : from . cloneURL ,
1056
+ editorSettings : this . toEditorReference ( from . ideSettings ) ,
1057
+ organizationId : from . organizationId ,
1058
+ region : from . region ,
1059
+ workspaceClass : from . workspaceClass ,
1060
+ } ) ;
1061
+ }
913
1062
}
0 commit comments