Files
authorizer/server/handlers/oauthLogin.go

47 lines
1.2 KiB
Go
Raw Normal View History

package handlers
import (
"net/http"
2021-07-23 21:57:44 +05:30
"github.com/authorizerdev/authorizer/server/enum"
"github.com/authorizerdev/authorizer/server/oauth"
"github.com/authorizerdev/authorizer/server/session"
"github.com/gin-gonic/gin"
"github.com/google/uuid"
)
2021-07-30 23:42:15 +05:30
// set host in the oauth state that is useful for redirecting
2021-07-30 23:42:15 +05:30
func OAuthLoginHandler() gin.HandlerFunc {
return func(c *gin.Context) {
2021-07-30 23:42:15 +05:30
// TODO validate redirect URL
2021-08-02 23:31:17 +05:30
redirectURL := c.Query("redirectURL")
2021-07-30 23:42:15 +05:30
if redirectURL == "" {
c.JSON(400, gin.H{
"error": "invalid redirect url",
})
return
}
uuid := uuid.New()
oauthStateString := uuid.String() + "___" + redirectURL
provider := c.Param("oauth_provider")
switch provider {
case enum.Google.String():
session.SetToken(oauthStateString, enum.Google.String())
url := oauth.OAuthProvider.GoogleConfig.AuthCodeURL(oauthStateString)
c.Redirect(http.StatusTemporaryRedirect, url)
case enum.Github.String():
2021-07-18 04:48:42 +05:30
session.SetToken(oauthStateString, enum.Github.String())
url := oauth.OAuthProvider.GithubConfig.AuthCodeURL(oauthStateString)
c.Redirect(http.StatusTemporaryRedirect, url)
default:
c.JSON(422, gin.H{
"message": "Invalid oauth provider",
})
2021-07-18 04:48:42 +05:30
}
}
}