|
|
@@ -6,7 +6,6 @@ import (
|
|
6
|
6
|
"errors"
|
|
7
|
7
|
|
|
8
|
8
|
"github.com/coreos/go-oidc/v3/oidc"
|
|
9
|
|
- "github.com/gin-gonic/gin"
|
|
10
|
9
|
"github.com/lejianwen/rustdesk-api/v2/model"
|
|
11
|
10
|
"github.com/lejianwen/rustdesk-api/v2/utils"
|
|
12
|
11
|
"golang.org/x/oauth2"
|
|
|
@@ -96,20 +95,16 @@ func (os *OauthService) DeleteOauthCache(key string) {
|
|
96
|
95
|
OauthCache.Delete(key)
|
|
97
|
96
|
}
|
|
98
|
97
|
|
|
99
|
|
-func (os *OauthService) BeginAuth(c *gin.Context, op string) (error error, state, verifier, nonce, url string) {
|
|
|
98
|
+func (os *OauthService) BeginAuth(op string) (error error, state, verifier, nonce, url string) {
|
|
100
|
99
|
state = utils.RandomString(10) + strconv.FormatInt(time.Now().Unix(), 10)
|
|
101
|
100
|
verifier = ""
|
|
102
|
101
|
nonce = ""
|
|
103
|
102
|
if op == model.OauthTypeWebauth {
|
|
104
|
|
- host := c.GetHeader("Origin")
|
|
105
|
|
- if host == "" {
|
|
106
|
|
- host = Config.Rustdesk.ApiServer
|
|
107
|
|
- }
|
|
108
|
|
- url = host + "/_admin/#/oauth/" + state
|
|
|
103
|
+ url = Config.Rustdesk.ApiServer + "/_admin/#/oauth/" + state
|
|
109
|
104
|
//url = "http://localhost:8888/_admin/#/oauth/" + code
|
|
110
|
105
|
return nil, state, verifier, nonce, url
|
|
111
|
106
|
}
|
|
112
|
|
- err, oauthInfo, oauthConfig, _ := os.GetOauthConfig(c, op)
|
|
|
107
|
+ err, oauthInfo, oauthConfig, _ := os.GetOauthConfig(op)
|
|
113
|
108
|
if err == nil {
|
|
114
|
109
|
extras := make([]oauth2.AuthCodeOption, 0, 3)
|
|
115
|
110
|
|
|
|
@@ -174,18 +169,16 @@ func (os *OauthService) LinuxdoProvider() *oidc.Provider {
|
|
174
|
169
|
}
|
|
175
|
170
|
|
|
176
|
171
|
// GetOauthConfig retrieves the OAuth2 configuration based on the provider name
|
|
177
|
|
-func (os *OauthService) GetOauthConfig(c *gin.Context, op string) (err error, oauthInfo *model.Oauth, oauthConfig *oauth2.Config, provider *oidc.Provider) {
|
|
|
172
|
+func (os *OauthService) GetOauthConfig(op string) (err error, oauthInfo *model.Oauth, oauthConfig *oauth2.Config, provider *oidc.Provider) {
|
|
178
|
173
|
//err, oauthInfo, oauthConfig = os.getOauthConfigGeneral(op)
|
|
179
|
174
|
oauthInfo = os.InfoByOp(op)
|
|
180
|
175
|
if oauthInfo.Id == 0 || oauthInfo.ClientId == "" || oauthInfo.ClientSecret == "" {
|
|
181
|
176
|
return errors.New("ConfigNotFound"), nil, nil, nil
|
|
182
|
177
|
}
|
|
183
|
|
- redirectUrl := os.buildRedirectURL(c)
|
|
184
|
|
- Logger.Debug("Redirect URL: ", redirectUrl)
|
|
185
|
178
|
oauthConfig = &oauth2.Config{
|
|
186
|
179
|
ClientID: oauthInfo.ClientId,
|
|
187
|
180
|
ClientSecret: oauthInfo.ClientSecret,
|
|
188
|
|
- RedirectURL: redirectUrl,
|
|
|
181
|
+ RedirectURL: Config.Rustdesk.ApiServer + "/api/oidc/callback",
|
|
189
|
182
|
}
|
|
190
|
183
|
|
|
191
|
184
|
// Maybe should validate the oauthConfig here
|
|
|
@@ -340,8 +333,8 @@ func (os *OauthService) oidcCallback(oauthConfig *oauth2.Config, provider *oidc.
|
|
340
|
333
|
}
|
|
341
|
334
|
|
|
342
|
335
|
// Callback: Get user information by code and op(Oauth provider)
|
|
343
|
|
-func (os *OauthService) Callback(c *gin.Context, code, verifier, op, nonce string) (err error, oauthUser *model.OauthUser) {
|
|
344
|
|
- err, oauthInfo, oauthConfig, provider := os.GetOauthConfig(c, op)
|
|
|
336
|
+func (os *OauthService) Callback(code, verifier, op, nonce string) (err error, oauthUser *model.OauthUser) {
|
|
|
337
|
+ err, oauthInfo, oauthConfig, provider := os.GetOauthConfig(op)
|
|
345
|
338
|
// oauthType is already validated in GetOauthConfig
|
|
346
|
339
|
if err != nil {
|
|
347
|
340
|
return err, nil
|
|
|
@@ -527,22 +520,3 @@ func (os *OauthService) getGithubPrimaryEmail(client *http.Client, githubUser *m
|
|
527
|
520
|
|
|
528
|
521
|
return fmt.Errorf("no primary verified email found")
|
|
529
|
522
|
}
|
|
530
|
|
-
|
|
531
|
|
-func (os *OauthService) buildRedirectURL(c *gin.Context) string {
|
|
532
|
|
- baseUrl := Config.Rustdesk.ApiServer
|
|
533
|
|
- host := c.Request.Host
|
|
534
|
|
-
|
|
535
|
|
- if host != "" {
|
|
536
|
|
- scheme := c.GetHeader("X-Forwarded-Proto")
|
|
537
|
|
- if scheme == "" {
|
|
538
|
|
- if c.Request.TLS != nil {
|
|
539
|
|
- scheme = "https"
|
|
540
|
|
- } else {
|
|
541
|
|
- scheme = "http"
|
|
542
|
|
- }
|
|
543
|
|
- }
|
|
544
|
|
- baseUrl = fmt.Sprintf("%s://%s", scheme, host)
|
|
545
|
|
- }
|
|
546
|
|
-
|
|
547
|
|
- return fmt.Sprintf("%s/api/oidc/callback", baseUrl)
|
|
548
|
|
-}
|