|
|
@@ -154,6 +154,18 @@ func (os *OauthService) GithubProvider() *oidc.Provider {
|
|
154
|
154
|
}).NewProvider(context.Background())
|
|
155
|
155
|
}
|
|
156
|
156
|
|
|
|
157
|
+func (os *OauthService) LinuxdoProvider() *oidc.Provider {
|
|
|
158
|
+ return (&oidc.ProviderConfig{
|
|
|
159
|
+ IssuerURL: "",
|
|
|
160
|
+ AuthURL: "https://connect.linux.do/oauth2/authorize",
|
|
|
161
|
+ TokenURL: "https://connect.linux.do/oauth2/token",
|
|
|
162
|
+ DeviceAuthURL: "",
|
|
|
163
|
+ UserInfoURL: model.UserEndpointLinuxdo,
|
|
|
164
|
+ JWKSURL: "",
|
|
|
165
|
+ Algorithms: nil,
|
|
|
166
|
+ }).NewProvider(context.Background())
|
|
|
167
|
+}
|
|
|
168
|
+
|
|
157
|
169
|
// GetOauthConfig retrieves the OAuth2 configuration based on the provider name
|
|
158
|
170
|
func (os *OauthService) GetOauthConfig(op string) (err error, oauthInfo *model.Oauth, oauthConfig *oauth2.Config, provider *oidc.Provider) {
|
|
159
|
171
|
//err, oauthInfo, oauthConfig = os.getOauthConfigGeneral(op)
|
|
|
@@ -182,6 +194,10 @@ func (os *OauthService) GetOauthConfig(op string) (err error, oauthInfo *model.O
|
|
182
|
194
|
oauthConfig.Endpoint = github.Endpoint
|
|
183
|
195
|
oauthConfig.Scopes = []string{"read:user", "user:email"}
|
|
184
|
196
|
provider = os.GithubProvider()
|
|
|
197
|
+ case model.OauthTypeLinuxdo:
|
|
|
198
|
+ provider = os.LinuxdoProvider()
|
|
|
199
|
+ oauthConfig.Endpoint = provider.Endpoint()
|
|
|
200
|
+ oauthConfig.Scopes = []string{"profile"}
|
|
185
|
201
|
//case model.OauthTypeGoogle: //google单独出来,可以少一次FetchOidcEndpoint请求
|
|
186
|
202
|
// oauthConfig.Endpoint = google.Endpoint
|
|
187
|
203
|
// oauthConfig.Scopes = os.constructScopes(oauthInfo.Scopes)
|
|
|
@@ -299,6 +315,16 @@ func (os *OauthService) githubCallback(oauthConfig *oauth2.Config, provider *oid
|
|
299
|
315
|
return nil, user.ToOauthUser()
|
|
300
|
316
|
}
|
|
301
|
317
|
|
|
|
318
|
+// linuxdoCallback linux.do回调
|
|
|
319
|
+func (os *OauthService) linuxdoCallback(oauthConfig *oauth2.Config, provider *oidc.Provider, code, verifier, nonce string) (error, *model.OauthUser) {
|
|
|
320
|
+ var user = &model.LinuxdoUser{}
|
|
|
321
|
+ err, _ := os.callbackBase(oauthConfig, provider, code, verifier, nonce, user)
|
|
|
322
|
+ if err != nil {
|
|
|
323
|
+ return err, nil
|
|
|
324
|
+ }
|
|
|
325
|
+ return nil, user.ToOauthUser()
|
|
|
326
|
+}
|
|
|
327
|
+
|
|
302
|
328
|
// oidcCallback oidc回调, 通过code获取用户信息
|
|
303
|
329
|
func (os *OauthService) oidcCallback(oauthConfig *oauth2.Config, provider *oidc.Provider, code, verifier, nonce string) (error, *model.OauthUser) {
|
|
304
|
330
|
var user = &model.OidcUser{}
|
|
|
@@ -319,6 +345,8 @@ func (os *OauthService) Callback(code, verifier, op, nonce string) (err error, o
|
|
319
|
345
|
switch oauthType {
|
|
320
|
346
|
case model.OauthTypeGithub:
|
|
321
|
347
|
err, oauthUser = os.githubCallback(oauthConfig, provider, code, verifier, nonce)
|
|
|
348
|
+ case model.OauthTypeLinuxdo:
|
|
|
349
|
+ err, oauthUser = os.linuxdoCallback(oauthConfig, provider, code, verifier, nonce)
|
|
322
|
350
|
case model.OauthTypeOidc, model.OauthTypeGoogle:
|
|
323
|
351
|
err, oauthUser = os.oidcCallback(oauthConfig, provider, code, verifier, nonce)
|
|
324
|
352
|
default:
|