package oauth import ( "fmt" "net/url" "strings" msg "github.com/NyaaPantsu/nyaa/utils/messages" "github.com/NyaaPantsu/nyaa/templates" "github.com/gin-gonic/gin" "github.com/ory/fosite" "github.com/parnurzeal/gorequest" gooauth "golang.org/x/oauth2" ) func CallbackHandler(conf gooauth.Config) func(c *gin.Context) { return func(c *gin.Context) { ctx := fosite.NewContext() messages := msg.GetMessages(c) if c.Request.URL.Query().Get("error") != "" { messages.AddError("errors", c.Request.URL.Query().Get("error")) messages.AddError("errors", c.Request.URL.Query().Get("error_description")) templateVariables := templates.Commonvariables(c) templates.Render(c, "site/api/errors.jet.html", templateVariables) return } if c.Request.URL.Query().Get("revoke") != "" { revokeURL := strings.Replace(conf.Endpoint.TokenURL, "token", "revoke", 1) resp, body, errs := gorequest.New().Post(revokeURL).SetBasicAuth(conf.ClientID, conf.ClientSecret).SendString(url.Values{ "token_type_hint": {"refresh_token"}, "token": {c.Request.URL.Query().Get("revoke")}, }.Encode()).End() if len(errs) > 0 { messages.AddError("errors", fmt.Sprintf(`Could not revoke token %s`, errs)) } templateVariables := templates.Commonvariables(c) templateVariables.Set("ResponseCode", resp.StatusCode) if body != "" { templateVariables.Set("Response", fmt.Sprintf(`
Got a response from the revoke endpoint:%s
Got a response from the revoke endpoint:%s
I tried to exchange the authorize code for an access token but it did not work but got error: %s
`, err.Error())) templateVariables := templates.Commonvariables(c) templates.Render(c, "site/api/errors.jet.html", templateVariables) return } messages.AddInfo("infos", fmt.Sprintf("%s", token)) templateVariables := templates.Commonvariables(c) templateVariables.Set("Code", c.Request.URL.Query().Get("code")) templateVariables.Set("AccessToken", token.AccessToken) templateVariables.Set("RefreshToken", token.RefreshToken) if !messages.HasErrors() { templateVariables.Set("Callback", true) } templates.Render(c, "site/api/callback.jet.html", templateVariables) } }