mirror of
https://github.com/TheRealOwenRees/chess-scribe-website.git
synced 2026-09-19 11:03:52 +00:00
Compare commits
9
Commits
1245bf74c2
...
51bfab5a64
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
51bfab5a64
|
||
|
|
2856aaf0d8
|
||
|
|
0784d77684
|
||
|
|
266f2ea6dc
|
||
|
|
487a1cbe91
|
||
|
|
172925c18e
|
||
|
|
f0c6845422
|
||
|
|
629d1f5f69
|
||
|
|
5735563024 |
@@ -0,0 +1,8 @@
|
||||
node_modules
|
||||
.output
|
||||
.git
|
||||
.gitignore
|
||||
.env
|
||||
.env.*
|
||||
!.env.example
|
||||
data
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
VITE_API_BASE_URL=
|
||||
VITE_MATOMO_URL=
|
||||
VITE_MATOMO_SITE_ID=
|
||||
VITE_MAINTENANCE_MODE= # nothing = false, anything else = true
|
||||
VITE_MAINTENANCE_MODE="false" # use "true" or "false"
|
||||
VITE_MAINTENANCE_MODE_MESSAGE="ChessScribe is currently undergoing maintenance. Some features may be unavailable."
|
||||
|
||||
DISCORD_CONTACT_WEBHOOK=
|
||||
|
||||
@@ -30,13 +30,14 @@ jobs:
|
||||
context: .
|
||||
push: true
|
||||
tags: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
||||
cache-from: type=gha
|
||||
cache-to: type=gha,mode=max
|
||||
# cache-from: type=gha
|
||||
# cache-to: type=gha,mode=max
|
||||
no-cache: true
|
||||
build-args: |
|
||||
VITE_API_BASE_URL=https://api.chess-scribe.org/api/v1
|
||||
VITE_MATOMO_URL=https://analytics.owenrees.eu
|
||||
VITE_MATOMO_SITE_ID="3"
|
||||
VITE_MAINTENANCE_MODE=
|
||||
VITE_MAINTENANCE_MODE=false
|
||||
VITE_MAINTENANCE_MODE_MESSAGE="ChessScribe is currently undergoing maintenance. Some features may be unavailable."
|
||||
|
||||
deploy:
|
||||
@@ -56,4 +57,4 @@ jobs:
|
||||
cd /home/${{ secrets.USERNAME }}
|
||||
echo "${{ secrets.GHCR_SECRET }}" | docker login ghcr.io -u ${{ env.GH_USER }} --password-stdin
|
||||
docker pull ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
||||
docker compose up -d
|
||||
docker compose up -d --force-recreate --remove-orphans
|
||||
|
||||
@@ -1,17 +1,16 @@
|
||||
import { Link } from "@tanstack/react-router";
|
||||
import { Image } from "@unpic/react";
|
||||
import { z } from "zod";
|
||||
import MaintenanceModeBanner from "#/components/MaintenanceModeBanner.tsx";
|
||||
import { env } from "#/env.ts";
|
||||
import logo from "@/assets/images/logo.svg?url";
|
||||
|
||||
const DEFAULT_MAINTENANCE_MESSAGE = "Maintenance Mode";
|
||||
|
||||
export default function Header() {
|
||||
const maintenanceModeMessage = env.VITE_MAINTENANCE_MODE
|
||||
? z
|
||||
.string()
|
||||
.transform((value) => (value.trim() === "" ? null : value))
|
||||
.parse(env.VITE_MAINTENANCE_MODE_MESSAGE)
|
||||
: null;
|
||||
const maintenanceModeMessage =
|
||||
env.VITE_MAINTENANCE_MODE ?
|
||||
env.VITE_MAINTENANCE_MODE_MESSAGE?.trim() || DEFAULT_MAINTENANCE_MESSAGE
|
||||
: null;
|
||||
|
||||
return (
|
||||
<header>
|
||||
|
||||
+13
-4
@@ -4,14 +4,23 @@ const clientSchema = z.object({
|
||||
VITE_API_BASE_URL: z.url("Invalid API Base URL format"),
|
||||
VITE_MATOMO_URL: z.url("Invalid URL format"),
|
||||
VITE_MATOMO_SITE_ID: z.string("Invalid Site ID"),
|
||||
VITE_MAINTENANCE_MODE: z.string("Invalid Maintenance Mode"),
|
||||
VITE_MAINTENANCE_MODE: z
|
||||
.enum(
|
||||
["true", "false"],
|
||||
'Invalid Maintenance Mode (must be "true" or "false")',
|
||||
)
|
||||
.transform((v) => v === "true"),
|
||||
VITE_MAINTENANCE_MODE_MESSAGE: z.string().optional(),
|
||||
});
|
||||
|
||||
const serverSchema = z.object({
|
||||
DISCORD_CONTACT_WEBHOOK: z.string("Invalid Discord Contact Webhook URL"),
|
||||
DISCORD_ERROR_LOG_WEBHOOK: z.string("Invalid Discord Error Log Webhook URL"),
|
||||
LICHESS_CLIENT_ID: z.string("Invalid Lichess Client ID"),
|
||||
DISCORD_CONTACT_WEBHOOK: z
|
||||
.string("Invalid Discord Contact Webhook URL")
|
||||
.optional(),
|
||||
DISCORD_ERROR_LOG_WEBHOOK: z
|
||||
.string("Invalid Discord Error Log Webhook URL")
|
||||
.optional(),
|
||||
LICHESS_CLIENT_ID: z.string("Invalid Lichess Client ID").optional(),
|
||||
});
|
||||
|
||||
const fullSchema = z.object({
|
||||
|
||||
@@ -7,6 +7,10 @@ export const sendToDiscord = createServerFn({ method: "POST" })
|
||||
data,
|
||||
)
|
||||
.handler(async ({ data }) => {
|
||||
if (!env.DISCORD_CONTACT_WEBHOOK) {
|
||||
return { ok: false, error: "Contact form is not configured" };
|
||||
}
|
||||
|
||||
const response = await fetch(env.DISCORD_CONTACT_WEBHOOK, {
|
||||
method: "POST",
|
||||
headers: {
|
||||
|
||||
@@ -18,10 +18,14 @@ import {
|
||||
const createVerifier = () => base64UrlEncode(randomBytes(32));
|
||||
const createChallenge = (verifier: string) => base64UrlEncode(sha256(verifier));
|
||||
|
||||
const getRedirectUri = () =>
|
||||
process.env.NODE_ENV === "production"
|
||||
const getRedirectUri = () => {
|
||||
if (process.env.NODE_ENV === "production" && !env.LICHESS_CLIENT_ID) {
|
||||
throw new Error("LICHESS_CLIENT_ID is not configured");
|
||||
}
|
||||
return process.env.NODE_ENV === "production"
|
||||
? `https://${env.LICHESS_CLIENT_ID}/callback`
|
||||
: "http://localhost:3000/callback";
|
||||
};
|
||||
|
||||
export const getSession = createServerFn({ method: "GET" }).handler(
|
||||
async () => {
|
||||
|
||||
@@ -18,6 +18,7 @@ const config = defineConfig({
|
||||
prerender: {
|
||||
enabled: true,
|
||||
crawlLinks: true,
|
||||
failOnError: true,
|
||||
},
|
||||
pages: [
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user