This repository has been archived on 2022-10-30. You can view files and clone it, but cannot push or open issues or pull requests.
Segfautils/api/oauth.go

57 lines
1.6 KiB
Go
Raw Normal View History

2022-09-14 20:26:59 +05:30
package oauth
import (
"errors"
"io"
"io/ioutil"
"log"
"net/http"
"os"
"time"
"x/oauth2"
"github.com/ProjectSegfault/segfautils/config"
"github.com/goccy/go-json"
)
var (
clientID = config.OAuthClientID()
clientSecret = config.OAuthClientSecret()
redirectURL = config.RedirectURL()
authURL = config.AuthURL()
)
func LoginOAuth() {
// Create a new redirect route route
http.HandleFunc("/oauth/redirect", func(w http.ResponseWriter, r *http.Request) {
err := r.ParseForm()
if err != nil {
fmt.Fprintf(os.Stdout, "could not parse query: %v", err)
w.WriteHeader(http.StatusBadRequest)
}
code := r.FormValue("code")
reqURL := fmt.Sprintf("%s/login/oauth/access_token?client_id=%s&client_secret=%s&code=%s", authURL, clientID, clientSecret, code)
req, err := http.NewRequest(http.MethodPost, reqURL, nil)
if err != nil {
fmt.Fprintf(os.Stdout, "could not create HTTP request: %v", err)
w.WriteHeader(http.StatusBadRequest)
}
req.Header.Set("accept", "application/json")
res, err := httpClient.Do(req)
if err != nil {
fmt.Fprintf(os.Stdout, "could not send HTTP request: %v", err)
w.WriteHeader(http.StatusInternalServerError)
}
defer res.Body.Close()
var t OAuthAccessResponse
if err := json.NewDecoder(res.Body).Decode(&t); err != nil {
fmt.Fprintf(os.Stdout, "could not parse JSON response: %v", err)
w.WriteHeader(http.StatusBadRequest)
}
w.Header().Set("Location", "/announcements/?access_token="+t.AccessToken)
w.WriteHeader(http.StatusFound)
}
type OAuthAccessResponse struct {
AccessToken string `json:"access_token"`
}