@@ -23,21 +23,24 @@ 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
45
const ownerId = request . owner . case === "ownerId" ? request . owner . value : "" ;
43
46
const organizationId = request . owner . case === "organizationId" ? request . owner . value : "" ;
@@ -47,20 +50,20 @@ export class AuthProviderServiceAPI implements ServiceImpl<typeof AuthProviderSe
47
50
}
48
51
49
52
if ( organizationId ) {
50
- const result = await this . authProviderService . createOrgAuthProvider ( context . user . id , {
53
+ const result = await this . authProviderService . createOrgAuthProvider ( ctxUserId ( ) , {
51
54
organizationId,
52
55
host : request . host ,
53
- ownerId : context . user . id ,
56
+ ownerId : ctxUserId ( ) ,
54
57
type : this . apiConverter . fromAuthProviderType ( request . type ) ,
55
58
clientId : request . oauth2Config ?. clientId ,
56
59
clientSecret : request . oauth2Config ?. clientSecret ,
57
60
} ) ;
58
61
59
62
return new CreateAuthProviderResponse ( { authProvider : this . apiConverter . toAuthProvider ( result ) } ) ;
60
63
} else {
61
- const result = await this . authProviderService . createAuthProviderOfUser ( context . user . id , {
64
+ const result = await this . authProviderService . createAuthProviderOfUser ( ctxUserId ( ) , {
62
65
host : request . host ,
63
- ownerId : context . user . id ,
66
+ ownerId : ctxUserId ( ) ,
64
67
type : this . apiConverter . fromAuthProviderType ( request . type ) ,
65
68
clientId : request . oauth2Config ?. clientId ,
66
69
clientSecret : request . oauth2Config ?. clientSecret ,
@@ -69,12 +72,12 @@ export class AuthProviderServiceAPI implements ServiceImpl<typeof AuthProviderSe
69
72
return new CreateAuthProviderResponse ( { authProvider : this . apiConverter . toAuthProvider ( result ) } ) ;
70
73
}
71
74
}
72
- async getAuthProvider ( request : GetAuthProviderRequest , context : HandlerContext ) : Promise < GetAuthProviderResponse > {
75
+ async getAuthProvider ( request : GetAuthProviderRequest , _ : HandlerContext ) : Promise < GetAuthProviderResponse > {
73
76
if ( ! request . authProviderId ) {
74
77
throw new ConnectError ( "authProviderId is required" , Code . InvalidArgument ) ;
75
78
}
76
79
77
- const authProvider = await this . authProviderService . getAuthProvider ( context . user . id , request . authProviderId ) ;
80
+ const authProvider = await this . authProviderService . getAuthProvider ( ctxUserId ( ) , request . authProviderId ) ;
78
81
if ( ! authProvider ) {
79
82
throw new ConnectError ( "Provider not found." , Code . NotFound ) ;
80
83
}
@@ -86,7 +89,7 @@ export class AuthProviderServiceAPI implements ServiceImpl<typeof AuthProviderSe
86
89
87
90
async listAuthProviders (
88
91
request : ListAuthProvidersRequest ,
89
- context : HandlerContext ,
92
+ _ : HandlerContext ,
90
93
) : Promise < ListAuthProvidersResponse > {
91
94
const target = request . id ;
92
95
const ownerId = target . case === "userId" ? target . value : "" ;
@@ -97,8 +100,8 @@ export class AuthProviderServiceAPI implements ServiceImpl<typeof AuthProviderSe
97
100
}
98
101
99
102
const authProviders = organizationId
100
- ? await this . authProviderService . getAuthProvidersOfOrg ( context . user . id , organizationId )
101
- : await this . authProviderService . getAuthProvidersOfUser ( context . user . id ) ;
103
+ ? await this . authProviderService . getAuthProvidersOfOrg ( ctxUserId ( ) , organizationId )
104
+ : await this . authProviderService . getAuthProvidersOfUser ( ctxUserId ( ) ) ;
102
105
103
106
const selectedProviders = selectPage ( authProviders , request . pagination ) ;
104
107
const redacted = selectedProviders . map ( AuthProviderEntry . redact . bind ( AuthProviderEntry ) ) ;
@@ -118,9 +121,13 @@ export class AuthProviderServiceAPI implements ServiceImpl<typeof AuthProviderSe
118
121
@Unauthenticated ( )
119
122
async listAuthProviderDescriptions (
120
123
request : ListAuthProviderDescriptionsRequest ,
121
- context : HandlerContext ,
124
+ _ : HandlerContext ,
122
125
) : Promise < ListAuthProviderDescriptionsResponse > {
123
- const user = context . user ;
126
+ const userId = ctxUserId ( ) ;
127
+ let user : User | undefined = undefined ;
128
+ if ( userId ) {
129
+ user = await this . userService . findUserById ( userId , userId ) ;
130
+ }
124
131
const aps = user
125
132
? await this . authProviderService . getAuthProviderDescriptions ( user )
126
133
: await this . authProviderService . getAuthProviderDescriptionsUnauthenticated ( ) ;
@@ -135,7 +142,7 @@ export class AuthProviderServiceAPI implements ServiceImpl<typeof AuthProviderSe
135
142
136
143
async updateAuthProvider (
137
144
request : UpdateAuthProviderRequest ,
138
- context : HandlerContext ,
145
+ _ : HandlerContext ,
139
146
) : Promise < UpdateAuthProviderResponse > {
140
147
if ( ! request . authProviderId ) {
141
148
throw new ConnectError ( "authProviderId is required" , Code . InvalidArgument ) ;
@@ -146,23 +153,23 @@ export class AuthProviderServiceAPI implements ServiceImpl<typeof AuthProviderSe
146
153
throw new ConnectError ( "clientId or clientSecret are required" , Code . InvalidArgument ) ;
147
154
}
148
155
149
- const authProvider = await this . authProviderService . getAuthProvider ( context . user . id , request . authProviderId ) ;
156
+ const authProvider = await this . authProviderService . getAuthProvider ( ctxUserId ( ) , request . authProviderId ) ;
150
157
if ( ! authProvider ) {
151
158
throw new ConnectError ( "Provider not found." , Code . NotFound ) ;
152
159
}
153
160
154
161
let entry : AuthProviderEntry ;
155
162
if ( authProvider . organizationId ) {
156
- entry = await this . authProviderService . updateOrgAuthProvider ( context . user . id , {
163
+ entry = await this . authProviderService . updateOrgAuthProvider ( ctxUserId ( ) , {
157
164
id : request . authProviderId ,
158
165
organizationId : authProvider . organizationId ,
159
166
clientId : clientId ,
160
167
clientSecret : clientSecret ,
161
168
} ) ;
162
169
} else {
163
- entry = await this . authProviderService . updateAuthProviderOfUser ( context . user . id , {
170
+ entry = await this . authProviderService . updateAuthProviderOfUser ( ctxUserId ( ) , {
164
171
id : request . authProviderId ,
165
- ownerId : context . user . id ,
172
+ ownerId : ctxUserId ( ) ,
166
173
clientId : clientId ,
167
174
clientSecret : clientSecret ,
168
175
} ) ;
@@ -175,25 +182,25 @@ export class AuthProviderServiceAPI implements ServiceImpl<typeof AuthProviderSe
175
182
176
183
async deleteAuthProvider (
177
184
request : DeleteAuthProviderRequest ,
178
- context : HandlerContext ,
185
+ _ : HandlerContext ,
179
186
) : Promise < DeleteAuthProviderResponse > {
180
187
if ( ! request . authProviderId ) {
181
188
throw new ConnectError ( "authProviderId is required" , Code . InvalidArgument ) ;
182
189
}
183
190
184
- const authProvider = await this . authProviderService . getAuthProvider ( context . user . id , request . authProviderId ) ;
191
+ const authProvider = await this . authProviderService . getAuthProvider ( ctxUserId ( ) , request . authProviderId ) ;
185
192
if ( ! authProvider ) {
186
193
throw new ConnectError ( "Provider not found." , Code . NotFound ) ;
187
194
}
188
195
189
196
if ( authProvider . organizationId ) {
190
197
await this . authProviderService . deleteAuthProviderOfOrg (
191
- context . user . id ,
198
+ ctxUserId ( ) ,
192
199
authProvider . organizationId ,
193
200
request . authProviderId ,
194
201
) ;
195
202
} else {
196
- await this . authProviderService . deleteAuthProviderOfUser ( context . user . id , request . authProviderId ) ;
203
+ await this . authProviderService . deleteAuthProviderOfUser ( ctxUserId ( ) , request . authProviderId ) ;
197
204
}
198
205
199
206
return new DeleteAuthProviderResponse ( ) ;
0 commit comments