Fix: login flow

This commit is contained in:
2025-12-07 18:56:31 +08:00
parent 3970dd5ebd
commit f4c92504e8
9 changed files with 72 additions and 11 deletions

View File

@@ -88,7 +88,7 @@ var serveCmd = &cobra.Command{
// Initialize handlers // Initialize handlers
midHandlers := middlewares.NewHandlers(db) midHandlers := middlewares.NewHandlers(db)
apis := api.NewHandlers() apis := api.NewHandlers(db)
auths := auth.NewHandlers(db) auths := auth.NewHandlers(db)
// Initialize backend router // Initialize backend router

View File

@@ -1,9 +1,9 @@
package api package api
import ( import (
"fmt"
"net/http" "net/http"
"gitea.konchin.com/go2025/backend/middlewares"
"github.com/uptrace/bunrouter" "github.com/uptrace/bunrouter"
) )
@@ -24,7 +24,25 @@ func (self *Handlers) GetAliases(
w http.ResponseWriter, req bunrouter.Request, w http.ResponseWriter, req bunrouter.Request,
) error { ) error {
// mock output // mock output
fmt.Fprintf(w, "%s", `[{"id": 1, "name": "yajiu"}]`) ctx := req.Context()
return nil
// return utils.Success(w) aliases, err := self.db.GetAliases(ctx)
if err != nil {
return middlewares.HTTPError{
StatusCode: http.StatusInternalServerError,
Message: "failed to get aliases",
OriginError: err,
}
}
var output []getAliasesOutputAlias
for _, alias := range aliases {
output = append(output, getAliasesOutputAlias{
Id: alias.Id,
Name: alias.Name,
})
}
return bunrouter.JSON(w, output)
} }

View File

@@ -2,7 +2,9 @@ package api
import ( import (
"net/http" "net/http"
"strings"
"gitea.konchin.com/go2025/backend/middlewares"
"gitea.konchin.com/go2025/backend/utils" "gitea.konchin.com/go2025/backend/utils"
"github.com/uptrace/bunrouter" "github.com/uptrace/bunrouter"
) )
@@ -25,5 +27,18 @@ type getImagesOutputImage struct {
func (self *Handlers) GetImages( func (self *Handlers) GetImages(
w http.ResponseWriter, req bunrouter.Request, w http.ResponseWriter, req bunrouter.Request,
) error { ) error {
// ctx := req.Context()
images := strings.Split(req.Param("images"), ",")
aliases := strings.Split(req.Param("aliases"), ",")
if (len(images) == 0 && len(aliases) == 0) ||
(len(images) > 0 && len(aliases) > 0) {
return middlewares.HTTPError{
StatusCode: http.StatusBadRequest,
Message: "images and aliases should exist exactly one",
}
}
return utils.Success(w) return utils.Success(w)
} }

View File

@@ -1,8 +1,11 @@
package api package api
import "gitea.konchin.com/go2025/backend/interfaces"
type Handlers struct { type Handlers struct {
db interfaces.Database
} }
func NewHandlers() *Handlers { func NewHandlers(db interfaces.Database) *Handlers {
return &Handlers{} return &Handlers{db: db}
} }

View File

@@ -58,7 +58,7 @@ func (self *Handlers) PostGenLoginUrl(
return bunrouter.JSON(w, postGenLoginUrlOutput{ return bunrouter.JSON(w, postGenLoginUrlOutput{
LoginUrl: viper.GetString("external-url") + LoginUrl: viper.GetString("external-url") +
"/auth/login?" + "/login?" +
"token=" + token, "token=" + token,
}) })
} }

View File

@@ -91,3 +91,16 @@ func (self *BunDatabase) UpsertLoginToken(
} }
return token, nil return token, nil
} }
func (self *BunDatabase) GetAliases(
ctx context.Context,
) ([]models.Alias, error) {
var ret []models.Alias
err := self.db.NewSelect().
Model(&ret).
Scan(ctx)
if err != nil {
return []models.Alias{}, err
}
return ret, nil
}

View File

@@ -21,4 +21,8 @@ type Database interface {
ctx context.Context, ctx context.Context,
userId string, userId string,
) (string, error) ) (string, error)
GetAliases(
ctx context.Context,
) ([]models.Alias, error)
} }

View File

@@ -8,6 +8,8 @@ import (
"github.com/go-resty/resty/v2" "github.com/go-resty/resty/v2"
) )
var client *resty.Client
type genLoginUrlPayload struct { type genLoginUrlPayload struct {
LoginUrl string `json:"loginUrl"` LoginUrl string `json:"loginUrl"`
} }
@@ -16,8 +18,8 @@ type loginPayload struct {
Token string `json:"token"` Token string `json:"token"`
} }
func TestLogin(t *testing.T) { func Test_01_Login(t *testing.T) {
client := resty.New() client = resty.New()
var payload genLoginUrlPayload var payload genLoginUrlPayload
resp, err := client.R(). resp, err := client.R().
@@ -37,7 +39,7 @@ func TestLogin(t *testing.T) {
resp, err = client.R(). resp, err = client.R().
SetBody(loginPayload{Token: loginUrl.Query().Get("token")}). SetBody(loginPayload{Token: loginUrl.Query().Get("token")}).
Post(loginUrl.Scheme + "://" + loginUrl.Host + loginUrl.Path) Post(loginUrl.Scheme + "://" + loginUrl.Host + "/auth/login")
if err != nil || resp.StatusCode() != http.StatusOK { if err != nil || resp.StatusCode() != http.StatusOK {
t.Fatal("failed to login") t.Fatal("failed to login")
} }

View File

@@ -0,0 +1,6 @@
package main
import "testing"
func Test_02_GetImages(t *testing.T) {
}