49 lines
1.3 KiB
Go
49 lines
1.3 KiB
Go
package handlers
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"git.haelnorr.com/h/golib/hws"
|
|
"git.haelnorr.com/h/oslstats/internal/config"
|
|
"git.haelnorr.com/h/oslstats/internal/discord"
|
|
"git.haelnorr.com/h/oslstats/pkg/oauth"
|
|
)
|
|
|
|
func Login(server *hws.Server, cfg *config.Config) http.Handler {
|
|
return http.HandlerFunc(
|
|
func(w http.ResponseWriter, r *http.Request) {
|
|
state, uak, err := oauth.GenerateState(cfg.OAuth, "login")
|
|
if err != nil {
|
|
err = server.ThrowError(w, r, hws.HWSError{
|
|
StatusCode: http.StatusInternalServerError,
|
|
Message: "Failed to generate state token",
|
|
Error: err,
|
|
Level: hws.ErrorLevel("error"),
|
|
RenderErrorPage: true,
|
|
})
|
|
if err != nil {
|
|
server.ThrowFatal(w, err)
|
|
}
|
|
return
|
|
}
|
|
oauth.SetStateCookie(w, uak, cfg.HWSAuth.SSL)
|
|
|
|
link, err := discord.GetOAuthLink(cfg.Discord, state, cfg.HWSAuth.TrustedHost)
|
|
if err != nil {
|
|
err = server.ThrowError(w, r, hws.HWSError{
|
|
StatusCode: http.StatusInternalServerError,
|
|
Message: "An error occured trying to generate the login link",
|
|
Error: err,
|
|
Level: hws.ErrorLevel("error"),
|
|
RenderErrorPage: true,
|
|
})
|
|
if err != nil {
|
|
server.ThrowFatal(w, err)
|
|
}
|
|
return
|
|
}
|
|
http.Redirect(w, r, link, http.StatusSeeOther)
|
|
},
|
|
)
|
|
}
|