Add configuration table

This commit is contained in:
Zoe Roux 2024-08-27 00:47:58 +02:00
parent d285603716
commit dfc411e5f6
No known key found for this signature in database
7 changed files with 95 additions and 7 deletions

3
.gitignore vendored
View File

@ -7,4 +7,5 @@ log.html
output.xml
report.html
chart/charts
chart/Chart.lock
chart/Chart.lock
tmp

View File

@ -40,22 +40,21 @@ func (h *Handler) Register(c echo.Context) error {
Username: req.Username,
Email: req.Email,
Password: &pass,
// TODO: Use configured value.
Claims: []byte{},
Claims: h.config.DefaultClaims,
})
if err != nil {
return echo.NewHTTPError(409, "Email or username already taken")
}
user := MapDbUser(&duser)
return createToken(c, &user)
return h.createToken(c, &user)
}
func createToken(c echo.Context, user *User) error {
func (h *Handler) createToken(c echo.Context, user *User) error {
claims := &jwt.RegisteredClaims{
Subject: user.ID.String(),
}
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
t, err := token.SignedString(h.jwtSecret)
t, err := token.SignedString(h.config.JwtSecret)
if err != nil {
return err
}

View File

@ -1,6 +1,54 @@
package main
import (
"context"
"crypto/rand"
"encoding/base64"
"github.com/zoriya/kyoo/keibi/dbc"
)
type Configuration struct {
JwtSecret string
JwtSecret []byte
DefaultClaims []byte
}
const (
JwtSecret = "jwt_secret"
)
func LoadConfiguration(db *dbc.Queries) (*Configuration, error) {
ctx := context.Background()
confs, err := db.LoadConfig(ctx)
if err != nil {
return nil, err
}
ret := Configuration{}
for _, conf := range confs {
switch conf.Key {
case JwtSecret:
secret, err := base64.StdEncoding.DecodeString(conf.Value)
if err != nil {
return nil, err
}
ret.JwtSecret = secret
}
}
if ret.JwtSecret == nil {
ret.JwtSecret = make([]byte, 128)
rand.Read(ret.JwtSecret)
_, err := db.SaveConfig(ctx, dbc.SaveConfigParams{
Key: JwtSecret,
Value: base64.StdEncoding.EncodeToString(ret.JwtSecret),
})
if err != nil {
return nil, err
}
}
return &ret, nil
}

View File

@ -124,6 +124,12 @@ func main() {
h := Handler{
db: dbc.New(db),
}
conf, err := LoadConfiguration(h.db)
if err != nil {
e.Logger.Fatal("Could not load configuration: %v", err)
return
}
h.config = conf
e.GET("/users", h.ListUsers)

View File

@ -0,0 +1,5 @@
begin;
drop table config;
commit;

View File

@ -0,0 +1,8 @@
begin;
create table config(
key varchar(256) not null primary key,
value text not null
);
commit;

View File

@ -0,0 +1,21 @@
-- name: LoadConfig :many
select
*
from
config;
-- name: SaveConfig :one
insert into config(key, value)
values ($1, $2)
on conflict (key)
do update set
value = excluded.value
returning
*;
-- name: DeleteConfig :one
delete from config
where key = $1
returning
*;