amosnbn commited on
Commit
c3c0453
·
1 Parent(s): 2aab552
Files changed (1) hide show
  1. app.py +26 -6
app.py CHANGED
@@ -4,19 +4,28 @@ import os, re, logging, threading
4
  from datetime import datetime, timezone
5
  from functools import wraps
6
  from flask import Flask, render_template, request, redirect, url_for, session, jsonify, flash
 
7
 
8
  # ===== Logging =====
9
  logging.basicConfig(level=logging.INFO, format="%(asctime)s | %(levelname)s | %(message)s")
10
  log = logging.getLogger("papua-app")
11
 
12
  # ===== Flask =====
13
- # >> PAKAI folder 'frontend' (sesuai struktur kamu)
14
  app = Flask(__name__, template_folder="frontend", static_folder="static")
15
- SESSION_SECURE = os.getenv("SESSION_COOKIE_SECURE", "true").lower() in ("1","true","yes")
 
 
 
 
16
  app.config.update(
17
  SECRET_KEY=os.getenv("SECRET_KEY", "dev-secret-change-me"),
18
- SESSION_COOKIE_SAMESITE="Lax",
19
- SESSION_COOKIE_SECURE=SESSION_SECURE,
 
 
 
 
20
  )
21
 
22
  # ===== DB: SQLAlchemy (Supabase Postgres / SQLite fallback) =====
@@ -28,7 +37,7 @@ if not DATABASE_URL:
28
  DATABASE_URL = "sqlite:////tmp/app.db"
29
  log.warning("[DB] DATABASE_URL tidak diset; pakai SQLite /tmp/app.db")
30
  else:
31
- # normalisasi skema psycopg2
32
  if DATABASE_URL.startswith("postgres://"):
33
  DATABASE_URL = DATABASE_URL.replace("postgres://", "postgresql+psycopg2://", 1)
34
  elif DATABASE_URL.startswith("postgresql://"):
@@ -94,7 +103,7 @@ def prenorm(text: str) -> str:
94
  from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
95
  from peft import PeftModel
96
 
97
- # Untuk uji UI cepat gunakan mt5-small & kosongkan adapter, lalu ganti ke model kamu
98
  BASE_MODEL_ID = os.getenv("BASE_MODEL_ID", "google/mt5-small")
99
  ADAPTER_ID = os.getenv("ADAPTER_ID", "")
100
  DEVICE = "cuda" if os.getenv("DEVICE", "cpu") == "cuda" else "cpu"
@@ -144,6 +153,17 @@ def _err(e):
144
  log.exception("Unhandled error")
145
  return "Internal Server Error", 500
146
 
 
 
 
 
 
 
 
 
 
 
 
147
  # ===== Routes =====
148
  @app.get("/health")
149
  @app.get("/ping")
 
4
  from datetime import datetime, timezone
5
  from functools import wraps
6
  from flask import Flask, render_template, request, redirect, url_for, session, jsonify, flash
7
+ from werkzeug.middleware.proxy_fix import ProxyFix
8
 
9
  # ===== Logging =====
10
  logging.basicConfig(level=logging.INFO, format="%(asctime)s | %(levelname)s | %(message)s")
11
  log = logging.getLogger("papua-app")
12
 
13
  # ===== Flask =====
14
+ # Template ada di 'frontend/' sesuai struktur kamu
15
  app = Flask(__name__, template_folder="frontend", static_folder="static")
16
+
17
+ # TRUST reverse proxy di HF (agar proto https & host benar → cookie Secure & redirect aman)
18
+ app.wsgi_app = ProxyFix(app.wsgi_app, x_for=1, x_proto=1, x_host=1)
19
+
20
+ # Session config: aman untuk iframe (Spaces) agar cookie tidak ditolak browser
21
  app.config.update(
22
  SECRET_KEY=os.getenv("SECRET_KEY", "dev-secret-change-me"),
23
+ SESSION_COOKIE_NAME="hfspace_session",
24
+ SESSION_COOKIE_SAMESITE="None", # penting: iframe = third-party context
25
+ SESSION_COOKIE_SECURE=True, # wajib True kalau SAMESITE=None
26
+ SESSION_COOKIE_HTTPONLY=True,
27
+ SESSION_COOKIE_PATH="/",
28
+ PREFERRED_URL_SCHEME="https",
29
  )
30
 
31
  # ===== DB: SQLAlchemy (Supabase Postgres / SQLite fallback) =====
 
37
  DATABASE_URL = "sqlite:////tmp/app.db"
38
  log.warning("[DB] DATABASE_URL tidak diset; pakai SQLite /tmp/app.db")
39
  else:
40
+ # normalisasi skema ke psycopg2 driver
41
  if DATABASE_URL.startswith("postgres://"):
42
  DATABASE_URL = DATABASE_URL.replace("postgres://", "postgresql+psycopg2://", 1)
43
  elif DATABASE_URL.startswith("postgresql://"):
 
103
  from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
104
  from peft import PeftModel
105
 
106
+ # Mulai dengan model kecil agar UI/DB bisa diuji cepat; ganti ke model kamu setelahnya
107
  BASE_MODEL_ID = os.getenv("BASE_MODEL_ID", "google/mt5-small")
108
  ADAPTER_ID = os.getenv("ADAPTER_ID", "")
109
  DEVICE = "cuda" if os.getenv("DEVICE", "cpu") == "cuda" else "cpu"
 
153
  log.exception("Unhandled error")
154
  return "Internal Server Error", 500
155
 
156
+ # ===== Debug endpoints untuk cek session cookie =====
157
+ @app.get("/debug/session/set")
158
+ def dbg_set():
159
+ session["uid"] = "test-user"
160
+ session["email"] = "test@example.com"
161
+ return {"ok": True, "set": True}
162
+
163
+ @app.get("/debug/session/get")
164
+ def dbg_get():
165
+ return {"uid": session.get("uid"), "email": session.get("email")}
166
+
167
  # ===== Routes =====
168
  @app.get("/health")
169
  @app.get("/ping")