@@ -23,44 +23,46 @@ import {
23
23
DeleteAuthProviderResponse ,
24
24
} from "@gitpod/public-api/lib/gitpod/v1/authprovider_pb" ;
25
25
import { AuthProviderService } from "../auth/auth-provider-service" ;
26
- import { AuthProviderEntry , AuthProviderInfo } from "@gitpod/gitpod-protocol" ;
26
+ import { AuthProviderEntry , AuthProviderInfo , User } from "@gitpod/gitpod-protocol" ;
27
27
import { Unauthenticated } from "./unauthenticated" ;
28
28
import { validate as uuidValidate } from "uuid" ;
29
29
import { selectPage } from "./pagination" ;
30
+ import { ctxUserId } from "../util/request-context" ;
31
+ import { UserService } from "../user/user-service" ;
30
32
31
33
@injectable ( )
32
34
export class AuthProviderServiceAPI implements ServiceImpl < typeof AuthProviderServiceInterface > {
33
35
constructor (
34
36
@inject ( PublicAPIConverter ) private readonly apiConverter : PublicAPIConverter ,
35
37
@inject ( AuthProviderService ) private readonly authProviderService : AuthProviderService ,
38
+ @inject ( UserService ) private readonly userService : UserService ,
36
39
) { }
37
40
38
41
async createAuthProvider (
39
42
request : CreateAuthProviderRequest ,
40
- context : HandlerContext ,
43
+ _ : HandlerContext ,
41
44
) : Promise < CreateAuthProviderResponse > {
42
- const ownerId = request . owner . case === "ownerId" ? request . owner . value : "" ;
43
45
const organizationId = request . owner . case === "organizationId" ? request . owner . value : "" ;
44
46
45
- if ( ! uuidValidate ( organizationId ) && ! uuidValidate ( ownerId ) ) {
46
- throw new ConnectError ( "organizationId or ownerId is required" , Code . InvalidArgument ) ;
47
- }
48
-
49
47
if ( organizationId ) {
50
- const result = await this . authProviderService . createOrgAuthProvider ( context . user . id , {
48
+ if ( ! uuidValidate ( organizationId ) ) {
49
+ throw new ConnectError ( "organizationId is required" , Code . InvalidArgument ) ;
50
+ }
51
+
52
+ const result = await this . authProviderService . createOrgAuthProvider ( ctxUserId ( ) , {
51
53
organizationId,
52
54
host : request . host ,
53
- ownerId : context . user . id ,
55
+ ownerId : ctxUserId ( ) ,
54
56
type : this . apiConverter . fromAuthProviderType ( request . type ) ,
55
57
clientId : request . oauth2Config ?. clientId ,
56
58
clientSecret : request . oauth2Config ?. clientSecret ,
57
59
} ) ;
58
60
59
61
return new CreateAuthProviderResponse ( { authProvider : this . apiConverter . toAuthProvider ( result ) } ) ;
60
62
} else {
61
- const result = await this . authProviderService . createAuthProviderOfUser ( context . user . id , {
63
+ const result = await this . authProviderService . createAuthProviderOfUser ( ctxUserId ( ) , {
62
64
host : request . host ,
63
- ownerId : context . user . id ,
65
+ ownerId : ctxUserId ( ) ,
64
66
type : this . apiConverter . fromAuthProviderType ( request . type ) ,
65
67
clientId : request . oauth2Config ?. clientId ,
66
68
clientSecret : request . oauth2Config ?. clientSecret ,
@@ -69,12 +71,12 @@ export class AuthProviderServiceAPI implements ServiceImpl<typeof AuthProviderSe
69
71
return new CreateAuthProviderResponse ( { authProvider : this . apiConverter . toAuthProvider ( result ) } ) ;
70
72
}
71
73
}
72
- async getAuthProvider ( request : GetAuthProviderRequest , context : HandlerContext ) : Promise < GetAuthProviderResponse > {
74
+ async getAuthProvider ( request : GetAuthProviderRequest , _ : HandlerContext ) : Promise < GetAuthProviderResponse > {
73
75
if ( ! request . authProviderId ) {
74
76
throw new ConnectError ( "authProviderId is required" , Code . InvalidArgument ) ;
75
77
}
76
78
77
- const authProvider = await this . authProviderService . getAuthProvider ( context . user . id , request . authProviderId ) ;
79
+ const authProvider = await this . authProviderService . getAuthProvider ( ctxUserId ( ) , request . authProviderId ) ;
78
80
if ( ! authProvider ) {
79
81
throw new ConnectError ( "Provider not found." , Code . NotFound ) ;
80
82
}
@@ -84,10 +86,7 @@ export class AuthProviderServiceAPI implements ServiceImpl<typeof AuthProviderSe
84
86
} ) ;
85
87
}
86
88
87
- async listAuthProviders (
88
- request : ListAuthProvidersRequest ,
89
- context : HandlerContext ,
90
- ) : Promise < ListAuthProvidersResponse > {
89
+ async listAuthProviders ( request : ListAuthProvidersRequest , _ : HandlerContext ) : Promise < ListAuthProvidersResponse > {
91
90
const target = request . id ;
92
91
const ownerId = target . case === "userId" ? target . value : "" ;
93
92
const organizationId = target . case === "organizationId" ? target . value : "" ;
@@ -97,8 +96,8 @@ export class AuthProviderServiceAPI implements ServiceImpl<typeof AuthProviderSe
97
96
}
98
97
99
98
const authProviders = organizationId
100
- ? await this . authProviderService . getAuthProvidersOfOrg ( context . user . id , organizationId )
101
- : await this . authProviderService . getAuthProvidersOfUser ( context . user . id ) ;
99
+ ? await this . authProviderService . getAuthProvidersOfOrg ( ctxUserId ( ) , organizationId )
100
+ : await this . authProviderService . getAuthProvidersOfUser ( ctxUserId ( ) ) ;
102
101
103
102
const selectedProviders = selectPage ( authProviders , request . pagination ) ;
104
103
const redacted = selectedProviders . map ( AuthProviderEntry . redact . bind ( AuthProviderEntry ) ) ;
@@ -118,9 +117,13 @@ export class AuthProviderServiceAPI implements ServiceImpl<typeof AuthProviderSe
118
117
@Unauthenticated ( )
119
118
async listAuthProviderDescriptions (
120
119
request : ListAuthProviderDescriptionsRequest ,
121
- context : HandlerContext ,
120
+ _ : HandlerContext ,
122
121
) : Promise < ListAuthProviderDescriptionsResponse > {
123
- const user = context . user ;
122
+ const userId = ctxUserId ( ) ;
123
+ let user : User | undefined = undefined ;
124
+ if ( userId ) {
125
+ user = await this . userService . findUserById ( userId , userId ) ;
126
+ }
124
127
const aps = user
125
128
? await this . authProviderService . getAuthProviderDescriptions ( user )
126
129
: await this . authProviderService . getAuthProviderDescriptionsUnauthenticated ( ) ;
@@ -135,7 +138,7 @@ export class AuthProviderServiceAPI implements ServiceImpl<typeof AuthProviderSe
135
138
136
139
async updateAuthProvider (
137
140
request : UpdateAuthProviderRequest ,
138
- context : HandlerContext ,
141
+ _ : HandlerContext ,
139
142
) : Promise < UpdateAuthProviderResponse > {
140
143
if ( ! request . authProviderId ) {
141
144
throw new ConnectError ( "authProviderId is required" , Code . InvalidArgument ) ;
@@ -146,23 +149,23 @@ export class AuthProviderServiceAPI implements ServiceImpl<typeof AuthProviderSe
146
149
throw new ConnectError ( "clientId or clientSecret are required" , Code . InvalidArgument ) ;
147
150
}
148
151
149
- const authProvider = await this . authProviderService . getAuthProvider ( context . user . id , request . authProviderId ) ;
152
+ const authProvider = await this . authProviderService . getAuthProvider ( ctxUserId ( ) , request . authProviderId ) ;
150
153
if ( ! authProvider ) {
151
154
throw new ConnectError ( "Provider not found." , Code . NotFound ) ;
152
155
}
153
156
154
157
let entry : AuthProviderEntry ;
155
158
if ( authProvider . organizationId ) {
156
- entry = await this . authProviderService . updateOrgAuthProvider ( context . user . id , {
159
+ entry = await this . authProviderService . updateOrgAuthProvider ( ctxUserId ( ) , {
157
160
id : request . authProviderId ,
158
161
organizationId : authProvider . organizationId ,
159
162
clientId : clientId ,
160
163
clientSecret : clientSecret ,
161
164
} ) ;
162
165
} else {
163
- entry = await this . authProviderService . updateAuthProviderOfUser ( context . user . id , {
166
+ entry = await this . authProviderService . updateAuthProviderOfUser ( ctxUserId ( ) , {
164
167
id : request . authProviderId ,
165
- ownerId : context . user . id ,
168
+ ownerId : ctxUserId ( ) ,
166
169
clientId : clientId ,
167
170
clientSecret : clientSecret ,
168
171
} ) ;
@@ -175,25 +178,25 @@ export class AuthProviderServiceAPI implements ServiceImpl<typeof AuthProviderSe
175
178
176
179
async deleteAuthProvider (
177
180
request : DeleteAuthProviderRequest ,
178
- context : HandlerContext ,
181
+ _ : HandlerContext ,
179
182
) : Promise < DeleteAuthProviderResponse > {
180
183
if ( ! request . authProviderId ) {
181
184
throw new ConnectError ( "authProviderId is required" , Code . InvalidArgument ) ;
182
185
}
183
186
184
- const authProvider = await this . authProviderService . getAuthProvider ( context . user . id , request . authProviderId ) ;
187
+ const authProvider = await this . authProviderService . getAuthProvider ( ctxUserId ( ) , request . authProviderId ) ;
185
188
if ( ! authProvider ) {
186
189
throw new ConnectError ( "Provider not found." , Code . NotFound ) ;
187
190
}
188
191
189
192
if ( authProvider . organizationId ) {
190
193
await this . authProviderService . deleteAuthProviderOfOrg (
191
- context . user . id ,
194
+ ctxUserId ( ) ,
192
195
authProvider . organizationId ,
193
196
request . authProviderId ,
194
197
) ;
195
198
} else {
196
- await this . authProviderService . deleteAuthProviderOfUser ( context . user . id , request . authProviderId ) ;
199
+ await this . authProviderService . deleteAuthProviderOfUser ( ctxUserId ( ) , request . authProviderId ) ;
197
200
}
198
201
199
202
return new DeleteAuthProviderResponse ( ) ;
0 commit comments