mirror of
https://github.com/1f349/tulip.git
synced 2024-11-15 08:11:42 +00:00
46 lines
977 B
Go
46 lines
977 B
Go
package server
|
|
|
|
import (
|
|
"github.com/1f349/tulip/database"
|
|
"github.com/1f349/tulip/oauth"
|
|
"net/http"
|
|
"net/url"
|
|
)
|
|
|
|
type RedAuthSource struct {
|
|
DB *database.DB
|
|
}
|
|
|
|
var _ oauth.AuthSource = &RedAuthSource{}
|
|
|
|
func (r *RedAuthSource) UserAuthorization(rw http.ResponseWriter, req *http.Request) (string, error) {
|
|
err := req.ParseForm()
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
auth, err := internalAuthenticationHandler(rw, req)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
if auth.IsGuest() {
|
|
// handle redirecting to oauth
|
|
var q url.Values
|
|
switch req.Method {
|
|
case http.MethodPost:
|
|
q = req.PostForm
|
|
case http.MethodGet:
|
|
q = req.URL.Query()
|
|
default:
|
|
http.Error(rw, "405 Method Not Allowed", http.StatusMethodNotAllowed)
|
|
return "", err
|
|
}
|
|
|
|
redirectUrl := PrepareRedirectUrl("/login", &url.URL{Path: "/authorize", RawQuery: q.Encode()})
|
|
http.Redirect(rw, req, redirectUrl.String(), http.StatusFound)
|
|
return "", nil
|
|
}
|
|
return auth.Data.ID.String(), nil
|
|
}
|