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
midHandlers := middlewares.NewHandlers(db)
apis := api.NewHandlers()
apis := api.NewHandlers(db)
auths := auth.NewHandlers(db)
// Initialize backend router

View File

@@ -1,9 +1,9 @@
package api
import (
"fmt"
"net/http"
"gitea.konchin.com/go2025/backend/middlewares"
"github.com/uptrace/bunrouter"
)
@@ -24,7 +24,25 @@ func (self *Handlers) GetAliases(
w http.ResponseWriter, req bunrouter.Request,
) error {
// mock output
fmt.Fprintf(w, "%s", `[{"id": 1, "name": "yajiu"}]`)
return nil
// return utils.Success(w)
ctx := req.Context()
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 (
"net/http"
"strings"
"gitea.konchin.com/go2025/backend/middlewares"
"gitea.konchin.com/go2025/backend/utils"
"github.com/uptrace/bunrouter"
)
@@ -25,5 +27,18 @@ type getImagesOutputImage struct {
func (self *Handlers) GetImages(
w http.ResponseWriter, req bunrouter.Request,
) 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)
}

View File

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

View File

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

View File

@@ -91,3 +91,16 @@ func (self *BunDatabase) UpsertLoginToken(
}
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,
userId string,
) (string, error)
GetAliases(
ctx context.Context,
) ([]models.Alias, error)
}

View File

@@ -8,6 +8,8 @@ import (
"github.com/go-resty/resty/v2"
)
var client *resty.Client
type genLoginUrlPayload struct {
LoginUrl string `json:"loginUrl"`
}
@@ -16,8 +18,8 @@ type loginPayload struct {
Token string `json:"token"`
}
func TestLogin(t *testing.T) {
client := resty.New()
func Test_01_Login(t *testing.T) {
client = resty.New()
var payload genLoginUrlPayload
resp, err := client.R().
@@ -37,7 +39,7 @@ func TestLogin(t *testing.T) {
resp, err = client.R().
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 {
t.Fatal("failed to login")
}

View File

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