From afe6c409013a1e8881f2532b0b1b1640362d206c Mon Sep 17 00:00:00 2001 From: mac Date: Wed, 15 Jul 2026 11:38:27 +0800 Subject: [PATCH] fix(auth): move nginx config to k8s --- authserver/.gitignore | 2 +- authserver/cmd/server/main.go | 37 +++ authserver/internal/handler/saml.go | 8 +- authserver/k8s/nginx.yaml | 148 +++++++++++ authserver/web/.dockerignore | 4 - authserver/web/Dockerfile | 16 -- authserver/web/index.html | 12 - authserver/web/nginx.conf | 90 ------- authserver/web/package-lock.json | 379 ---------------------------- authserver/web/package.json | 20 -- authserver/web/src/App.vue | 219 ---------------- authserver/web/src/main.js | 5 - authserver/web/src/style.css | 206 --------------- authserver/web/vite.config.js | 15 -- 14 files changed, 190 insertions(+), 971 deletions(-) create mode 100644 authserver/cmd/server/main.go create mode 100644 authserver/k8s/nginx.yaml delete mode 100644 authserver/web/.dockerignore delete mode 100644 authserver/web/Dockerfile delete mode 100644 authserver/web/index.html delete mode 100644 authserver/web/nginx.conf delete mode 100644 authserver/web/package-lock.json delete mode 100644 authserver/web/package.json delete mode 100644 authserver/web/src/App.vue delete mode 100644 authserver/web/src/main.js delete mode 100644 authserver/web/src/style.css delete mode 100644 authserver/web/vite.config.js diff --git a/authserver/.gitignore b/authserver/.gitignore index eca0741..6097006 100644 --- a/authserver/.gitignore +++ b/authserver/.gitignore @@ -5,7 +5,7 @@ .DS_Store *.tar bin/ -server +/server web/node_modules/ web/dist/ certs/ diff --git a/authserver/cmd/server/main.go b/authserver/cmd/server/main.go new file mode 100644 index 0000000..7ad3580 --- /dev/null +++ b/authserver/cmd/server/main.go @@ -0,0 +1,37 @@ +package main + +import ( + "log" + + "authserver/internal/config" + "authserver/internal/database" + "authserver/internal/router" +) + +func main() { + cfg := config.Load() + + db, err := database.Open(cfg.MySQLDSN) + if err != nil { + log.Fatalf("open database: %v", err) + } + + if cfg.AutoMigrate { + if err := database.AutoMigrate(db); err != nil { + log.Fatalf("auto migrate: %v", err) + } + } + if err := database.SeedDefaults(db, cfg); err != nil { + log.Fatalf("seed defaults: %v", err) + } + + r := router.New(router.Dependencies{ + Config: cfg, + DB: db, + }) + + log.Printf("authserver listening on %s", cfg.HTTPAddr) + if err := r.Run(cfg.HTTPAddr); err != nil { + log.Fatalf("run server: %v", err) + } +} diff --git a/authserver/internal/handler/saml.go b/authserver/internal/handler/saml.go index a90818d..0ca7f23 100644 --- a/authserver/internal/handler/saml.go +++ b/authserver/internal/handler/saml.go @@ -97,15 +97,15 @@ func (h *SAMLHandler) ACS(c *gin.Context) { func ssoRedirectURL(relayState, token string) string { target := strings.TrimSpace(relayState) - if target == "" || !strings.HasPrefix(target, "/auth/") { - target = "/auth/" + if target == "" || !strings.HasPrefix(target, "/") { + target = "/" } if strings.HasPrefix(target, "//") { - target = "/auth/" + target = "/" } parsed, err := url.Parse(target) if err != nil || parsed.IsAbs() { - parsed = &url.URL{Path: "/auth/"} + parsed = &url.URL{Path: "/"} } values := parsed.Query() values.Set("sso_token", token) diff --git a/authserver/k8s/nginx.yaml b/authserver/k8s/nginx.yaml new file mode 100644 index 0000000..fae0081 --- /dev/null +++ b/authserver/k8s/nginx.yaml @@ -0,0 +1,148 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: authserver-nginx-conf + namespace: authserver +data: + default.conf.template: | + server { + listen 80; + server_name _; + + client_max_body_size 10m; + + location = /healthz { + proxy_pass ${AUTHSERVER_BACKEND_UPSTREAM}; + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + + location = /readyz { + proxy_pass ${AUTHSERVER_BACKEND_UPSTREAM}; + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + + location /auth/api/ { + proxy_pass ${AUTHSERVER_BACKEND_UPSTREAM}; + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_connect_timeout 5s; + proxy_send_timeout 60s; + proxy_read_timeout 60s; + } + + location /auth/oauth/ { + proxy_pass ${AUTHSERVER_BACKEND_UPSTREAM}; + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_connect_timeout 5s; + proxy_send_timeout 60s; + proxy_read_timeout 60s; + } + + location /auth/.well-known/ { + proxy_pass ${AUTHSERVER_BACKEND_UPSTREAM}; + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_connect_timeout 5s; + proxy_send_timeout 60s; + proxy_read_timeout 60s; + } + + location /internal/clouddm/ { + proxy_pass ${CLOUDDM_UPSTREAM}/; + proxy_http_version 1.1; + proxy_set_header Host ${CLOUDDM_PUBLIC_HOST}; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-Host ${CLOUDDM_PUBLIC_HOST}; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto http; + proxy_connect_timeout 5s; + proxy_send_timeout 60s; + proxy_read_timeout 60s; + } + + location / { + return 404; + } + } +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: authserver-nginx + namespace: authserver +spec: + replicas: 1 + selector: + matchLabels: + app: authserver-nginx + template: + metadata: + labels: + app: authserver-nginx + spec: + containers: + - name: nginx + image: nginx:1.29-alpine + imagePullPolicy: IfNotPresent + ports: + - containerPort: 80 + env: + - name: AUTHSERVER_BACKEND_UPSTREAM + value: http://authserver-backend:8083 + - name: CLOUDDM_UPSTREAM + value: http://open-cdm.db.svc.cluster.local:8222 + - name: CLOUDDM_PUBLIC_HOST + value: 218.11.5.223:30009 + volumeMounts: + - name: nginx-conf + mountPath: /etc/nginx/templates/default.conf.template + subPath: default.conf.template + readinessProbe: + httpGet: + path: /readyz + port: 80 + initialDelaySeconds: 5 + periodSeconds: 10 + livenessProbe: + httpGet: + path: /healthz + port: 80 + initialDelaySeconds: 10 + periodSeconds: 20 + volumes: + - name: nginx-conf + configMap: + name: authserver-nginx-conf +--- +apiVersion: v1 +kind: Service +metadata: + name: authserver-nginx + namespace: authserver +spec: + type: NodePort + selector: + app: authserver-nginx + ports: + - name: http + port: 80 + targetPort: 80 + nodePort: 30080 diff --git a/authserver/web/.dockerignore b/authserver/web/.dockerignore deleted file mode 100644 index a7e5733..0000000 --- a/authserver/web/.dockerignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules/ -dist/ -.DS_Store - diff --git a/authserver/web/Dockerfile b/authserver/web/Dockerfile deleted file mode 100644 index debcaaf..0000000 --- a/authserver/web/Dockerfile +++ /dev/null @@ -1,16 +0,0 @@ -FROM node:14-alpine AS builder - -WORKDIR /app - -COPY package*.json ./ -RUN npm install --no-audit --no-fund - -COPY . . -RUN npm run build - -FROM nginx:1.29-alpine - -COPY nginx.conf /etc/nginx/conf.d/default.conf -COPY --from=builder /app/dist /usr/share/nginx/html/auth - -EXPOSE 80 diff --git a/authserver/web/index.html b/authserver/web/index.html deleted file mode 100644 index f469a73..0000000 --- a/authserver/web/index.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - AuthServer - - -
- - - diff --git a/authserver/web/nginx.conf b/authserver/web/nginx.conf deleted file mode 100644 index caaae48..0000000 --- a/authserver/web/nginx.conf +++ /dev/null @@ -1,90 +0,0 @@ -server { - listen 80; - server_name _; - - client_max_body_size 10m; - - root /usr/share/nginx/html; - index index.html; - - location = / { - return 302 /auth/; - } - - location = /healthz { - proxy_pass http://authserver-backend:8083; - proxy_http_version 1.1; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - } - - location = /readyz { - proxy_pass http://authserver-backend:8083; - proxy_http_version 1.1; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - } - - location /auth/api/ { - proxy_pass http://authserver-backend:8083; - proxy_http_version 1.1; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_connect_timeout 5s; - proxy_send_timeout 60s; - proxy_read_timeout 60s; - } - - location /auth/oauth/ { - proxy_pass http://authserver-backend:8083; - proxy_http_version 1.1; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_connect_timeout 5s; - proxy_send_timeout 60s; - proxy_read_timeout 60s; - } - - location /auth/.well-known/ { - proxy_pass http://authserver-backend:8083; - proxy_http_version 1.1; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_connect_timeout 5s; - proxy_send_timeout 60s; - proxy_read_timeout 60s; - } - - location /internal/clouddm/ { - proxy_pass http://open-cdm.db.svc.cluster.local:8222/; - proxy_http_version 1.1; - proxy_set_header Host 218.11.5.223:30009; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-Host 218.11.5.223:30009; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto http; - proxy_connect_timeout 5s; - proxy_send_timeout 60s; - proxy_read_timeout 60s; - } - - location /auth/ { - try_files $uri $uri/ /auth/index.html; - } - - location ~* \.(js|css|png|jpg|jpeg|gif|svg|ico|woff2?)$ { - expires 7d; - add_header Cache-Control "public, max-age=604800"; - try_files $uri =404; - } -} diff --git a/authserver/web/package-lock.json b/authserver/web/package-lock.json deleted file mode 100644 index 6c2df8d..0000000 --- a/authserver/web/package-lock.json +++ /dev/null @@ -1,379 +0,0 @@ -{ - "name": "authserver-web", - "version": "0.1.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/helper-string-parser": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", - "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==" - }, - "@babel/helper-validator-identifier": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", - "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==" - }, - "@babel/parser": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", - "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", - "requires": { - "@babel/types": "^7.29.7" - } - }, - "@babel/types": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", - "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", - "requires": { - "@babel/helper-string-parser": "^7.29.7", - "@babel/helper-validator-identifier": "^7.29.7" - } - }, - "@esbuild/android-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", - "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", - "optional": true - }, - "@esbuild/android-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", - "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", - "optional": true - }, - "@esbuild/android-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", - "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", - "optional": true - }, - "@esbuild/darwin-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", - "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", - "optional": true - }, - "@esbuild/darwin-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", - "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", - "optional": true - }, - "@esbuild/freebsd-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", - "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", - "optional": true - }, - "@esbuild/freebsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", - "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", - "optional": true - }, - "@esbuild/linux-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", - "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", - "optional": true - }, - "@esbuild/linux-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", - "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", - "optional": true - }, - "@esbuild/linux-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", - "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", - "optional": true - }, - "@esbuild/linux-loong64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", - "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", - "optional": true - }, - "@esbuild/linux-mips64el": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", - "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", - "optional": true - }, - "@esbuild/linux-ppc64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", - "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", - "optional": true - }, - "@esbuild/linux-riscv64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", - "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", - "optional": true - }, - "@esbuild/linux-s390x": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", - "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", - "optional": true - }, - "@esbuild/linux-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", - "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", - "optional": true - }, - "@esbuild/netbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", - "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", - "optional": true - }, - "@esbuild/openbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", - "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", - "optional": true - }, - "@esbuild/sunos-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", - "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", - "optional": true - }, - "@esbuild/win32-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", - "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", - "optional": true - }, - "@esbuild/win32-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", - "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", - "optional": true - }, - "@esbuild/win32-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", - "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", - "optional": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==" - }, - "@vitejs/plugin-vue": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.6.2.tgz", - "integrity": "sha512-kqf7SGFoG+80aZG6Pf+gsZIVvGSCKE98JbiWqcCV9cThtg91Jav0yvYFC9Zb+jKetNGF6ZKeoaxgZfND21fWKw==" - }, - "@vue/compiler-core": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.17.tgz", - "integrity": "sha512-Xe+AittLbAyV0pabcN7cP7/BenRBNcteM4aSDCtRvGw0d9OL+HG1u/XHLY/kt1q4fyMeZYXyIYrsHuPSiDPosA==", - "requires": { - "@babel/parser": "^7.27.5", - "@vue/shared": "3.5.17", - "entities": "^4.5.0", - "estree-walker": "^2.0.2", - "source-map-js": "^1.2.1" - } - }, - "@vue/compiler-dom": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.17.tgz", - "integrity": "sha512-+2UgfLKoaNLhgfhV5Ihnk6wB4ljyW1/7wUIog2puUqajiC29Lp5R/IKDdkebh9jTbTogTbsgB+OY9cEWzG95JQ==", - "requires": { - "@vue/compiler-core": "3.5.17", - "@vue/shared": "3.5.17" - } - }, - "@vue/compiler-sfc": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.17.tgz", - "integrity": "sha512-rQQxbRJMgTqwRugtjw0cnyQv9cP4/4BxWfTdRBkqsTfLOHWykLzbOc3C4GGzAmdMDxhzU/1Ija5bTjMVrddqww==", - "requires": { - "@babel/parser": "^7.27.5", - "@vue/compiler-core": "3.5.17", - "@vue/compiler-dom": "3.5.17", - "@vue/compiler-ssr": "3.5.17", - "@vue/shared": "3.5.17", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.17", - "postcss": "^8.5.6", - "source-map-js": "^1.2.1" - } - }, - "@vue/compiler-ssr": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.17.tgz", - "integrity": "sha512-hkDbA0Q20ZzGgpj5uZjb9rBzQtIHLS78mMilwrlpWk2Ep37DYntUz0PonQ6kr113vfOEdM+zTBuJDaceNIW0tQ==", - "requires": { - "@vue/compiler-dom": "3.5.17", - "@vue/shared": "3.5.17" - } - }, - "@vue/reactivity": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.17.tgz", - "integrity": "sha512-l/rmw2STIscWi7SNJp708FK4Kofs97zc/5aEPQh4bOsReD/8ICuBcEmS7KGwDj5ODQLYWVN2lNibKJL1z5b+Lw==", - "requires": { - "@vue/shared": "3.5.17" - } - }, - "@vue/runtime-core": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.17.tgz", - "integrity": "sha512-QQLXa20dHg1R0ri4bjKeGFKEkJA7MMBxrKo2G+gJikmumRS7PTD4BOU9FKrDQWMKowz7frJJGqBffYMgQYS96Q==", - "requires": { - "@vue/reactivity": "3.5.17", - "@vue/shared": "3.5.17" - } - }, - "@vue/runtime-dom": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.17.tgz", - "integrity": "sha512-8El0M60TcwZ1QMz4/os2MdlQECgGoVHPuLnQBU3m9h3gdNRW9xRmI8iLS4t/22OQlOE6aJvNNlBiCzPHur4H9g==", - "requires": { - "@vue/reactivity": "3.5.17", - "@vue/runtime-core": "3.5.17", - "@vue/shared": "3.5.17", - "csstype": "^3.1.3" - } - }, - "@vue/server-renderer": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.17.tgz", - "integrity": "sha512-BOHhm8HalujY6lmC3DbqF6uXN/K00uWiEeF22LfEsm9Q93XeJ/plHTepGwf6tqFcF7GA5oGSSAAUock3VvzaCA==", - "requires": { - "@vue/compiler-ssr": "3.5.17", - "@vue/shared": "3.5.17" - } - }, - "@vue/shared": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.17.tgz", - "integrity": "sha512-CabR+UN630VnsJO/jHWYBC1YVXyMq94KKp6iF5MQgZJs5I8cmjw6oVMO1oDbtBkENSHSSn/UadWlW/OAgdmKrg==" - }, - "csstype": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", - "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==" - }, - "entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" - }, - "esbuild": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", - "requires": { - "@esbuild/android-arm": "0.18.20", - "@esbuild/android-arm64": "0.18.20", - "@esbuild/android-x64": "0.18.20", - "@esbuild/darwin-arm64": "0.18.20", - "@esbuild/darwin-x64": "0.18.20", - "@esbuild/freebsd-arm64": "0.18.20", - "@esbuild/freebsd-x64": "0.18.20", - "@esbuild/linux-arm": "0.18.20", - "@esbuild/linux-arm64": "0.18.20", - "@esbuild/linux-ia32": "0.18.20", - "@esbuild/linux-loong64": "0.18.20", - "@esbuild/linux-mips64el": "0.18.20", - "@esbuild/linux-ppc64": "0.18.20", - "@esbuild/linux-riscv64": "0.18.20", - "@esbuild/linux-s390x": "0.18.20", - "@esbuild/linux-x64": "0.18.20", - "@esbuild/netbsd-x64": "0.18.20", - "@esbuild/openbsd-x64": "0.18.20", - "@esbuild/sunos-x64": "0.18.20", - "@esbuild/win32-arm64": "0.18.20", - "@esbuild/win32-ia32": "0.18.20", - "@esbuild/win32-x64": "0.18.20" - } - }, - "estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" - }, - "fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "optional": true - }, - "magic-string": { - "version": "0.30.21", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", - "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", - "requires": { - "@jridgewell/sourcemap-codec": "^1.5.5" - } - }, - "nanoid": { - "version": "3.3.16", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.16.tgz", - "integrity": "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==" - }, - "picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" - }, - "postcss": { - "version": "8.5.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.18.tgz", - "integrity": "sha512-xdB1oSLHbz1vRWgCDalrCqEFTWzFlhqFC5tIHLMOSUIjhm3XXQ1qrFy8S/ESr1JYRRXqM3c1QFiMZUJdUTqyMQ==", - "requires": { - "nanoid": "^3.3.12", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - } - }, - "rollup": { - "version": "3.30.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.30.0.tgz", - "integrity": "sha512-kQvGasUgN+AlWGliFn2POSajRQEsULVYFGTvOZmK06d7vCD+YhZztt70kGk3qaeAXeWYL5eO7zx+rAubBc55eA==", - "requires": { - "fsevents": "~2.3.2" - } - }, - "source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==" - }, - "vite": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.3.tgz", - "integrity": "sha512-kQL23kMeX92v3ph7IauVkXkikdDRsYMGTVl5KY2E9OY4ONLvkHf04MDTbnfo6NKxZiDLWzVpP5oTa8hQD8U3dg==", - "requires": { - "esbuild": "^0.18.10", - "fsevents": "~2.3.2", - "postcss": "^8.4.27", - "rollup": "^3.27.1" - } - }, - "vue": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.17.tgz", - "integrity": "sha512-LbHV3xPN9BeljML+Xctq4lbz2lVHCR6DtbpTf5XIO6gugpXUN49j2QQPcMj086r9+AkJ0FfUT8xjulKKBkkr9g==", - "requires": { - "@vue/compiler-dom": "3.5.17", - "@vue/compiler-sfc": "3.5.17", - "@vue/runtime-dom": "3.5.17", - "@vue/server-renderer": "3.5.17", - "@vue/shared": "3.5.17" - } - } - } -} diff --git a/authserver/web/package.json b/authserver/web/package.json deleted file mode 100644 index 3f7d557..0000000 --- a/authserver/web/package.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "authserver-web", - "version": "0.1.0", - "private": true, - "type": "module", - "engines": { - "node": ">=14.18.0" - }, - "scripts": { - "dev": "vite --host 0.0.0.0", - "build": "vite build", - "preview": "vite preview --host 0.0.0.0" - }, - "dependencies": { - "@vitejs/plugin-vue": "4.6.2", - "vite": "4.5.3", - "vue": "3.5.17" - }, - "devDependencies": {} -} diff --git a/authserver/web/src/App.vue b/authserver/web/src/App.vue deleted file mode 100644 index be8f366..0000000 --- a/authserver/web/src/App.vue +++ /dev/null @@ -1,219 +0,0 @@ - - - diff --git a/authserver/web/src/main.js b/authserver/web/src/main.js deleted file mode 100644 index 2425c0f..0000000 --- a/authserver/web/src/main.js +++ /dev/null @@ -1,5 +0,0 @@ -import { createApp } from 'vue' -import './style.css' -import App from './App.vue' - -createApp(App).mount('#app') diff --git a/authserver/web/src/style.css b/authserver/web/src/style.css deleted file mode 100644 index 9283195..0000000 --- a/authserver/web/src/style.css +++ /dev/null @@ -1,206 +0,0 @@ -* { - box-sizing: border-box; -} - -body { - margin: 0; - min-width: 320px; - min-height: 100vh; - color: #172033; - background: #f5f7fb; - font-family: - Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", - sans-serif; -} - -button, -input { - font: inherit; -} - -button { - min-height: 36px; - border: 1px solid #cfd7e6; - border-radius: 6px; - background: #ffffff; - color: #172033; - cursor: pointer; -} - -button:disabled { - cursor: not-allowed; - opacity: 0.55; -} - -input { - width: 100%; - min-height: 36px; - border: 1px solid #cfd7e6; - border-radius: 6px; - padding: 0 10px; - background: #ffffff; - color: #172033; -} - -h1, -p { - margin: 0; -} - -h1 { - font-size: 22px; - line-height: 1.2; -} - -.login-page { - min-height: 100vh; - display: grid; - place-items: center; - padding: 24px; -} - -.login-panel { - width: min(420px, 100%); - display: grid; - gap: 22px; - border: 1px solid #dbe3ef; - border-radius: 8px; - padding: 28px; - background: #ffffff; - box-shadow: 0 18px 50px rgb(43 57 84 / 10%); -} - -.primary { - border-color: #1b64d8; - background: #1b64d8; - color: #ffffff; - font-weight: 650; -} - -.secondary { - padding: 0 14px; - border-color: #b8c5d9; - background: #ffffff; -} - -.eyebrow { - margin-bottom: 6px; - color: #526174; - font-size: 12px; - font-weight: 700; - letter-spacing: 0; - text-transform: uppercase; -} - -.message { - margin-top: 4px; - color: #31516f; - font-size: 13px; -} - -.app-page { - min-height: 100vh; - display: grid; - grid-template-rows: auto 1fr; - background: - linear-gradient(135deg, rgb(22 82 170 / 8%), transparent 42%), - #f5f7fb; -} - -.app-header { - display: flex; - align-items: center; - justify-content: space-between; - gap: 16px; - padding: 22px 28px; - border-bottom: 1px solid #dbe3ef; - background: rgb(255 255 255 / 86%); - backdrop-filter: blur(10px); -} - -.app-main { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(280px, 360px)); - justify-content: center; - align-items: center; - gap: 18px; - padding: 32px 20px; -} - -.app-button { - width: min(280px, 78vw); - aspect-ratio: 1; - display: grid; - place-items: center; - align-content: center; - gap: 18px; - border-color: #cfdaf0; - border-radius: 8px; - background: #ffffff; - box-shadow: 0 18px 50px rgb(43 57 84 / 12%); -} - -.app-button:hover:not(:disabled), -.app-button:focus-visible { - border-color: #1b64d8; - box-shadow: 0 22px 60px rgb(27 100 216 / 18%); - outline: none; -} - -.app-icon { - width: 112px; - height: 112px; - display: grid; - place-items: center; - border-radius: 28px; - color: #ffffff; - font-size: 64px; - font-weight: 800; - line-height: 1; -} - -.wayen-icon { - background: #1b64d8; -} - -.clouddm-icon { - background: #0f7b6c; -} - -.app-title { - color: #172033; - font-size: 22px; - font-weight: 750; -} - -.user-block { - display: flex; - align-items: center; - gap: 12px; - color: #526174; - font-size: 14px; -} - -@media (max-width: 560px) { - .app-header { - align-items: flex-start; - flex-direction: column; - padding: 18px 20px; - } - - .user-block { - width: 100%; - justify-content: space-between; - } - - .app-icon { - width: 92px; - height: 92px; - border-radius: 22px; - font-size: 52px; - } - - .app-main { - grid-template-columns: 1fr; - } -} diff --git a/authserver/web/vite.config.js b/authserver/web/vite.config.js deleted file mode 100644 index 6cb45ed..0000000 --- a/authserver/web/vite.config.js +++ /dev/null @@ -1,15 +0,0 @@ -import { defineConfig } from 'vite' -import vue from '@vitejs/plugin-vue' - -export default defineConfig({ - base: '/auth/', - plugins: [vue()], - server: { - port: 5173, - proxy: { - '/auth/api': 'http://127.0.0.1:8083', - '/healthz': 'http://127.0.0.1:8083', - '/readyz': 'http://127.0.0.1:8083', - }, - }, -})