pr-deployer/routers/login.go

98 lines
2.1 KiB
Go

package routers
import (
"bytes"
"context"
"crypto/tls"
"encoding/json"
"fmt"
"io"
"net/http"
"net/url"
"time"
"gitea.com/gitea/pr-deployer/pkgs/proxy"
"gitea.com/gitea/pr-deployer/pkgs/settings"
"gitea.com/go-chi/session"
log "github.com/sirupsen/logrus"
"golang.org/x/oauth2"
)
func Home(w http.ResponseWriter, r *http.Request) {
sess := session.GetSession(r)
user := sess.Get("user")
oriState := "111111" // TODO: use a random
if user == nil {
sess.Set("state", oriState)
url := settings.OAuth2Conf.AuthCodeURL(oriState, oauth2.AccessTypeOffline)
fmt.Printf("Visit the URL for the auth dialog: %v", url)
http.Redirect(w, r, url, http.StatusFound)
return
}
http.Redirect(w, r, "/prs", http.StatusFound)
}
func OAuth2Callback(w http.ResponseWriter, r *http.Request) {
sess := session.GetSession(r)
oriState := sess.Get("state")
state := r.FormValue("state")
if state != oriState {
log.Error("state is not equal")
return
}
ctx := context.Background()
httpClient := &http.Client{
Timeout: 20 * time.Second,
Transport: &http.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
Proxy: func(req *http.Request) (*url.URL, error) {
return proxy.Proxy()(req)
},
},
}
ctx = context.WithValue(ctx, oauth2.HTTPClient, httpClient)
code := r.FormValue("code")
tok, err := settings.OAuth2Conf.Exchange(ctx, code)
if err != nil {
log.Error(err)
return
}
fmt.Println(tok)
sess.Set("token", tok)
client := settings.OAuth2Conf.Client(ctx, tok)
var url string
if settings.ServiceType == "gitea" {
url = settings.OAuth2ServerURL + "/api/v1/user"
} else if settings.ServiceType == "github" {
url = "https://api.github.com/user"
}
resp, err := client.Get(url)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bs, err := io.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(bs))
var user = make(map[string]interface{})
err = json.NewDecoder(bytes.NewReader(bs)).Decode(&user)
if err != nil {
log.Fatal(err)
}
fmt.Println(user)
sess.Set("user", user)
http.Redirect(w, r, "/", 302)
}