mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-05-23 17:52:36 -04:00
Add configuration table
This commit is contained in:
parent
d285603716
commit
dfc411e5f6
3
.gitignore
vendored
3
.gitignore
vendored
@ -7,4 +7,5 @@ log.html
|
||||
output.xml
|
||||
report.html
|
||||
chart/charts
|
||||
chart/Chart.lock
|
||||
chart/Chart.lock
|
||||
tmp
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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)
|
||||
|
||||
|
5
auth/sql/migrations/000002_config.down.sql
Normal file
5
auth/sql/migrations/000002_config.down.sql
Normal file
@ -0,0 +1,5 @@
|
||||
begin;
|
||||
|
||||
drop table config;
|
||||
|
||||
commit;
|
8
auth/sql/migrations/000002_config.up.sql
Normal file
8
auth/sql/migrations/000002_config.up.sql
Normal file
@ -0,0 +1,8 @@
|
||||
begin;
|
||||
|
||||
create table config(
|
||||
key varchar(256) not null primary key,
|
||||
value text not null
|
||||
);
|
||||
|
||||
commit;
|
21
auth/sql/queries/config.sql
Normal file
21
auth/sql/queries/config.sql
Normal 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
|
||||
*;
|
||||
|
Loading…
x
Reference in New Issue
Block a user