Compare commits

..

1 Commits

Author SHA1 Message Date
Stavros 3ba5056bb3 New translations en.json (Serbian (Cyrillic)) 2026-02-25 21:22:44 +01:00
14 changed files with 17 additions and 83 deletions
+1 -1
View File
@@ -1,5 +1,5 @@
# Site builder
FROM oven/bun:1.3.10-alpine AS frontend-builder
FROM oven/bun:1.3.9-alpine AS frontend-builder
WORKDIR /frontend
+1 -1
View File
@@ -1,5 +1,5 @@
# Site builder
FROM oven/bun:1.3.10-alpine AS frontend-builder
FROM oven/bun:1.3.9-alpine AS frontend-builder
WORKDIR /frontend
-43
View File
@@ -1,43 +0,0 @@
package main
import (
"errors"
"fmt"
"regexp"
"github.com/google/uuid"
"github.com/steveiliop56/tinyauth/internal/utils"
"github.com/traefik/paerser/cli"
)
func createOidcClientCmd() *cli.Command {
return &cli.Command{
Name: "create",
Description: "Create a new OIDC Client",
Configuration: nil,
Resources: nil,
AllowArg: true,
Run: func(args []string) error {
if len(args) == 0 {
return errors.New("client name is required. use tinyauth oidc create <name>")
}
clientName := args[0]
match, err := regexp.MatchString("^[a-zA-Z0-9-]*$", clientName)
if !match || err != nil {
return errors.New("client name can only contain alphanumeric characters and hyphens")
}
uuid := uuid.New()
clientId := uuid.String()
clientSecret := "ta-" + utils.GenerateString(61)
fmt.Printf("Client Name: %s\n", clientName)
fmt.Printf("Client ID: %s\n", clientId)
fmt.Printf("Client Secret: %s\n", clientSecret)
return nil
},
}
}
+3 -20
View File
@@ -23,7 +23,7 @@ func main() {
cmdTinyauth := &cli.Command{
Name: "tinyauth",
Description: "The simplest way to protect your apps with a login screen",
Description: "The simplest way to protect your apps with a login screen.",
Configuration: tConfig,
Resources: loaders,
Run: func(_ []string) error {
@@ -33,17 +33,12 @@ func main() {
cmdUser := &cli.Command{
Name: "user",
Description: "Manage Tinyauth users",
Description: "Utilities for creating and verifying Tinyauth users.",
}
cmdTotp := &cli.Command{
Name: "totp",
Description: "Manage Tinyauth TOTP users",
}
cmdOidc := &cli.Command{
Name: "oidc",
Description: "Manage Tinyauth OIDC clients",
Description: "Utilities for creating Tinyauth TOTP users.",
}
err := cmdTinyauth.AddCommand(versionCmd())
@@ -76,12 +71,6 @@ func main() {
log.Fatal().Err(err).Msg("Failed to add create command")
}
err = cmdOidc.AddCommand(createOidcClientCmd())
if err != nil {
log.Fatal().Err(err).Msg("Failed to add create command")
}
err = cmdTinyauth.AddCommand(cmdUser)
if err != nil {
@@ -94,12 +83,6 @@ func main() {
log.Fatal().Err(err).Msg("Failed to add totp command")
}
err = cmdTinyauth.AddCommand(cmdOidc)
if err != nil {
log.Fatal().Err(err).Msg("Failed to add oidc command")
}
err = cli.Execute(cmdTinyauth)
if err != nil {
@@ -40,7 +40,7 @@ func verifyUserCmd() *cli.Command {
return &cli.Command{
Name: "verify",
Description: "Verify a user is set up correctly",
Description: "Verify a user is set up correctly.",
Configuration: tCfg,
Resources: loaders,
Run: func(_ []string) error {
+1 -1
View File
@@ -11,7 +11,7 @@ import (
func versionCmd() *cli.Command {
return &cli.Command{
Name: "version",
Description: "Print the version number of Tinyauth",
Description: "Print the version number of Tinyauth.",
Configuration: nil,
Resources: nil,
Run: func(_ []string) error {
+2 -2
View File
@@ -36,7 +36,7 @@
"devDependencies": {
"@eslint/js": "^10.0.1",
"@tanstack/eslint-plugin-query": "^5.91.4",
"@types/node": "^25.3.1",
"@types/node": "^25.3.0",
"@types/react": "^19.2.14",
"@types/react-dom": "^19.2.3",
"@vitejs/plugin-react": "^5.1.4",
@@ -360,7 +360,7 @@
"@types/ms": ["@types/ms@2.1.0", "", {}, "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA=="],
"@types/node": ["@types/node@25.3.1", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-hj9YIJimBCipHVfHKRMnvmHg+wfhKc0o4mTtXh9pKBjC8TLJzz0nzGmLi5UJsYAUgSvXFHgb0V2oY10DUFtImw=="],
"@types/node": ["@types/node@25.3.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-4K3bqJpXpqfg2XKGK9bpDTc6xO/xoUP/RBWS7AtRMug6zZFaRekiLzjVtAoZMquxoAbzBvy5nxQ7veS5eYzf8A=="],
"@types/react": ["@types/react@19.2.14", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w=="],
+1 -1
View File
@@ -42,7 +42,7 @@
"devDependencies": {
"@eslint/js": "^10.0.1",
"@tanstack/eslint-plugin-query": "^5.91.4",
"@types/node": "^25.3.1",
"@types/node": "^25.3.0",
"@types/react": "^19.2.14",
"@types/react-dom": "^19.2.3",
"@vitejs/plugin-react": "^5.1.4",
+1 -1
View File
@@ -54,7 +54,7 @@
"errorSubtitleInfo": "Појавила се следећа грешка током обраде вашег захтева:",
"errorSubtitle": "Појавила се грешка при покушају извршавања ове радње. Молим вас проверите конзолу за додатне информације.",
"forgotPasswordMessage": "Можете поништити вашу лозинку променом `USERS` променљиве окружења.",
"fieldRequired": "Ово поље је неопходно",
"fieldRequired": "Ово поље је наопходно",
"invalidInput": "Неисправан унос",
"domainWarningTitle": "Неисправан домен",
"domainWarningSubtitle": "Ова инстанца је подешена да јој се приступа са <code>{{appUrl}}</code>, али се користи <code>{{currentUrl}}</code>. Ако наставите, можете искусити проблеме са аутентификацијом.",
+2 -1
View File
@@ -1,6 +1,7 @@
package controller
import (
"crypto/rand"
"errors"
"fmt"
"net/http"
@@ -144,7 +145,7 @@ func (controller *OIDCController) Authorize(c *gin.Context) {
// WARNING: Since Tinyauth is stateless, we cannot have a sub that never changes. We will just create a uuid out of the username and client name which remains stable, but if username or client name changes then sub changes too.
sub := utils.GenerateUUID(fmt.Sprintf("%s:%s", userContext.Username, client.ID))
code := utils.GenerateString(32)
code := rand.Text()
// Before storing the code, delete old session
err = controller.oidc.DeleteOldSession(c, sub)
+4 -4
View File
@@ -403,8 +403,8 @@ func (service *OIDCService) GenerateAccessToken(c *gin.Context, client config.OI
return TokenResponse{}, err
}
accessToken := utils.GenerateString(32)
refreshToken := utils.GenerateString(32)
accessToken := rand.Text()
refreshToken := rand.Text()
tokenExpiresAt := time.Now().Add(time.Duration(service.config.SessionExpiry) * time.Second).Unix()
@@ -464,8 +464,8 @@ func (service *OIDCService) RefreshAccessToken(c *gin.Context, refreshToken stri
return TokenResponse{}, err
}
accessToken := utils.GenerateString(32)
newRefreshToken := utils.GenerateString(32)
accessToken := rand.Text()
newRefreshToken := rand.Text()
tokenExpiresAt := time.Now().Add(time.Duration(service.config.SessionExpiry) * time.Second).Unix()
refrshTokenExpiresAt := time.Now().Add(time.Duration(service.config.SessionExpiry*2) * time.Second).Unix()
-7
View File
@@ -1,7 +1,6 @@
package utils
import (
"crypto/rand"
"encoding/base64"
"errors"
"net"
@@ -106,9 +105,3 @@ func GenerateUUID(str string) string {
uuid := uuid.NewSHA1(uuid.NameSpaceURL, []byte(str))
return uuid.String()
}
func GenerateString(length int) string {
src := make([]byte, length)
rand.Read(src)
return base64.RawURLEncoding.EncodeToString(src)[:length]
}