@@ -112,45 +112,61 @@ export class AuthProviderService {
112
112
return result ;
113
113
}
114
114
115
- async updateAuthProvider (
116
- userId : string ,
117
- entry : AuthProviderEntry . UpdateEntry | AuthProviderEntry . NewEntry ,
118
- ) : Promise < AuthProviderEntry > {
115
+ async createAuthProviderOfUser ( userId : string , entry : AuthProviderEntry . NewEntry ) : Promise < AuthProviderEntry > {
119
116
await this . auth . checkPermissionOnUser ( userId , "write_info" , userId ) ;
120
117
121
- let authProvider : AuthProviderEntry ;
122
- if ( "id" in entry ) {
123
- const { id, ownerId } = entry ;
124
- const existing = ( await this . authProviderDB . findByUserId ( ownerId ) ) . find ( ( p ) => p . id === id ) ;
125
- if ( ! existing ) {
126
- throw new Error ( "Provider does not exist." ) ;
127
- }
128
- const changed =
129
- entry . clientId !== existing . oauth . clientId ||
130
- ( entry . clientSecret && entry . clientSecret !== existing . oauth . clientSecret ) ;
118
+ const host = entry . host && entry . host . toLowerCase ( ) ;
131
119
132
- if ( ! changed ) {
133
- return existing ;
134
- }
120
+ // reachability test
121
+ if ( ! ( await this . isHostReachable ( host ) ) ) {
122
+ log . info ( `Host could not be reached.` , { entry } ) ;
123
+ throw new ApplicationError ( ErrorCodes . BAD_REQUEST , `Host could not be reached.` ) ;
124
+ }
135
125
136
- // update config on demand
137
- const oauth = {
138
- ...existing . oauth ,
139
- clientId : entry . clientId ,
140
- clientSecret : entry . clientSecret || existing . oauth . clientSecret , // FE may send empty ("") if not changed
141
- } ;
142
- authProvider = {
143
- ...existing ,
144
- oauth,
145
- status : "pending" ,
146
- } ;
147
- } else {
148
- const existing = await this . authProviderDB . findByHost ( entry . host ) ;
149
- if ( existing ) {
150
- throw new Error ( "Provider for this host already exists." ) ;
151
- }
152
- authProvider = this . initializeNewProvider ( entry ) ;
126
+ // checking for already existing runtime providers
127
+ const hostContext = this . hostContexts . get ( host ) ;
128
+ if ( hostContext ) {
129
+ const builtInExists = hostContext . authProvider . params . ownerId === undefined ;
130
+ log . info ( `Attempt to override an existing provider.` , { entry, builtInExists } ) ;
131
+ throw new ApplicationError ( ErrorCodes . CONFLICT , `Attempt to override an existing provider.` ) ;
132
+ }
133
+
134
+ const existing = await this . authProviderDB . findByHost ( entry . host ) ;
135
+ if ( existing ) {
136
+ log . info ( `Attempt to override an existing provider.` , { entry } ) ;
137
+ throw new ApplicationError ( ErrorCodes . CONFLICT , `Provider for this host already exists.` ) ;
153
138
}
139
+ const authProvider = this . initializeNewProvider ( entry ) ;
140
+ return await this . authProviderDB . storeAuthProvider ( authProvider as AuthProviderEntry , true ) ;
141
+ }
142
+
143
+ async updateAuthProviderOfUser ( userId : string , entry : AuthProviderEntry . UpdateEntry ) : Promise < AuthProviderEntry > {
144
+ await this . auth . checkPermissionOnUser ( userId , "write_info" , userId ) ;
145
+
146
+ const { id, ownerId } = entry ;
147
+ const existing = ( await this . authProviderDB . findByUserId ( ownerId ) ) . find ( ( p ) => p . id === id ) ;
148
+ if ( ! existing ) {
149
+ throw new Error ( "Provider does not exist." ) ;
150
+ }
151
+ const changed =
152
+ entry . clientId !== existing . oauth . clientId ||
153
+ ( entry . clientSecret && entry . clientSecret !== existing . oauth . clientSecret ) ;
154
+
155
+ if ( ! changed ) {
156
+ return existing ;
157
+ }
158
+
159
+ // update config on demand
160
+ const oauth = {
161
+ ...existing . oauth ,
162
+ clientId : entry . clientId ,
163
+ clientSecret : entry . clientSecret || existing . oauth . clientSecret , // FE may send empty ("") if not changed
164
+ } ;
165
+ const authProvider = {
166
+ ...existing ,
167
+ oauth,
168
+ status : "pending" ,
169
+ } ;
154
170
return await this . authProviderDB . storeAuthProvider ( authProvider as AuthProviderEntry , true ) ;
155
171
}
156
172
0 commit comments