Compare commits
3 Commits
2b40e4e922
...
e2ae03f2a6
Author | SHA1 | Date | |
---|---|---|---|
e2ae03f2a6 | |||
9319564dea | |||
83e3e5a2e9 |
@ -1,6 +1,7 @@
|
|||||||
|
|
||||||
GUARD_PORT=3001
|
GUARD_PORT=3001
|
||||||
GUARD_HOST="127.0.0.1"
|
GUARD_HOST="127.0.0.1"
|
||||||
|
GUARD_URI="http://localhost:3001"
|
||||||
|
|
||||||
GUARD_DB_URL="postgres://<user>:<user>@<host>:<port>/<db>?sslmode=disable"
|
GUARD_DB_URL="postgres://<user>:<user>@<host>:<port>/<db>?sslmode=disable"
|
||||||
|
|
||||||
@ -11,7 +12,6 @@ GUARD_ADMIN_PASSWORD="secret"
|
|||||||
GUARD_JWT_PRIVATE="rsa"
|
GUARD_JWT_PRIVATE="rsa"
|
||||||
GUARD_JWT_PUBLIC="rsa"
|
GUARD_JWT_PUBLIC="rsa"
|
||||||
GUARD_JWT_KID="my-rsa-key-1"
|
GUARD_JWT_KID="my-rsa-key-1"
|
||||||
GUARD_JWT_ISSUER="http://localhost:3001"
|
|
||||||
|
|
||||||
GUARD_MINIO_ENDPOINT="localhost:9000"
|
GUARD_MINIO_ENDPOINT="localhost:9000"
|
||||||
GUARD_MINIO_ACCESS_KEY=""
|
GUARD_MINIO_ACCESS_KEY=""
|
||||||
@ -20,5 +20,3 @@ GUARD_MINIO_SECRET_KEY=""
|
|||||||
GOOSE_DRIVER="postgres"
|
GOOSE_DRIVER="postgres"
|
||||||
GOOSE_DBSTRING=$DATABASE_URL
|
GOOSE_DBSTRING=$DATABASE_URL
|
||||||
GOOSE_MIGRATION_DIR="./migrations"
|
GOOSE_MIGRATION_DIR="./migrations"
|
||||||
|
|
||||||
|
|
||||||
|
@ -33,6 +33,7 @@ COPY --from=frontend-builder /app/dist ./dist
|
|||||||
ENV ENV=production \
|
ENV ENV=production \
|
||||||
GUARD_PORT=3001 \
|
GUARD_PORT=3001 \
|
||||||
GUARD_HOST="127.0.0.1" \
|
GUARD_HOST="127.0.0.1" \
|
||||||
|
GUARD_URI="http://localhost:3001" \
|
||||||
GUARD_DB_URL="postgres://user:user@localhost:5432/db?sslmode=disable" \
|
GUARD_DB_URL="postgres://user:user@localhost:5432/db?sslmode=disable" \
|
||||||
GUARD_ADMIN_NAME="admin" \
|
GUARD_ADMIN_NAME="admin" \
|
||||||
GUARD_ADMIN_EMAIL="admin@test.net" \
|
GUARD_ADMIN_EMAIL="admin@test.net" \
|
||||||
@ -40,7 +41,6 @@ ENV ENV=production \
|
|||||||
GUARD_JWT_PRIVATE="rsa" \
|
GUARD_JWT_PRIVATE="rsa" \
|
||||||
GUARD_JWT_PUBLIC="rsa" \
|
GUARD_JWT_PUBLIC="rsa" \
|
||||||
GUARD_JWT_KID="my-rsa-key-1" \
|
GUARD_JWT_KID="my-rsa-key-1" \
|
||||||
GUARD_JWT_ISSUER="http://localhost:3001" \
|
|
||||||
GUARD_MINIO_ENDPOINT="localhost:9000" \
|
GUARD_MINIO_ENDPOINT="localhost:9000" \
|
||||||
GUARD_MINIO_ACCESS_KEY="" \
|
GUARD_MINIO_ACCESS_KEY="" \
|
||||||
GUARD_MINIO_SECRET_KEY="" \
|
GUARD_MINIO_SECRET_KEY="" \
|
||||||
|
@ -29,7 +29,7 @@ func (h *AuthHandler) signTokens(user *repository.User) (string, string, error)
|
|||||||
UserEmail: user.Email,
|
UserEmail: user.Email,
|
||||||
IsAdmin: user.IsAdmin,
|
IsAdmin: user.IsAdmin,
|
||||||
RegisteredClaims: jwt.RegisteredClaims{
|
RegisteredClaims: jwt.RegisteredClaims{
|
||||||
Issuer: h.cfg.Jwt.Issuer,
|
Issuer: h.cfg.Uri,
|
||||||
Subject: user.ID.String(),
|
Subject: user.ID.String(),
|
||||||
IssuedAt: jwt.NewNumericDate(time.Now()),
|
IssuedAt: jwt.NewNumericDate(time.Now()),
|
||||||
ExpiresAt: jwt.NewNumericDate(time.Now().Add(15 * time.Minute)),
|
ExpiresAt: jwt.NewNumericDate(time.Now().Add(15 * time.Minute)),
|
||||||
@ -45,7 +45,7 @@ func (h *AuthHandler) signTokens(user *repository.User) (string, string, error)
|
|||||||
UserEmail: user.Email,
|
UserEmail: user.Email,
|
||||||
IsAdmin: user.IsAdmin,
|
IsAdmin: user.IsAdmin,
|
||||||
RegisteredClaims: jwt.RegisteredClaims{
|
RegisteredClaims: jwt.RegisteredClaims{
|
||||||
Issuer: h.cfg.Jwt.Issuer,
|
Issuer: h.cfg.Uri,
|
||||||
Subject: user.ID.String(),
|
Subject: user.ID.String(),
|
||||||
IssuedAt: jwt.NewNumericDate(time.Now()),
|
IssuedAt: jwt.NewNumericDate(time.Now()),
|
||||||
ExpiresAt: jwt.NewNumericDate(time.Now().Add(30 * 24 * time.Hour)),
|
ExpiresAt: jwt.NewNumericDate(time.Now().Add(30 * 24 * time.Hour)),
|
||||||
|
@ -4,5 +4,4 @@ type JwtConfig struct {
|
|||||||
PrivateKey string `env:"GUARD_JWT_PRIVATE" required:"true"`
|
PrivateKey string `env:"GUARD_JWT_PRIVATE" required:"true"`
|
||||||
PublicKey string `env:"GUARD_JWT_PUBLIC" required:"true"`
|
PublicKey string `env:"GUARD_JWT_PUBLIC" required:"true"`
|
||||||
KID string `env:"GUARD_JWT_KID" default:"guard-rsa"`
|
KID string `env:"GUARD_JWT_KID" default:"guard-rsa"`
|
||||||
Issuer string `env:"GUARD_JWT_ISSUER" required:"true"`
|
|
||||||
}
|
}
|
||||||
|
@ -12,6 +12,7 @@ import (
|
|||||||
type AppConfig struct {
|
type AppConfig struct {
|
||||||
Port string `env:"GUARD_PORT" default:"3001"`
|
Port string `env:"GUARD_PORT" default:"3001"`
|
||||||
Host string `env:"GUARD_HOST" default:"127.0.0.1"`
|
Host string `env:"GUARD_HOST" default:"127.0.0.1"`
|
||||||
|
Uri string `env:"GUARD_URI" default:"http://127.0.0.1:3001"`
|
||||||
DatabaseURL string `env:"GUARD_DB_URL" required:"true"`
|
DatabaseURL string `env:"GUARD_DB_URL" required:"true"`
|
||||||
Admin AdminConfig
|
Admin AdminConfig
|
||||||
Jwt JwtConfig
|
Jwt JwtConfig
|
||||||
|
@ -23,11 +23,11 @@ func (h *OAuthHandler) OpenIdConfiguration(w http.ResponseWriter, r *http.Reques
|
|||||||
w.Header().Set("Content-Type", "application/json")
|
w.Header().Set("Content-Type", "application/json")
|
||||||
|
|
||||||
if err := encoder.Encode(Response{
|
if err := encoder.Encode(Response{
|
||||||
TokenEndpoint: h.cfg.Jwt.Issuer + "/api/v1/oauth/token",
|
TokenEndpoint: h.cfg.Uri + "/api/v1/oauth/token",
|
||||||
AuthorizationEndpoint: h.cfg.Jwt.Issuer + "/api/v1/oauth/authorize",
|
AuthorizationEndpoint: h.cfg.Uri + "/api/v1/oauth/authorize",
|
||||||
JwksURI: h.cfg.Jwt.Issuer + "/.well-known/jwks.json",
|
JwksURI: h.cfg.Uri + "/.well-known/jwks.json",
|
||||||
Issuer: h.cfg.Jwt.Issuer,
|
Issuer: h.cfg.Uri,
|
||||||
EndSessionEndpoint: h.cfg.Jwt.Issuer + "/api/v1/oauth/logout",
|
EndSessionEndpoint: h.cfg.Uri + "/api/v1/oauth/logout",
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
web.Error(w, "failed to encode response", http.StatusInternalServerError)
|
web.Error(w, "failed to encode response", http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
|
@ -91,7 +91,7 @@ func (h *OAuthHandler) tokenEndpoint(w http.ResponseWriter, r *http.Request) {
|
|||||||
Nonce: nonce,
|
Nonce: nonce,
|
||||||
Roles: roles,
|
Roles: roles,
|
||||||
RegisteredClaims: jwt.RegisteredClaims{
|
RegisteredClaims: jwt.RegisteredClaims{
|
||||||
Issuer: h.cfg.Jwt.Issuer,
|
Issuer: h.cfg.Uri,
|
||||||
// TODO: use dedicated API id that is in local DB and bind to user there
|
// TODO: use dedicated API id that is in local DB and bind to user there
|
||||||
Subject: user.ID.String(),
|
Subject: user.ID.String(),
|
||||||
Audience: jwt.ClaimStrings{clientId},
|
Audience: jwt.ClaimStrings{clientId},
|
||||||
|
@ -170,8 +170,10 @@ func (h *UserHandler) uploadAvatar(w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
imgURI := fmt.Sprintf("%s/api/v1/avatar/%s", h.cfg.Uri, uploadInfo.Key)
|
||||||
|
|
||||||
if err := h.repo.UpdateProfilePicture(r.Context(), repository.UpdateProfilePictureParams{
|
if err := h.repo.UpdateProfilePicture(r.Context(), repository.UpdateProfilePictureParams{
|
||||||
ProfilePicture: &uploadInfo.Key,
|
ProfilePicture: &imgURI,
|
||||||
ID: user.ID,
|
ID: user.ID,
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
web.Error(w, "failed to update profile picture", http.StatusInternalServerError)
|
web.Error(w, "failed to update profile picture", http.StatusInternalServerError)
|
||||||
|
@ -22,7 +22,7 @@ const Avatar: FC<AvatarProps> = ({ iconSize = 32, className, avatarId }) => {
|
|||||||
>
|
>
|
||||||
{avatar ? (
|
{avatar ? (
|
||||||
<img
|
<img
|
||||||
src={`/api/v1/avatar/${avatar?.toString()}`}
|
src={avatar}
|
||||||
className="w-full h-full flex-1 object-cover"
|
className="w-full h-full flex-1 object-cover"
|
||||||
alt="profile"
|
alt="profile"
|
||||||
/>
|
/>
|
||||||
|
Reference in New Issue
Block a user