mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-05-24 02:02:36 -04:00
Push generated files in auth to make tools happy
This commit is contained in:
parent
23adc6033e
commit
b94a6a652e
4
auth/.gitignore
vendored
4
auth/.gitignore
vendored
@ -1,4 +0,0 @@
|
|||||||
# generated via sqlc
|
|
||||||
dbc/
|
|
||||||
# genereated via swag
|
|
||||||
docs/
|
|
@ -2,15 +2,9 @@ FROM golang:1.24 AS build
|
|||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
RUN go install github.com/bokwoon95/wgo@latest
|
RUN go install github.com/bokwoon95/wgo@latest
|
||||||
RUN go install github.com/sqlc-dev/sqlc/cmd/sqlc@latest
|
|
||||||
RUN go install github.com/swaggo/swag/cmd/swag@latest
|
|
||||||
|
|
||||||
COPY go.mod go.sum ./
|
COPY go.mod go.sum ./
|
||||||
RUN go mod download
|
RUN go mod download
|
||||||
|
|
||||||
# COPY sqlc.yaml ./
|
|
||||||
# COPY sql/ ./
|
|
||||||
# RUN sqlc generate
|
|
||||||
|
|
||||||
EXPOSE 4568
|
EXPOSE 4568
|
||||||
CMD ["wgo", "run", "-race", "."]
|
CMD ["wgo", "run", "-race", "."]
|
||||||
|
73
auth/dbc/config.sql.go
Normal file
73
auth/dbc/config.sql.go
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
// Code generated by sqlc. DO NOT EDIT.
|
||||||
|
// versions:
|
||||||
|
// sqlc v1.28.0
|
||||||
|
// source: config.sql
|
||||||
|
|
||||||
|
package dbc
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
)
|
||||||
|
|
||||||
|
const deleteConfig = `-- name: DeleteConfig :one
|
||||||
|
delete from config
|
||||||
|
where key = $1
|
||||||
|
returning
|
||||||
|
key, value
|
||||||
|
`
|
||||||
|
|
||||||
|
func (q *Queries) DeleteConfig(ctx context.Context, key string) (Config, error) {
|
||||||
|
row := q.db.QueryRow(ctx, deleteConfig, key)
|
||||||
|
var i Config
|
||||||
|
err := row.Scan(&i.Key, &i.Value)
|
||||||
|
return i, err
|
||||||
|
}
|
||||||
|
|
||||||
|
const loadConfig = `-- name: LoadConfig :many
|
||||||
|
select
|
||||||
|
key, value
|
||||||
|
from
|
||||||
|
config
|
||||||
|
`
|
||||||
|
|
||||||
|
func (q *Queries) LoadConfig(ctx context.Context) ([]Config, error) {
|
||||||
|
rows, err := q.db.Query(ctx, loadConfig)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer rows.Close()
|
||||||
|
var items []Config
|
||||||
|
for rows.Next() {
|
||||||
|
var i Config
|
||||||
|
if err := rows.Scan(&i.Key, &i.Value); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
items = append(items, i)
|
||||||
|
}
|
||||||
|
if err := rows.Err(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return items, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
const saveConfig = `-- name: SaveConfig :one
|
||||||
|
insert into config(key, value)
|
||||||
|
values ($1, $2)
|
||||||
|
on conflict (key)
|
||||||
|
do update set
|
||||||
|
value = excluded.value
|
||||||
|
returning
|
||||||
|
key, value
|
||||||
|
`
|
||||||
|
|
||||||
|
type SaveConfigParams struct {
|
||||||
|
Key string `json:"key"`
|
||||||
|
Value string `json:"value"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (q *Queries) SaveConfig(ctx context.Context, arg SaveConfigParams) (Config, error) {
|
||||||
|
row := q.db.QueryRow(ctx, saveConfig, arg.Key, arg.Value)
|
||||||
|
var i Config
|
||||||
|
err := row.Scan(&i.Key, &i.Value)
|
||||||
|
return i, err
|
||||||
|
}
|
32
auth/dbc/db.go
Normal file
32
auth/dbc/db.go
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
// Code generated by sqlc. DO NOT EDIT.
|
||||||
|
// versions:
|
||||||
|
// sqlc v1.28.0
|
||||||
|
|
||||||
|
package dbc
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/jackc/pgx/v5"
|
||||||
|
"github.com/jackc/pgx/v5/pgconn"
|
||||||
|
)
|
||||||
|
|
||||||
|
type DBTX interface {
|
||||||
|
Exec(context.Context, string, ...interface{}) (pgconn.CommandTag, error)
|
||||||
|
Query(context.Context, string, ...interface{}) (pgx.Rows, error)
|
||||||
|
QueryRow(context.Context, string, ...interface{}) pgx.Row
|
||||||
|
}
|
||||||
|
|
||||||
|
func New(db DBTX) *Queries {
|
||||||
|
return &Queries{db: db}
|
||||||
|
}
|
||||||
|
|
||||||
|
type Queries struct {
|
||||||
|
db DBTX
|
||||||
|
}
|
||||||
|
|
||||||
|
func (q *Queries) WithTx(tx pgx.Tx) *Queries {
|
||||||
|
return &Queries{
|
||||||
|
db: tx,
|
||||||
|
}
|
||||||
|
}
|
49
auth/dbc/models.go
Normal file
49
auth/dbc/models.go
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
// Code generated by sqlc. DO NOT EDIT.
|
||||||
|
// versions:
|
||||||
|
// sqlc v1.28.0
|
||||||
|
|
||||||
|
package dbc
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
|
||||||
|
jwt "github.com/golang-jwt/jwt/v5"
|
||||||
|
"github.com/google/uuid"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Config struct {
|
||||||
|
Key string `json:"key"`
|
||||||
|
Value string `json:"value"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type OidcHandle struct {
|
||||||
|
UserPk int32 `json:"userPk"`
|
||||||
|
Provider string `json:"provider"`
|
||||||
|
Id string `json:"id"`
|
||||||
|
Username string `json:"username"`
|
||||||
|
ProfileUrl *string `json:"profileUrl"`
|
||||||
|
AccessToken *string `json:"accessToken"`
|
||||||
|
RefreshToken *string `json:"refreshToken"`
|
||||||
|
ExpireAt *time.Time `json:"expireAt"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type Session struct {
|
||||||
|
Pk int32 `json:"pk"`
|
||||||
|
Id uuid.UUID `json:"id"`
|
||||||
|
Token string `json:"token"`
|
||||||
|
UserPk int32 `json:"userPk"`
|
||||||
|
CreatedDate time.Time `json:"createdDate"`
|
||||||
|
LastUsed time.Time `json:"lastUsed"`
|
||||||
|
Device *string `json:"device"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type User struct {
|
||||||
|
Pk int32 `json:"pk"`
|
||||||
|
Id uuid.UUID `json:"id"`
|
||||||
|
Username string `json:"username"`
|
||||||
|
Email string `json:"email"`
|
||||||
|
Password *string `json:"password"`
|
||||||
|
Claims jwt.MapClaims `json:"claims"`
|
||||||
|
CreatedDate time.Time `json:"createdDate"`
|
||||||
|
LastSeen time.Time `json:"lastSeen"`
|
||||||
|
}
|
161
auth/dbc/sessions.sql.go
Normal file
161
auth/dbc/sessions.sql.go
Normal file
@ -0,0 +1,161 @@
|
|||||||
|
// Code generated by sqlc. DO NOT EDIT.
|
||||||
|
// versions:
|
||||||
|
// sqlc v1.28.0
|
||||||
|
// source: sessions.sql
|
||||||
|
|
||||||
|
package dbc
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/google/uuid"
|
||||||
|
)
|
||||||
|
|
||||||
|
const createSession = `-- name: CreateSession :one
|
||||||
|
insert into sessions(token, user_pk, device)
|
||||||
|
values ($1, $2, $3)
|
||||||
|
returning
|
||||||
|
pk, id, token, user_pk, created_date, last_used, device
|
||||||
|
`
|
||||||
|
|
||||||
|
type CreateSessionParams struct {
|
||||||
|
Token string `json:"token"`
|
||||||
|
UserPk int32 `json:"userPk"`
|
||||||
|
Device *string `json:"device"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (q *Queries) CreateSession(ctx context.Context, arg CreateSessionParams) (Session, error) {
|
||||||
|
row := q.db.QueryRow(ctx, createSession, arg.Token, arg.UserPk, arg.Device)
|
||||||
|
var i Session
|
||||||
|
err := row.Scan(
|
||||||
|
&i.Pk,
|
||||||
|
&i.Id,
|
||||||
|
&i.Token,
|
||||||
|
&i.UserPk,
|
||||||
|
&i.CreatedDate,
|
||||||
|
&i.LastUsed,
|
||||||
|
&i.Device,
|
||||||
|
)
|
||||||
|
return i, err
|
||||||
|
}
|
||||||
|
|
||||||
|
const deleteSession = `-- name: DeleteSession :one
|
||||||
|
delete from sessions as s using users as u
|
||||||
|
where s.user_pk = u.pk
|
||||||
|
and s.id = $1
|
||||||
|
and u.id = $2
|
||||||
|
returning
|
||||||
|
s.pk, s.id, s.token, s.user_pk, s.created_date, s.last_used, s.device
|
||||||
|
`
|
||||||
|
|
||||||
|
type DeleteSessionParams struct {
|
||||||
|
Id uuid.UUID `json:"id"`
|
||||||
|
UserId uuid.UUID `json:"userId"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (q *Queries) DeleteSession(ctx context.Context, arg DeleteSessionParams) (Session, error) {
|
||||||
|
row := q.db.QueryRow(ctx, deleteSession, arg.Id, arg.UserId)
|
||||||
|
var i Session
|
||||||
|
err := row.Scan(
|
||||||
|
&i.Pk,
|
||||||
|
&i.Id,
|
||||||
|
&i.Token,
|
||||||
|
&i.UserPk,
|
||||||
|
&i.CreatedDate,
|
||||||
|
&i.LastUsed,
|
||||||
|
&i.Device,
|
||||||
|
)
|
||||||
|
return i, err
|
||||||
|
}
|
||||||
|
|
||||||
|
const getUserFromToken = `-- name: GetUserFromToken :one
|
||||||
|
select
|
||||||
|
s.id,
|
||||||
|
s.last_used,
|
||||||
|
u.pk, u.id, u.username, u.email, u.password, u.claims, u.created_date, u.last_seen
|
||||||
|
from
|
||||||
|
users as u
|
||||||
|
inner join sessions as s on u.pk = s.user_pk
|
||||||
|
where
|
||||||
|
s.token = $1
|
||||||
|
limit 1
|
||||||
|
`
|
||||||
|
|
||||||
|
type GetUserFromTokenRow struct {
|
||||||
|
Id uuid.UUID `json:"id"`
|
||||||
|
LastUsed time.Time `json:"lastUsed"`
|
||||||
|
User User `json:"user"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (q *Queries) GetUserFromToken(ctx context.Context, token string) (GetUserFromTokenRow, error) {
|
||||||
|
row := q.db.QueryRow(ctx, getUserFromToken, token)
|
||||||
|
var i GetUserFromTokenRow
|
||||||
|
err := row.Scan(
|
||||||
|
&i.Id,
|
||||||
|
&i.LastUsed,
|
||||||
|
&i.User.Pk,
|
||||||
|
&i.User.Id,
|
||||||
|
&i.User.Username,
|
||||||
|
&i.User.Email,
|
||||||
|
&i.User.Password,
|
||||||
|
&i.User.Claims,
|
||||||
|
&i.User.CreatedDate,
|
||||||
|
&i.User.LastSeen,
|
||||||
|
)
|
||||||
|
return i, err
|
||||||
|
}
|
||||||
|
|
||||||
|
const getUserSessions = `-- name: GetUserSessions :many
|
||||||
|
select
|
||||||
|
s.pk, s.id, s.token, s.user_pk, s.created_date, s.last_used, s.device
|
||||||
|
from
|
||||||
|
sessions as s
|
||||||
|
inner join users as u on u.pk = s.user_pk
|
||||||
|
where
|
||||||
|
u.pk = $1
|
||||||
|
order by
|
||||||
|
last_used
|
||||||
|
`
|
||||||
|
|
||||||
|
func (q *Queries) GetUserSessions(ctx context.Context, pk int32) ([]Session, error) {
|
||||||
|
rows, err := q.db.Query(ctx, getUserSessions, pk)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer rows.Close()
|
||||||
|
var items []Session
|
||||||
|
for rows.Next() {
|
||||||
|
var i Session
|
||||||
|
if err := rows.Scan(
|
||||||
|
&i.Pk,
|
||||||
|
&i.Id,
|
||||||
|
&i.Token,
|
||||||
|
&i.UserPk,
|
||||||
|
&i.CreatedDate,
|
||||||
|
&i.LastUsed,
|
||||||
|
&i.Device,
|
||||||
|
); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
items = append(items, i)
|
||||||
|
}
|
||||||
|
if err := rows.Err(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return items, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
const touchSession = `-- name: TouchSession :exec
|
||||||
|
update
|
||||||
|
sessions
|
||||||
|
set
|
||||||
|
last_used = now()::timestamptz
|
||||||
|
where
|
||||||
|
id = $1
|
||||||
|
`
|
||||||
|
|
||||||
|
func (q *Queries) TouchSession(ctx context.Context, id uuid.UUID) error {
|
||||||
|
_, err := q.db.Exec(ctx, touchSession, id)
|
||||||
|
return err
|
||||||
|
}
|
296
auth/dbc/users.sql.go
Normal file
296
auth/dbc/users.sql.go
Normal file
@ -0,0 +1,296 @@
|
|||||||
|
// Code generated by sqlc. DO NOT EDIT.
|
||||||
|
// versions:
|
||||||
|
// sqlc v1.28.0
|
||||||
|
// source: users.sql
|
||||||
|
|
||||||
|
package dbc
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
jwt "github.com/golang-jwt/jwt/v5"
|
||||||
|
"github.com/google/uuid"
|
||||||
|
)
|
||||||
|
|
||||||
|
const createUser = `-- name: CreateUser :one
|
||||||
|
insert into users(username, email, password, claims)
|
||||||
|
values ($1, $2, $3, $4)
|
||||||
|
returning
|
||||||
|
pk, id, username, email, password, claims, created_date, last_seen
|
||||||
|
`
|
||||||
|
|
||||||
|
type CreateUserParams struct {
|
||||||
|
Username string `json:"username"`
|
||||||
|
Email string `json:"email"`
|
||||||
|
Password *string `json:"password"`
|
||||||
|
Claims jwt.MapClaims `json:"claims"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (q *Queries) CreateUser(ctx context.Context, arg CreateUserParams) (User, error) {
|
||||||
|
row := q.db.QueryRow(ctx, createUser,
|
||||||
|
arg.Username,
|
||||||
|
arg.Email,
|
||||||
|
arg.Password,
|
||||||
|
arg.Claims,
|
||||||
|
)
|
||||||
|
var i User
|
||||||
|
err := row.Scan(
|
||||||
|
&i.Pk,
|
||||||
|
&i.Id,
|
||||||
|
&i.Username,
|
||||||
|
&i.Email,
|
||||||
|
&i.Password,
|
||||||
|
&i.Claims,
|
||||||
|
&i.CreatedDate,
|
||||||
|
&i.LastSeen,
|
||||||
|
)
|
||||||
|
return i, err
|
||||||
|
}
|
||||||
|
|
||||||
|
const deleteUser = `-- name: DeleteUser :one
|
||||||
|
delete from users
|
||||||
|
where id = $1
|
||||||
|
returning
|
||||||
|
pk, id, username, email, password, claims, created_date, last_seen
|
||||||
|
`
|
||||||
|
|
||||||
|
func (q *Queries) DeleteUser(ctx context.Context, id uuid.UUID) (User, error) {
|
||||||
|
row := q.db.QueryRow(ctx, deleteUser, id)
|
||||||
|
var i User
|
||||||
|
err := row.Scan(
|
||||||
|
&i.Pk,
|
||||||
|
&i.Id,
|
||||||
|
&i.Username,
|
||||||
|
&i.Email,
|
||||||
|
&i.Password,
|
||||||
|
&i.Claims,
|
||||||
|
&i.CreatedDate,
|
||||||
|
&i.LastSeen,
|
||||||
|
)
|
||||||
|
return i, err
|
||||||
|
}
|
||||||
|
|
||||||
|
const getAllUsers = `-- name: GetAllUsers :many
|
||||||
|
select
|
||||||
|
pk, id, username, email, password, claims, created_date, last_seen
|
||||||
|
from
|
||||||
|
users
|
||||||
|
order by
|
||||||
|
id
|
||||||
|
limit $1
|
||||||
|
`
|
||||||
|
|
||||||
|
func (q *Queries) GetAllUsers(ctx context.Context, limit int32) ([]User, error) {
|
||||||
|
rows, err := q.db.Query(ctx, getAllUsers, limit)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer rows.Close()
|
||||||
|
var items []User
|
||||||
|
for rows.Next() {
|
||||||
|
var i User
|
||||||
|
if err := rows.Scan(
|
||||||
|
&i.Pk,
|
||||||
|
&i.Id,
|
||||||
|
&i.Username,
|
||||||
|
&i.Email,
|
||||||
|
&i.Password,
|
||||||
|
&i.Claims,
|
||||||
|
&i.CreatedDate,
|
||||||
|
&i.LastSeen,
|
||||||
|
); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
items = append(items, i)
|
||||||
|
}
|
||||||
|
if err := rows.Err(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return items, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
const getAllUsersAfter = `-- name: GetAllUsersAfter :many
|
||||||
|
select
|
||||||
|
pk, id, username, email, password, claims, created_date, last_seen
|
||||||
|
from
|
||||||
|
users
|
||||||
|
where
|
||||||
|
id >= $2
|
||||||
|
order by
|
||||||
|
id
|
||||||
|
limit $1
|
||||||
|
`
|
||||||
|
|
||||||
|
type GetAllUsersAfterParams struct {
|
||||||
|
Limit int32 `json:"limit"`
|
||||||
|
AfterId uuid.UUID `json:"afterId"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (q *Queries) GetAllUsersAfter(ctx context.Context, arg GetAllUsersAfterParams) ([]User, error) {
|
||||||
|
rows, err := q.db.Query(ctx, getAllUsersAfter, arg.Limit, arg.AfterId)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer rows.Close()
|
||||||
|
var items []User
|
||||||
|
for rows.Next() {
|
||||||
|
var i User
|
||||||
|
if err := rows.Scan(
|
||||||
|
&i.Pk,
|
||||||
|
&i.Id,
|
||||||
|
&i.Username,
|
||||||
|
&i.Email,
|
||||||
|
&i.Password,
|
||||||
|
&i.Claims,
|
||||||
|
&i.CreatedDate,
|
||||||
|
&i.LastSeen,
|
||||||
|
); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
items = append(items, i)
|
||||||
|
}
|
||||||
|
if err := rows.Err(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return items, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
const getUser = `-- name: GetUser :many
|
||||||
|
select
|
||||||
|
u.pk, u.id, u.username, u.email, u.password, u.claims, u.created_date, u.last_seen,
|
||||||
|
h.provider,
|
||||||
|
h.id,
|
||||||
|
h.username,
|
||||||
|
h.profile_url
|
||||||
|
from
|
||||||
|
users as u
|
||||||
|
left join oidc_handle as h on u.pk = h.user_pk
|
||||||
|
where
|
||||||
|
u.id = $1
|
||||||
|
`
|
||||||
|
|
||||||
|
type GetUserRow struct {
|
||||||
|
User User `json:"user"`
|
||||||
|
Provider *string `json:"provider"`
|
||||||
|
Id *string `json:"id"`
|
||||||
|
Username *string `json:"username"`
|
||||||
|
ProfileUrl *string `json:"profileUrl"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (q *Queries) GetUser(ctx context.Context, id uuid.UUID) ([]GetUserRow, error) {
|
||||||
|
rows, err := q.db.Query(ctx, getUser, id)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer rows.Close()
|
||||||
|
var items []GetUserRow
|
||||||
|
for rows.Next() {
|
||||||
|
var i GetUserRow
|
||||||
|
if err := rows.Scan(
|
||||||
|
&i.User.Pk,
|
||||||
|
&i.User.Id,
|
||||||
|
&i.User.Username,
|
||||||
|
&i.User.Email,
|
||||||
|
&i.User.Password,
|
||||||
|
&i.User.Claims,
|
||||||
|
&i.User.CreatedDate,
|
||||||
|
&i.User.LastSeen,
|
||||||
|
&i.Provider,
|
||||||
|
&i.Id,
|
||||||
|
&i.Username,
|
||||||
|
&i.ProfileUrl,
|
||||||
|
); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
items = append(items, i)
|
||||||
|
}
|
||||||
|
if err := rows.Err(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return items, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
const getUserByLogin = `-- name: GetUserByLogin :one
|
||||||
|
select
|
||||||
|
pk, id, username, email, password, claims, created_date, last_seen
|
||||||
|
from
|
||||||
|
users
|
||||||
|
where
|
||||||
|
email = $1
|
||||||
|
or username = $1
|
||||||
|
limit 1
|
||||||
|
`
|
||||||
|
|
||||||
|
func (q *Queries) GetUserByLogin(ctx context.Context, login string) (User, error) {
|
||||||
|
row := q.db.QueryRow(ctx, getUserByLogin, login)
|
||||||
|
var i User
|
||||||
|
err := row.Scan(
|
||||||
|
&i.Pk,
|
||||||
|
&i.Id,
|
||||||
|
&i.Username,
|
||||||
|
&i.Email,
|
||||||
|
&i.Password,
|
||||||
|
&i.Claims,
|
||||||
|
&i.CreatedDate,
|
||||||
|
&i.LastSeen,
|
||||||
|
)
|
||||||
|
return i, err
|
||||||
|
}
|
||||||
|
|
||||||
|
const touchUser = `-- name: TouchUser :exec
|
||||||
|
update
|
||||||
|
users
|
||||||
|
set
|
||||||
|
last_used = now()::timestamptz
|
||||||
|
where
|
||||||
|
id = $1
|
||||||
|
`
|
||||||
|
|
||||||
|
func (q *Queries) TouchUser(ctx context.Context, id uuid.UUID) error {
|
||||||
|
_, err := q.db.Exec(ctx, touchUser, id)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
const updateUser = `-- name: UpdateUser :one
|
||||||
|
update
|
||||||
|
users
|
||||||
|
set
|
||||||
|
username = $2,
|
||||||
|
email = $3,
|
||||||
|
password = $4,
|
||||||
|
claims = $5
|
||||||
|
where
|
||||||
|
id = $1
|
||||||
|
returning
|
||||||
|
pk, id, username, email, password, claims, created_date, last_seen
|
||||||
|
`
|
||||||
|
|
||||||
|
type UpdateUserParams struct {
|
||||||
|
Id uuid.UUID `json:"id"`
|
||||||
|
Username string `json:"username"`
|
||||||
|
Email string `json:"email"`
|
||||||
|
Password *string `json:"password"`
|
||||||
|
Claims jwt.MapClaims `json:"claims"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (q *Queries) UpdateUser(ctx context.Context, arg UpdateUserParams) (User, error) {
|
||||||
|
row := q.db.QueryRow(ctx, updateUser,
|
||||||
|
arg.Id,
|
||||||
|
arg.Username,
|
||||||
|
arg.Email,
|
||||||
|
arg.Password,
|
||||||
|
arg.Claims,
|
||||||
|
)
|
||||||
|
var i User
|
||||||
|
err := row.Scan(
|
||||||
|
&i.Pk,
|
||||||
|
&i.Id,
|
||||||
|
&i.Username,
|
||||||
|
&i.Email,
|
||||||
|
&i.Password,
|
||||||
|
&i.Claims,
|
||||||
|
&i.CreatedDate,
|
||||||
|
&i.LastSeen,
|
||||||
|
)
|
||||||
|
return i, err
|
||||||
|
}
|
650
auth/docs/docs.go
Normal file
650
auth/docs/docs.go
Normal file
@ -0,0 +1,650 @@
|
|||||||
|
// Package docs Code generated by swaggo/swag. DO NOT EDIT
|
||||||
|
package docs
|
||||||
|
|
||||||
|
import "github.com/swaggo/swag"
|
||||||
|
|
||||||
|
const docTemplate = `{
|
||||||
|
"schemes": {{ marshal .Schemes }},
|
||||||
|
"swagger": "2.0",
|
||||||
|
"info": {
|
||||||
|
"description": "{{escape .Description}}",
|
||||||
|
"title": "{{.Title}}",
|
||||||
|
"contact": {
|
||||||
|
"name": "Repository",
|
||||||
|
"url": "https://github.com/zoriya/kyoo"
|
||||||
|
},
|
||||||
|
"license": {
|
||||||
|
"name": "GPL-3.0",
|
||||||
|
"url": "https://www.gnu.org/licenses/gpl-3.0.en.html"
|
||||||
|
},
|
||||||
|
"version": "{{.Version}}"
|
||||||
|
},
|
||||||
|
"host": "{{.Host}}",
|
||||||
|
"basePath": "{{.BasePath}}",
|
||||||
|
"paths": {
|
||||||
|
"/info": {
|
||||||
|
"get": {
|
||||||
|
"description": "Get info like the public key used to sign the jwts.",
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"jwt"
|
||||||
|
],
|
||||||
|
"summary": "Info",
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/main.Info"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/jwt": {
|
||||||
|
"get": {
|
||||||
|
"security": [
|
||||||
|
{
|
||||||
|
"Token": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Convert a session token to a short lived JWT.",
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"jwt"
|
||||||
|
],
|
||||||
|
"summary": "Get JWT",
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/main.Jwt"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"401": {
|
||||||
|
"description": "Missing session token",
|
||||||
|
"schema": {}
|
||||||
|
},
|
||||||
|
"403": {
|
||||||
|
"description": "Invalid session token (or expired)",
|
||||||
|
"schema": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/sessions": {
|
||||||
|
"post": {
|
||||||
|
"description": "Login to your account and open a session",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"sessions"
|
||||||
|
],
|
||||||
|
"summary": "Login",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"description": "The device the created session will be used on",
|
||||||
|
"name": "device",
|
||||||
|
"in": "query"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "Account informations",
|
||||||
|
"name": "login",
|
||||||
|
"in": "body",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/main.LoginDto"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"201": {
|
||||||
|
"description": "Created",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/dbc.Session"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"400": {
|
||||||
|
"description": "Invalid login body",
|
||||||
|
"schema": {}
|
||||||
|
},
|
||||||
|
"403": {
|
||||||
|
"description": "Invalid password",
|
||||||
|
"schema": {}
|
||||||
|
},
|
||||||
|
"404": {
|
||||||
|
"description": "Account does not exists",
|
||||||
|
"schema": {}
|
||||||
|
},
|
||||||
|
"422": {
|
||||||
|
"description": "User does not have a password (registered via oidc, please login via oidc)",
|
||||||
|
"schema": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/sessions/current": {
|
||||||
|
"delete": {
|
||||||
|
"security": [
|
||||||
|
{
|
||||||
|
"Jwt": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Delete a session and logout",
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"sessions"
|
||||||
|
],
|
||||||
|
"summary": "Logout",
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/main.Session"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"400": {
|
||||||
|
"description": "Invalid session id",
|
||||||
|
"schema": {}
|
||||||
|
},
|
||||||
|
"401": {
|
||||||
|
"description": "Missing jwt token",
|
||||||
|
"schema": {}
|
||||||
|
},
|
||||||
|
"403": {
|
||||||
|
"description": "Invalid jwt token (or expired)",
|
||||||
|
"schema": {}
|
||||||
|
},
|
||||||
|
"404": {
|
||||||
|
"description": "Session not found with specified id (if not using the /current route)",
|
||||||
|
"schema": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/sessions/{id}": {
|
||||||
|
"delete": {
|
||||||
|
"security": [
|
||||||
|
{
|
||||||
|
"Jwt": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Delete a session and logout",
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"sessions"
|
||||||
|
],
|
||||||
|
"summary": "Logout",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"format": "uuid",
|
||||||
|
"description": "The id of the session to delete",
|
||||||
|
"name": "id",
|
||||||
|
"in": "path",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/main.Session"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"400": {
|
||||||
|
"description": "Invalid session id",
|
||||||
|
"schema": {}
|
||||||
|
},
|
||||||
|
"401": {
|
||||||
|
"description": "Missing jwt token",
|
||||||
|
"schema": {}
|
||||||
|
},
|
||||||
|
"403": {
|
||||||
|
"description": "Invalid jwt token (or expired)",
|
||||||
|
"schema": {}
|
||||||
|
},
|
||||||
|
"404": {
|
||||||
|
"description": "Session not found with specified id (if not using the /current route)",
|
||||||
|
"schema": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/users": {
|
||||||
|
"get": {
|
||||||
|
"security": [
|
||||||
|
{
|
||||||
|
"Jwt": [
|
||||||
|
"users.read"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "List all users existing in this instance.",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"users"
|
||||||
|
],
|
||||||
|
"summary": "List all users",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"format": "uuid",
|
||||||
|
"description": "used for pagination.",
|
||||||
|
"name": "afterId",
|
||||||
|
"in": "query"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/main.User"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"400": {
|
||||||
|
"description": "Invalid after id",
|
||||||
|
"schema": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"post": {
|
||||||
|
"description": "Register as a new user and open a session for it",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"users"
|
||||||
|
],
|
||||||
|
"summary": "Register",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"description": "The device the created session will be used on",
|
||||||
|
"name": "device",
|
||||||
|
"in": "query"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "Registration informations",
|
||||||
|
"name": "user",
|
||||||
|
"in": "body",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/main.RegisterDto"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"201": {
|
||||||
|
"description": "Created",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/dbc.Session"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"400": {
|
||||||
|
"description": "Invalid register body",
|
||||||
|
"schema": {}
|
||||||
|
},
|
||||||
|
"409": {
|
||||||
|
"description": "Duplicated email or username",
|
||||||
|
"schema": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/users/me": {
|
||||||
|
"get": {
|
||||||
|
"security": [
|
||||||
|
{
|
||||||
|
"Jwt": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Get informations about the currently connected user",
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"users"
|
||||||
|
],
|
||||||
|
"summary": "Get me",
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/main.User"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"401": {
|
||||||
|
"description": "Missing jwt token",
|
||||||
|
"schema": {}
|
||||||
|
},
|
||||||
|
"403": {
|
||||||
|
"description": "Invalid jwt token (or expired)",
|
||||||
|
"schema": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"delete": {
|
||||||
|
"security": [
|
||||||
|
{
|
||||||
|
"Jwt": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Delete your account and all your sessions",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"users"
|
||||||
|
],
|
||||||
|
"summary": "Delete self",
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/main.User"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/users/{id}": {
|
||||||
|
"get": {
|
||||||
|
"security": [
|
||||||
|
{
|
||||||
|
"Jwt": [
|
||||||
|
"users.read"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Get informations about a user from it's id",
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"users"
|
||||||
|
],
|
||||||
|
"summary": "Get user",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"format": "uuid",
|
||||||
|
"description": "The id of the user",
|
||||||
|
"name": "id",
|
||||||
|
"in": "path",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/main.User"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"404": {
|
||||||
|
"description": "No user with the given id found",
|
||||||
|
"schema": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"delete": {
|
||||||
|
"security": [
|
||||||
|
{
|
||||||
|
"Jwt": [
|
||||||
|
"users.delete"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Delete an account and all it's sessions.",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"users"
|
||||||
|
],
|
||||||
|
"summary": "Delete user",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"format": "uuid",
|
||||||
|
"description": "User id of the user to delete",
|
||||||
|
"name": "id",
|
||||||
|
"in": "path"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/main.User"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"404": {
|
||||||
|
"description": "Invalid user id",
|
||||||
|
"schema": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"definitions": {
|
||||||
|
"dbc.Session": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"createdDate": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"device": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"id": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastUsed": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"pk": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"token": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"userPk": {
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"main.Info": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"publicKey": {
|
||||||
|
"description": "The public key used to sign jwt tokens. It can be used by your services to check if the jwt is valid.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"main.Jwt": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"token": {
|
||||||
|
"description": "The jwt token you can use for all authorized call to either keibi or other services.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"main.LoginDto": {
|
||||||
|
"type": "object",
|
||||||
|
"required": [
|
||||||
|
"login",
|
||||||
|
"password"
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"login": {
|
||||||
|
"description": "Either the email or the username.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"password": {
|
||||||
|
"description": "Password of the account.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"main.OidcHandle": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"description": "Id of this oidc handle.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"profileUrl": {
|
||||||
|
"description": "Link to the profile of the user on the external service. Null if unknown or irrelevant.",
|
||||||
|
"type": "string",
|
||||||
|
"format": "url"
|
||||||
|
},
|
||||||
|
"username": {
|
||||||
|
"description": "Username of the user on the external service.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"main.RegisterDto": {
|
||||||
|
"type": "object",
|
||||||
|
"required": [
|
||||||
|
"email",
|
||||||
|
"password",
|
||||||
|
"username"
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"email": {
|
||||||
|
"description": "Valid email that could be used for forgotten password requests. Can be used for login.",
|
||||||
|
"type": "string",
|
||||||
|
"format": "email"
|
||||||
|
},
|
||||||
|
"password": {
|
||||||
|
"description": "Password to use.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"username": {
|
||||||
|
"description": "Username of the new account, can't contain @ signs. Can be used for login.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"main.Session": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"createdDate": {
|
||||||
|
"description": "When was the session first opened",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"device": {
|
||||||
|
"description": "Device that created the session.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"id": {
|
||||||
|
"description": "Unique id of this session. Can be used for calls to DELETE",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastUsed": {
|
||||||
|
"description": "Last date this session was used to access a service.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"main.User": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"claims": {
|
||||||
|
"description": "List of custom claims JWT created via get /jwt will have",
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"createdDate": {
|
||||||
|
"description": "When was this account created?",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"email": {
|
||||||
|
"description": "Email of the user. Can be used as a login.",
|
||||||
|
"type": "string",
|
||||||
|
"format": "email"
|
||||||
|
},
|
||||||
|
"id": {
|
||||||
|
"description": "Id of the user.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastSeen": {
|
||||||
|
"description": "When was the last time this account made any authorized request?",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"oidc": {
|
||||||
|
"description": "List of other login method available for this user. Access tokens wont be returned here.",
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": {
|
||||||
|
"$ref": "#/definitions/main.OidcHandle"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"username": {
|
||||||
|
"description": "Username of the user. Can be used as a login.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"securityDefinitions": {
|
||||||
|
"Jwt": {
|
||||||
|
"type": "apiKey",
|
||||||
|
"name": "Authorization",
|
||||||
|
"in": "header"
|
||||||
|
},
|
||||||
|
"Token": {
|
||||||
|
"type": "apiKey",
|
||||||
|
"name": "Authorization",
|
||||||
|
"in": "header"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}`
|
||||||
|
|
||||||
|
// SwaggerInfo holds exported Swagger Info so clients can modify it
|
||||||
|
var SwaggerInfo = &swag.Spec{
|
||||||
|
Version: "1.0",
|
||||||
|
Host: "kyoo.zoriya.dev",
|
||||||
|
BasePath: "/auth",
|
||||||
|
Schemes: []string{},
|
||||||
|
Title: "Keibi - Kyoo's auth",
|
||||||
|
Description: "Auth system made for kyoo.",
|
||||||
|
InfoInstanceName: "swagger",
|
||||||
|
SwaggerTemplate: docTemplate,
|
||||||
|
LeftDelim: "{{",
|
||||||
|
RightDelim: "}}",
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
swag.Register(SwaggerInfo.InstanceName(), SwaggerInfo)
|
||||||
|
}
|
626
auth/docs/swagger.json
Normal file
626
auth/docs/swagger.json
Normal file
@ -0,0 +1,626 @@
|
|||||||
|
{
|
||||||
|
"swagger": "2.0",
|
||||||
|
"info": {
|
||||||
|
"description": "Auth system made for kyoo.",
|
||||||
|
"title": "Keibi - Kyoo's auth",
|
||||||
|
"contact": {
|
||||||
|
"name": "Repository",
|
||||||
|
"url": "https://github.com/zoriya/kyoo"
|
||||||
|
},
|
||||||
|
"license": {
|
||||||
|
"name": "GPL-3.0",
|
||||||
|
"url": "https://www.gnu.org/licenses/gpl-3.0.en.html"
|
||||||
|
},
|
||||||
|
"version": "1.0"
|
||||||
|
},
|
||||||
|
"host": "kyoo.zoriya.dev",
|
||||||
|
"basePath": "/auth",
|
||||||
|
"paths": {
|
||||||
|
"/info": {
|
||||||
|
"get": {
|
||||||
|
"description": "Get info like the public key used to sign the jwts.",
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"jwt"
|
||||||
|
],
|
||||||
|
"summary": "Info",
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/main.Info"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/jwt": {
|
||||||
|
"get": {
|
||||||
|
"security": [
|
||||||
|
{
|
||||||
|
"Token": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Convert a session token to a short lived JWT.",
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"jwt"
|
||||||
|
],
|
||||||
|
"summary": "Get JWT",
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/main.Jwt"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"401": {
|
||||||
|
"description": "Missing session token",
|
||||||
|
"schema": {}
|
||||||
|
},
|
||||||
|
"403": {
|
||||||
|
"description": "Invalid session token (or expired)",
|
||||||
|
"schema": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/sessions": {
|
||||||
|
"post": {
|
||||||
|
"description": "Login to your account and open a session",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"sessions"
|
||||||
|
],
|
||||||
|
"summary": "Login",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"description": "The device the created session will be used on",
|
||||||
|
"name": "device",
|
||||||
|
"in": "query"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "Account informations",
|
||||||
|
"name": "login",
|
||||||
|
"in": "body",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/main.LoginDto"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"201": {
|
||||||
|
"description": "Created",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/dbc.Session"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"400": {
|
||||||
|
"description": "Invalid login body",
|
||||||
|
"schema": {}
|
||||||
|
},
|
||||||
|
"403": {
|
||||||
|
"description": "Invalid password",
|
||||||
|
"schema": {}
|
||||||
|
},
|
||||||
|
"404": {
|
||||||
|
"description": "Account does not exists",
|
||||||
|
"schema": {}
|
||||||
|
},
|
||||||
|
"422": {
|
||||||
|
"description": "User does not have a password (registered via oidc, please login via oidc)",
|
||||||
|
"schema": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/sessions/current": {
|
||||||
|
"delete": {
|
||||||
|
"security": [
|
||||||
|
{
|
||||||
|
"Jwt": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Delete a session and logout",
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"sessions"
|
||||||
|
],
|
||||||
|
"summary": "Logout",
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/main.Session"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"400": {
|
||||||
|
"description": "Invalid session id",
|
||||||
|
"schema": {}
|
||||||
|
},
|
||||||
|
"401": {
|
||||||
|
"description": "Missing jwt token",
|
||||||
|
"schema": {}
|
||||||
|
},
|
||||||
|
"403": {
|
||||||
|
"description": "Invalid jwt token (or expired)",
|
||||||
|
"schema": {}
|
||||||
|
},
|
||||||
|
"404": {
|
||||||
|
"description": "Session not found with specified id (if not using the /current route)",
|
||||||
|
"schema": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/sessions/{id}": {
|
||||||
|
"delete": {
|
||||||
|
"security": [
|
||||||
|
{
|
||||||
|
"Jwt": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Delete a session and logout",
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"sessions"
|
||||||
|
],
|
||||||
|
"summary": "Logout",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"format": "uuid",
|
||||||
|
"description": "The id of the session to delete",
|
||||||
|
"name": "id",
|
||||||
|
"in": "path",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/main.Session"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"400": {
|
||||||
|
"description": "Invalid session id",
|
||||||
|
"schema": {}
|
||||||
|
},
|
||||||
|
"401": {
|
||||||
|
"description": "Missing jwt token",
|
||||||
|
"schema": {}
|
||||||
|
},
|
||||||
|
"403": {
|
||||||
|
"description": "Invalid jwt token (or expired)",
|
||||||
|
"schema": {}
|
||||||
|
},
|
||||||
|
"404": {
|
||||||
|
"description": "Session not found with specified id (if not using the /current route)",
|
||||||
|
"schema": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/users": {
|
||||||
|
"get": {
|
||||||
|
"security": [
|
||||||
|
{
|
||||||
|
"Jwt": [
|
||||||
|
"users.read"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "List all users existing in this instance.",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"users"
|
||||||
|
],
|
||||||
|
"summary": "List all users",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"format": "uuid",
|
||||||
|
"description": "used for pagination.",
|
||||||
|
"name": "afterId",
|
||||||
|
"in": "query"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/main.User"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"400": {
|
||||||
|
"description": "Invalid after id",
|
||||||
|
"schema": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"post": {
|
||||||
|
"description": "Register as a new user and open a session for it",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"users"
|
||||||
|
],
|
||||||
|
"summary": "Register",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"description": "The device the created session will be used on",
|
||||||
|
"name": "device",
|
||||||
|
"in": "query"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "Registration informations",
|
||||||
|
"name": "user",
|
||||||
|
"in": "body",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/main.RegisterDto"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"201": {
|
||||||
|
"description": "Created",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/dbc.Session"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"400": {
|
||||||
|
"description": "Invalid register body",
|
||||||
|
"schema": {}
|
||||||
|
},
|
||||||
|
"409": {
|
||||||
|
"description": "Duplicated email or username",
|
||||||
|
"schema": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/users/me": {
|
||||||
|
"get": {
|
||||||
|
"security": [
|
||||||
|
{
|
||||||
|
"Jwt": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Get informations about the currently connected user",
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"users"
|
||||||
|
],
|
||||||
|
"summary": "Get me",
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/main.User"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"401": {
|
||||||
|
"description": "Missing jwt token",
|
||||||
|
"schema": {}
|
||||||
|
},
|
||||||
|
"403": {
|
||||||
|
"description": "Invalid jwt token (or expired)",
|
||||||
|
"schema": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"delete": {
|
||||||
|
"security": [
|
||||||
|
{
|
||||||
|
"Jwt": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Delete your account and all your sessions",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"users"
|
||||||
|
],
|
||||||
|
"summary": "Delete self",
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/main.User"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/users/{id}": {
|
||||||
|
"get": {
|
||||||
|
"security": [
|
||||||
|
{
|
||||||
|
"Jwt": [
|
||||||
|
"users.read"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Get informations about a user from it's id",
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"users"
|
||||||
|
],
|
||||||
|
"summary": "Get user",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"format": "uuid",
|
||||||
|
"description": "The id of the user",
|
||||||
|
"name": "id",
|
||||||
|
"in": "path",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/main.User"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"404": {
|
||||||
|
"description": "No user with the given id found",
|
||||||
|
"schema": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"delete": {
|
||||||
|
"security": [
|
||||||
|
{
|
||||||
|
"Jwt": [
|
||||||
|
"users.delete"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Delete an account and all it's sessions.",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"users"
|
||||||
|
],
|
||||||
|
"summary": "Delete user",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"format": "uuid",
|
||||||
|
"description": "User id of the user to delete",
|
||||||
|
"name": "id",
|
||||||
|
"in": "path"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/main.User"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"404": {
|
||||||
|
"description": "Invalid user id",
|
||||||
|
"schema": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"definitions": {
|
||||||
|
"dbc.Session": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"createdDate": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"device": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"id": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastUsed": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"pk": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"token": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"userPk": {
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"main.Info": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"publicKey": {
|
||||||
|
"description": "The public key used to sign jwt tokens. It can be used by your services to check if the jwt is valid.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"main.Jwt": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"token": {
|
||||||
|
"description": "The jwt token you can use for all authorized call to either keibi or other services.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"main.LoginDto": {
|
||||||
|
"type": "object",
|
||||||
|
"required": [
|
||||||
|
"login",
|
||||||
|
"password"
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"login": {
|
||||||
|
"description": "Either the email or the username.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"password": {
|
||||||
|
"description": "Password of the account.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"main.OidcHandle": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"description": "Id of this oidc handle.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"profileUrl": {
|
||||||
|
"description": "Link to the profile of the user on the external service. Null if unknown or irrelevant.",
|
||||||
|
"type": "string",
|
||||||
|
"format": "url"
|
||||||
|
},
|
||||||
|
"username": {
|
||||||
|
"description": "Username of the user on the external service.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"main.RegisterDto": {
|
||||||
|
"type": "object",
|
||||||
|
"required": [
|
||||||
|
"email",
|
||||||
|
"password",
|
||||||
|
"username"
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"email": {
|
||||||
|
"description": "Valid email that could be used for forgotten password requests. Can be used for login.",
|
||||||
|
"type": "string",
|
||||||
|
"format": "email"
|
||||||
|
},
|
||||||
|
"password": {
|
||||||
|
"description": "Password to use.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"username": {
|
||||||
|
"description": "Username of the new account, can't contain @ signs. Can be used for login.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"main.Session": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"createdDate": {
|
||||||
|
"description": "When was the session first opened",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"device": {
|
||||||
|
"description": "Device that created the session.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"id": {
|
||||||
|
"description": "Unique id of this session. Can be used for calls to DELETE",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastUsed": {
|
||||||
|
"description": "Last date this session was used to access a service.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"main.User": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"claims": {
|
||||||
|
"description": "List of custom claims JWT created via get /jwt will have",
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"createdDate": {
|
||||||
|
"description": "When was this account created?",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"email": {
|
||||||
|
"description": "Email of the user. Can be used as a login.",
|
||||||
|
"type": "string",
|
||||||
|
"format": "email"
|
||||||
|
},
|
||||||
|
"id": {
|
||||||
|
"description": "Id of the user.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastSeen": {
|
||||||
|
"description": "When was the last time this account made any authorized request?",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"oidc": {
|
||||||
|
"description": "List of other login method available for this user. Access tokens wont be returned here.",
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": {
|
||||||
|
"$ref": "#/definitions/main.OidcHandle"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"username": {
|
||||||
|
"description": "Username of the user. Can be used as a login.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"securityDefinitions": {
|
||||||
|
"Jwt": {
|
||||||
|
"type": "apiKey",
|
||||||
|
"name": "Authorization",
|
||||||
|
"in": "header"
|
||||||
|
},
|
||||||
|
"Token": {
|
||||||
|
"type": "apiKey",
|
||||||
|
"name": "Authorization",
|
||||||
|
"in": "header"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
426
auth/docs/swagger.yaml
Normal file
426
auth/docs/swagger.yaml
Normal file
@ -0,0 +1,426 @@
|
|||||||
|
basePath: /auth
|
||||||
|
definitions:
|
||||||
|
dbc.Session:
|
||||||
|
properties:
|
||||||
|
createdDate:
|
||||||
|
type: string
|
||||||
|
device:
|
||||||
|
type: string
|
||||||
|
id:
|
||||||
|
type: string
|
||||||
|
lastUsed:
|
||||||
|
type: string
|
||||||
|
pk:
|
||||||
|
type: integer
|
||||||
|
token:
|
||||||
|
type: string
|
||||||
|
userPk:
|
||||||
|
type: integer
|
||||||
|
type: object
|
||||||
|
main.Info:
|
||||||
|
properties:
|
||||||
|
publicKey:
|
||||||
|
description: The public key used to sign jwt tokens. It can be used by your
|
||||||
|
services to check if the jwt is valid.
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
main.Jwt:
|
||||||
|
properties:
|
||||||
|
token:
|
||||||
|
description: The jwt token you can use for all authorized call to either keibi
|
||||||
|
or other services.
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
main.LoginDto:
|
||||||
|
properties:
|
||||||
|
login:
|
||||||
|
description: Either the email or the username.
|
||||||
|
type: string
|
||||||
|
password:
|
||||||
|
description: Password of the account.
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- login
|
||||||
|
- password
|
||||||
|
type: object
|
||||||
|
main.OidcHandle:
|
||||||
|
properties:
|
||||||
|
id:
|
||||||
|
description: Id of this oidc handle.
|
||||||
|
type: string
|
||||||
|
profileUrl:
|
||||||
|
description: Link to the profile of the user on the external service. Null
|
||||||
|
if unknown or irrelevant.
|
||||||
|
format: url
|
||||||
|
type: string
|
||||||
|
username:
|
||||||
|
description: Username of the user on the external service.
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
main.RegisterDto:
|
||||||
|
properties:
|
||||||
|
email:
|
||||||
|
description: Valid email that could be used for forgotten password requests.
|
||||||
|
Can be used for login.
|
||||||
|
format: email
|
||||||
|
type: string
|
||||||
|
password:
|
||||||
|
description: Password to use.
|
||||||
|
type: string
|
||||||
|
username:
|
||||||
|
description: Username of the new account, can't contain @ signs. Can be used
|
||||||
|
for login.
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- email
|
||||||
|
- password
|
||||||
|
- username
|
||||||
|
type: object
|
||||||
|
main.Session:
|
||||||
|
properties:
|
||||||
|
createdDate:
|
||||||
|
description: When was the session first opened
|
||||||
|
type: string
|
||||||
|
device:
|
||||||
|
description: Device that created the session.
|
||||||
|
type: string
|
||||||
|
id:
|
||||||
|
description: Unique id of this session. Can be used for calls to DELETE
|
||||||
|
type: string
|
||||||
|
lastUsed:
|
||||||
|
description: Last date this session was used to access a service.
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
main.User:
|
||||||
|
properties:
|
||||||
|
claims:
|
||||||
|
additionalProperties:
|
||||||
|
type: string
|
||||||
|
description: List of custom claims JWT created via get /jwt will have
|
||||||
|
type: object
|
||||||
|
createdDate:
|
||||||
|
description: When was this account created?
|
||||||
|
type: string
|
||||||
|
email:
|
||||||
|
description: Email of the user. Can be used as a login.
|
||||||
|
format: email
|
||||||
|
type: string
|
||||||
|
id:
|
||||||
|
description: Id of the user.
|
||||||
|
type: string
|
||||||
|
lastSeen:
|
||||||
|
description: When was the last time this account made any authorized request?
|
||||||
|
type: string
|
||||||
|
oidc:
|
||||||
|
additionalProperties:
|
||||||
|
$ref: '#/definitions/main.OidcHandle'
|
||||||
|
description: List of other login method available for this user. Access tokens
|
||||||
|
wont be returned here.
|
||||||
|
type: object
|
||||||
|
username:
|
||||||
|
description: Username of the user. Can be used as a login.
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
host: kyoo.zoriya.dev
|
||||||
|
info:
|
||||||
|
contact:
|
||||||
|
name: Repository
|
||||||
|
url: https://github.com/zoriya/kyoo
|
||||||
|
description: Auth system made for kyoo.
|
||||||
|
license:
|
||||||
|
name: GPL-3.0
|
||||||
|
url: https://www.gnu.org/licenses/gpl-3.0.en.html
|
||||||
|
title: Keibi - Kyoo's auth
|
||||||
|
version: "1.0"
|
||||||
|
paths:
|
||||||
|
/info:
|
||||||
|
get:
|
||||||
|
description: Get info like the public key used to sign the jwts.
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: OK
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/main.Info'
|
||||||
|
summary: Info
|
||||||
|
tags:
|
||||||
|
- jwt
|
||||||
|
/jwt:
|
||||||
|
get:
|
||||||
|
description: Convert a session token to a short lived JWT.
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: OK
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/main.Jwt'
|
||||||
|
"401":
|
||||||
|
description: Missing session token
|
||||||
|
schema: {}
|
||||||
|
"403":
|
||||||
|
description: Invalid session token (or expired)
|
||||||
|
schema: {}
|
||||||
|
security:
|
||||||
|
- Token: []
|
||||||
|
summary: Get JWT
|
||||||
|
tags:
|
||||||
|
- jwt
|
||||||
|
/sessions:
|
||||||
|
post:
|
||||||
|
consumes:
|
||||||
|
- application/json
|
||||||
|
description: Login to your account and open a session
|
||||||
|
parameters:
|
||||||
|
- description: The device the created session will be used on
|
||||||
|
in: query
|
||||||
|
name: device
|
||||||
|
type: string
|
||||||
|
- description: Account informations
|
||||||
|
in: body
|
||||||
|
name: login
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/main.LoginDto'
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
responses:
|
||||||
|
"201":
|
||||||
|
description: Created
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/dbc.Session'
|
||||||
|
"400":
|
||||||
|
description: Invalid login body
|
||||||
|
schema: {}
|
||||||
|
"403":
|
||||||
|
description: Invalid password
|
||||||
|
schema: {}
|
||||||
|
"404":
|
||||||
|
description: Account does not exists
|
||||||
|
schema: {}
|
||||||
|
"422":
|
||||||
|
description: User does not have a password (registered via oidc, please
|
||||||
|
login via oidc)
|
||||||
|
schema: {}
|
||||||
|
summary: Login
|
||||||
|
tags:
|
||||||
|
- sessions
|
||||||
|
/sessions/{id}:
|
||||||
|
delete:
|
||||||
|
description: Delete a session and logout
|
||||||
|
parameters:
|
||||||
|
- description: The id of the session to delete
|
||||||
|
format: uuid
|
||||||
|
in: path
|
||||||
|
name: id
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: OK
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/main.Session'
|
||||||
|
"400":
|
||||||
|
description: Invalid session id
|
||||||
|
schema: {}
|
||||||
|
"401":
|
||||||
|
description: Missing jwt token
|
||||||
|
schema: {}
|
||||||
|
"403":
|
||||||
|
description: Invalid jwt token (or expired)
|
||||||
|
schema: {}
|
||||||
|
"404":
|
||||||
|
description: Session not found with specified id (if not using the /current
|
||||||
|
route)
|
||||||
|
schema: {}
|
||||||
|
security:
|
||||||
|
- Jwt: []
|
||||||
|
summary: Logout
|
||||||
|
tags:
|
||||||
|
- sessions
|
||||||
|
/sessions/current:
|
||||||
|
delete:
|
||||||
|
description: Delete a session and logout
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: OK
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/main.Session'
|
||||||
|
"400":
|
||||||
|
description: Invalid session id
|
||||||
|
schema: {}
|
||||||
|
"401":
|
||||||
|
description: Missing jwt token
|
||||||
|
schema: {}
|
||||||
|
"403":
|
||||||
|
description: Invalid jwt token (or expired)
|
||||||
|
schema: {}
|
||||||
|
"404":
|
||||||
|
description: Session not found with specified id (if not using the /current
|
||||||
|
route)
|
||||||
|
schema: {}
|
||||||
|
security:
|
||||||
|
- Jwt: []
|
||||||
|
summary: Logout
|
||||||
|
tags:
|
||||||
|
- sessions
|
||||||
|
/users:
|
||||||
|
get:
|
||||||
|
consumes:
|
||||||
|
- application/json
|
||||||
|
description: List all users existing in this instance.
|
||||||
|
parameters:
|
||||||
|
- description: used for pagination.
|
||||||
|
format: uuid
|
||||||
|
in: query
|
||||||
|
name: afterId
|
||||||
|
type: string
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: OK
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/main.User'
|
||||||
|
"400":
|
||||||
|
description: Invalid after id
|
||||||
|
schema: {}
|
||||||
|
security:
|
||||||
|
- Jwt:
|
||||||
|
- users.read
|
||||||
|
summary: List all users
|
||||||
|
tags:
|
||||||
|
- users
|
||||||
|
post:
|
||||||
|
consumes:
|
||||||
|
- application/json
|
||||||
|
description: Register as a new user and open a session for it
|
||||||
|
parameters:
|
||||||
|
- description: The device the created session will be used on
|
||||||
|
in: query
|
||||||
|
name: device
|
||||||
|
type: string
|
||||||
|
- description: Registration informations
|
||||||
|
in: body
|
||||||
|
name: user
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/main.RegisterDto'
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
responses:
|
||||||
|
"201":
|
||||||
|
description: Created
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/dbc.Session'
|
||||||
|
"400":
|
||||||
|
description: Invalid register body
|
||||||
|
schema: {}
|
||||||
|
"409":
|
||||||
|
description: Duplicated email or username
|
||||||
|
schema: {}
|
||||||
|
summary: Register
|
||||||
|
tags:
|
||||||
|
- users
|
||||||
|
/users/{id}:
|
||||||
|
delete:
|
||||||
|
consumes:
|
||||||
|
- application/json
|
||||||
|
description: Delete an account and all it's sessions.
|
||||||
|
parameters:
|
||||||
|
- description: User id of the user to delete
|
||||||
|
format: uuid
|
||||||
|
in: path
|
||||||
|
name: id
|
||||||
|
type: string
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: OK
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/main.User'
|
||||||
|
"404":
|
||||||
|
description: Invalid user id
|
||||||
|
schema: {}
|
||||||
|
security:
|
||||||
|
- Jwt:
|
||||||
|
- users.delete
|
||||||
|
summary: Delete user
|
||||||
|
tags:
|
||||||
|
- users
|
||||||
|
get:
|
||||||
|
description: Get informations about a user from it's id
|
||||||
|
parameters:
|
||||||
|
- description: The id of the user
|
||||||
|
format: uuid
|
||||||
|
in: path
|
||||||
|
name: id
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: OK
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/main.User'
|
||||||
|
"404":
|
||||||
|
description: No user with the given id found
|
||||||
|
schema: {}
|
||||||
|
security:
|
||||||
|
- Jwt:
|
||||||
|
- users.read
|
||||||
|
summary: Get user
|
||||||
|
tags:
|
||||||
|
- users
|
||||||
|
/users/me:
|
||||||
|
delete:
|
||||||
|
consumes:
|
||||||
|
- application/json
|
||||||
|
description: Delete your account and all your sessions
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: OK
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/main.User'
|
||||||
|
security:
|
||||||
|
- Jwt: []
|
||||||
|
summary: Delete self
|
||||||
|
tags:
|
||||||
|
- users
|
||||||
|
get:
|
||||||
|
description: Get informations about the currently connected user
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: OK
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/main.User'
|
||||||
|
"401":
|
||||||
|
description: Missing jwt token
|
||||||
|
schema: {}
|
||||||
|
"403":
|
||||||
|
description: Invalid jwt token (or expired)
|
||||||
|
schema: {}
|
||||||
|
security:
|
||||||
|
- Jwt: []
|
||||||
|
summary: Get me
|
||||||
|
tags:
|
||||||
|
- users
|
||||||
|
securityDefinitions:
|
||||||
|
Jwt:
|
||||||
|
in: header
|
||||||
|
name: Authorization
|
||||||
|
type: apiKey
|
||||||
|
Token:
|
||||||
|
in: header
|
||||||
|
name: Authorization
|
||||||
|
type: apiKey
|
||||||
|
swagger: "2.0"
|
Loading…
x
Reference in New Issue
Block a user