Moge-Row commited on
Commit
3ab3cc2
Β·
1 Parent(s): e6cfe0f

use go embed for html

Browse files
Files changed (1) hide show
  1. internal/handler/index.go +11 -10
internal/handler/index.go CHANGED
@@ -1,17 +1,18 @@
1
  package handler
2
 
3
  import (
4
- "fmt"
5
- "net/http"
6
  )
7
 
 
 
 
8
  func HandleIndex(w http.ResponseWriter, r *http.Request) {
9
- if r.URL.Path != "/" {
10
- http.NotFound(w, r)
11
- return
12
- }
13
- w.Header().Set("Content-Type", "text/html; charset=utf-8")
14
- fmt.Fprintf(w, "%s", indexHTML)
15
  }
16
-
17
- var indexHTML = "<!DOCTYPE html>\n<html lang=\"es\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>ROW-PROXY // CCCP</title>\n<style>\n*{box-sizing:border-box;margin:0;padding:0}\nbody{background:#0d0d0d;font-family:\"Courier New\",monospace;color:#c8a84b}\n.header{background:#1a1200;border-bottom:2px solid #c8a84b;padding:1.5rem 2rem;display:flex;align-items:center;gap:1rem}\n.star{color:#cc0000;font-size:28px}\n.header-title{font-size:22px;font-weight:bold;letter-spacing:4px;color:#c8a84b}\n.header-sub{font-size:11px;letter-spacing:3px;color:#7a6228;margin-top:2px}\n.red-bar{height:4px;background:#cc0000}\n.content{padding:2rem;max-width:900px;margin:0 auto}\n.section-label{font-size:10px;letter-spacing:4px;color:#7a6228;border-bottom:1px solid #3a2a00;padding-bottom:6px;margin-bottom:1rem;margin-top:1.5rem}\n.status-row{display:flex;gap:1rem;margin-bottom:1rem}\n.status-card{flex:1;background:#1a1200;border:1px solid #3a2a00;border-left:3px solid #c8a84b;padding:1rem}\n.status-card .val{font-size:18px;color:#c8a84b;font-weight:bold;margin-bottom:2px}\n.status-card .lbl{font-size:10px;color:#7a6228;letter-spacing:2px}\n.online{color:#44aa99}\n.url-box{background:#111;border:1px solid #3a2a00;border-left:3px solid #cc0000;padding:1rem 1.25rem;margin-bottom:1rem}\n.url-label{font-size:10px;color:#7a6228;letter-spacing:3px;margin-bottom:6px}\n.url-val{font-size:13px;color:#e8c86b;word-break:break-all}\n.key-row{display:flex;align-items:center;gap:8px;margin-top:6px}\n.key-val{font-size:12px;color:#c8a84b;font-family:monospace}\n.reveal-btn{background:#2a1e00;border:1px solid #c8a84b;color:#c8a84b;font-size:10px;padding:3px 10px;cursor:pointer;letter-spacing:2px;font-family:\"Courier New\"}\n.reveal-btn:hover{background:#3a2a00}\n.models-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:1rem}\n.model-item{background:#1a1200;border:1px solid #2a1e00;padding:8px 12px;display:flex;align-items:center;gap:8px}\n.model-dot{width:6px;height:6px;background:#44aa99;border-radius:50%;flex-shrink:0}\n.model-dot.glm{background:#c8a84b}\n.model-name{font-size:11px;color:#c8a84b}\n.tank-section{background:#1a1200;border:1px solid #3a2a00;padding:1.5rem;margin-bottom:1rem}\n.tank-title{font-size:13px;color:#cc0000;letter-spacing:3px;margin-bottom:1rem;font-weight:bold}\n.tank-row{display:flex;gap:1rem;margin-bottom:8px;align-items:center}\n.tank-name{font-size:12px;color:#e8c86b;width:80px;flex-shrink:0}\n.tank-bar-wrap{flex:1;background:#0d0d0d;height:14px}\n.tank-bar{height:100%;background:#cc0000}\n.tank-era{font-size:10px;color:#7a6228;width:80px;text-align:right;flex-shrink:0}\n.hoi4-section{background:#1a1200;border:1px solid #3a2a00;padding:1.5rem;margin-bottom:1rem}\n.hoi4-title{font-size:13px;color:#cc0000;letter-spacing:3px;margin-bottom:1rem;font-weight:bold}\n.op-row{display:flex;gap:8px;margin-bottom:8px;align-items:flex-start}\n.op-name{font-size:11px;color:#e8c86b;width:160px;flex-shrink:0}\n.op-desc{font-size:11px;color:#7a6228;line-height:1.5}\n.commander-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:1rem}\n.commander-card{background:#0d0d0d;border:1px solid #2a1e00;padding:8px 12px}\n.cmd-name{font-size:12px;color:#e8c86b;font-weight:bold}\n.cmd-trait{font-size:10px;color:#7a6228;margin-top:2px;letter-spacing:1px}\n.focus-row{display:flex;flex-wrap:wrap;gap:6px;margin-top:1rem}\n.focus-pill{background:#2a1000;border:1px solid #cc0000;color:#cc0000;font-size:9px;padding:3px 8px;letter-spacing:1px}\n.quote-box{background:#0d0d0d;border-left:3px solid #cc0000;padding:0.75rem 1rem;margin-top:1rem;font-size:11px;color:#7a6228;font-style:italic}\n.footer{border-top:1px solid #3a2a00;padding:1rem 2rem;text-align:center;font-size:10px;color:#4a3a10;letter-spacing:3px;margin-top:1rem}\n.classified{color:#cc0000}\n</style>\n</head>\n<body>\n<div class=\"header\">\n <div class=\"star\">&#9733;</div>\n <div>\n <div class=\"header-title\">ROW-PROXY // CCCP</div>\n <div class=\"header-sub\">SOVIET ARMORED DIVISION β€” AI GATEWAY β€” NO STEP BACK β€” 1941-1985</div>\n </div>\n <div style=\"margin-left:auto;text-align:right\">\n <div style=\"font-size:10px;color:#44aa99;letter-spacing:2px\">&#9679; SISTEMA ACTIVO</div>\n <div style=\"font-size:10px;color:#7a6228;margin-top:2px\">HF DEPLOY // GO v1.23</div>\n </div>\n</div>\n<div class=\"red-bar\"></div>\n<div class=\"content\">\n\n <div class=\"section-label\">// ESTADO DEL SISTEMA</div>\n <div class=\"status-row\">\n <div class=\"status-card\"><div class=\"val online\">&#9679; ONLINE</div><div class=\"lbl\">PROXY STATUS</div></div>\n <div class=\"status-card\"><div class=\"val\">24</div><div class=\"lbl\">MODELOS ACTIVOS</div></div>\n <div class=\"status-card\"><div class=\"val\">GLM-4.7</div><div class=\"lbl\">MOTOR PRINCIPAL</div></div>\n </div>\n\n <div class=\"section-label\">// PUNTO DE ACCESO β€” CLASIFICADO</div>\n <div class=\"url-box\">\n <div class=\"url-label\">BASE URL β€” PRODUCCION</div>\n <div class=\"url-val\">https://moge-row-row-proxy.hf.space/v1</div>\n <div class=\"key-row\">\n <span class=\"key-val\">API KEY: </span>\n <span class=\"key-val\" id=\"keyval\">&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;</span>\n <button class=\"reveal-btn\" onclick=\"toggleKey()\">REVELAR</button>\n </div>\n </div>\n\n <div class=\"section-label\">// MODELOS DISPONIBLES</div>\n <div class=\"models-grid\">\n <div class=\"model-item\"><div class=\"model-dot\"></div><div class=\"model-name\">claude-sonnet-4-6</div></div>\n <div class=\"model-item\"><div class=\"model-dot\"></div><div class=\"model-name\">claude-haiku-4-5</div></div>\n <div class=\"model-item\"><div class=\"model-dot\"></div><div class=\"model-name\">claude-opus-4-6</div></div>\n <div class=\"model-item\"><div class=\"model-dot\"></div><div class=\"model-name\">claude-3-5-sonnet</div></div>\n <div class=\"model-item\"><div class=\"model-dot glm\"></div><div class=\"model-name\">glm-4.7-thinking</div></div>\n <div class=\"model-item\"><div class=\"model-dot glm\"></div><div class=\"model-name\">glm-5</div></div>\n <div class=\"model-item\"><div class=\"model-dot glm\"></div><div class=\"model-name\">glm-5-thinking</div></div>\n <div class=\"model-item\"><div class=\"model-dot glm\"></div><div class=\"model-name\">glm-4.5-air</div></div>\n </div>\n\n <div class=\"section-label\">// RAMA SOVIETICA β€” GUERRA FRIA // WAR THUNDER</div>\n <div class=\"tank-section\">\n <div class=\"tank-title\">&#9733; MODELOS MAS USADOS</div>\n <div class=\"tank-row\"><div class=\"tank-name\">claude-sonnet</div><div class=\"tank-bar-wrap\"><div class=\"tank-bar\" style=\"width:95%\"></div></div><div class=\"tank-era\">~12K tokens</div></div>\n <div class=\"tank-row\"><div class=\"tank-name\">glm-4.7</div><div class=\"tank-bar-wrap\"><div class=\"tank-bar\" style=\"width:80%\"></div></div><div class=\"tank-era\">~9K tokens</div></div>\n <div class=\"tank-row\"><div class=\"tank-name\">glm-5</div><div class=\"tank-bar-wrap\"><div class=\"tank-bar\" style=\"width:65%\"></div></div><div class=\"tank-era\">~7K tokens</div></div>\n <div class=\"tank-row\"><div class=\"tank-name\">claude-haiku</div><div class=\"tank-bar-wrap\"><div class=\"tank-bar\" style=\"width:50%\"></div></div><div class=\"tank-era\">~5K tokens</div></div>\n <div class=\"tank-row\"><div class=\"tank-name\">glm-4.7-think</div><div class=\"tank-bar-wrap\"><div class=\"tank-bar\" style=\"width:35%\"></div></div><div class=\"tank-era\">~3K tokens</div></div>\n <div style=\"margin-top:0.75rem;font-size:10px;color:#7a6228;letter-spacing:1px\">&#9888; DATOS EN TIEMPO REAL PROXIMAMENTE</div>\n </div>\n\n <div class=\"section-label\">// HOI4 β€” NO STEP BACK β€” FRENTE ORIENTAL</div>\n <div class=\"hoi4-section\">\n \n\n <div class=\"tank-title\" style=\"margin-top:1rem\">&#9733; TOP USUARIOS</div>\n <div class=\"commander-grid\">\n <div class=\"commander-card\"><div class=\"cmd-name\">Usuario #1</div><div class=\"cmd-trait\">SOLICITUDES: -- // TOKENS: --</div></div>\n <div class=\"commander-card\"><div class=\"cmd-name\">Usuario #2</div><div class=\"cmd-trait\">SOLICITUDES: -- // TOKENS: --</div></div>\n <div class=\"commander-card\"><div class=\"cmd-name\">Usuario #3</div><div class=\"cmd-trait\">SOLICITUDES: -- // TOKENS: --</div></div>\n <div class=\"commander-card\"><div class=\"cmd-name\">Usuario #4</div><div class=\"cmd-trait\">SOLICITUDES: -- // TOKENS: --</div></div>\n </div>\n\n <div class=\"tank-title\" style=\"margin-top:1rem\">&#9733; ARBOL DE ENFOQUE SOVIETICO</div>\n <div class=\"focus-row\">\n <div class=\"focus-pill\">INDUSTRIA DE GUERRA</div>\n <div class=\"focus-pill\">COLLECTIVIZACION</div>\n <div class=\"focus-pill\">PURGA MILITAR</div>\n <div class=\"focus-pill\">LEND-LEASE</div>\n <div class=\"focus-pill\">PACTO RIBBENTROP</div>\n <div class=\"focus-pill\">RUTA COMUNISTA</div>\n <div class=\"focus-pill\">DEFENSA EN PROFUNDIDAD</div>\n <div class=\"focus-pill\">FRENTE POPULAR</div>\n </div>\n\n <div class=\"quote-box\">\n &ldquo;La victoria es para aquellos que no retroceden. Ni un paso atras.&rdquo;<br>\n <span style=\"color:#c8a84b;font-style:normal\">β€” Orden No. 227, Stalin β€” 1942 β€” NO STEP BACK</span>\n </div>\n </div>\n\n</div>\n<div class=\"footer\">\n <span class=\"classified\">&#9733; CLASIFICADO &#9733;</span> &mdash; ROW-PROXY v1.0 &mdash; CCCP AI GATEWAY &mdash; HOI4 NO STEP BACK &mdash; <span class=\"classified\">&#9733; CLASIFICADO &#9733;</span>\n</div>\n<script>\nvar revealed = false;\nvar key = \"free\";\nfunction toggleKey() {\n revealed = !revealed;\n var el = document.getElementById(\"keyval\");\n var btn = document.querySelector(\".reveal-btn\");\n if (revealed) {\n el.textContent = key;\n btn.textContent = \"OCULTAR\";\n } else {\n el.textContent = \"β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ\";\n btn.textContent = \"REVELAR\";\n }\n}\n</script>\n</body>\n</html>"
 
1
  package handler
2
 
3
  import (
4
+ _ "embed"
5
+ "net/http"
6
  )
7
 
8
+ //go:embed ../../static/index.html
9
+ var indexHTML []byte
10
+
11
  func HandleIndex(w http.ResponseWriter, r *http.Request) {
12
+ if r.URL.Path != "/" {
13
+ http.NotFound(w, r)
14
+ return
15
+ }
16
+ w.Header().Set("Content-Type", "text/html; charset=utf-8")
17
+ w.Write(indexHTML)
18
  }