FloCafe
FloCafe is the free, local-first restaurant POS in the FloPOS ecosystem. Run orders, tables, kitchen display, and local data without a software subscription.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗Un solo index.html + Firestore via REST, hospedado en GitHub Pages.
URL: https://comedor-yama.grupoproesa.mx/ · Firebase project: menu-proesa-yama. Mismo esquema de seguridad que Menu LANS.
ssoCallback valida
el token firmado que manda el Gestor y regresa a la app con un custom token
(#ct=...) que trae el claim numEmp (mayusculas, sin ceros a la izquierda, igual que el id de
orders/{id}). El numero queda fijo en pantalla y las reglas solo dejan leer, pedir, modificar o
cancelar orders/{numEmp} propio. Solo el admin lista todos los pedidos.config/secrets (adminPin, superPin), que nadie puede leer desde el navegador.admin_sessions/{uid} con el PIN; las reglas lo comparan contra
config/secrets y, si no coincide, la escritura falla. La sesion expira a las 12 h.adminPin: menu, pedidos, cortesias, historial y buzon. superPin: todo lo anterior + catalogo.comentarios/{id}. Los comentarios del formato anterior (config/comentarios)
se pasan a la coleccion la primera vez que entra un admin.menu-proesa-yama > Authentication > Sign-in method > Anonymous > Habilitar.apiKey a FIREBASE_API_KEY en index.html.config > documento secrets con dos campos string:
adminPin y superPin. Usar PIN nuevos de 6 digitos (los anteriores quedaron expuestos).index.html nuevo (merge a main). Funciona tambien con las reglas viejas.firestore.rules > Publicar.https://comedor-yama.grupoproesa.mx/* (y https://artikke.github.io/* mientras dure el cambio);
APIs: Identity Toolkit, Token Service, Cloud Firestore.Los colaboradores entran desde la seccion Comedor del Gestor de Personal (opcion 2 acordada con TI).
El Gestor redirige a la Function ssoCallback con ?t=<JWT HS256> firmado con HANDOFF_SECRET
(iss = gestor-personal, aud = comedor-yama, trae numEmp, nombre, correo). La Function lo valida y
regresa a la app con un custom token (#ct=...) con el claim numEmp.
Archivos: functions/index.js (Node 22, 2nd gen), firebase.json, .firebaserc.
Deploy (Cloud Shell o tu maquina, con firebase CLI):
firebase use menu-proesa-yama
(cd functions && npm install)
firebase functions:secrets:set HANDOFF_SECRET # pega el secreto que te de TI; NUNCA en el repo
firebase deploy --only functions:ssoCallback
URL: https://us-central1-menu-proesa-yama.cloudfunctions.net/ssoCallback. El mismo HANDOFF_SECRET lo tiene TI en el
.env del Gestor; si lo rotan, se vuelve a correr secrets:set (y contestar Y para re-desplegar).
El GESTOR_TOKEN del flujo anterior (portal) ya no se usa: se puede borrar con
firebase functions:secrets:destroy GESTOR_TOKEN.
Permiso para firmar custom tokens (una sola vez, ya hecho): la cuenta de servicio de la Function
(<NUMERO_DE_PROYECTO>[email protected]) necesita el rol Service Account Token Creator:
gcloud projects add-iam-policy-binding menu-proesa-yama \
--member="serviceAccount:<NUMERO_DE_PROYECTO>[email protected]" \
--role="roles/iam.serviceAccountTokenCreator"
Orden para publicar: (1) Function con HANDOFF_SECRET; (2) merge a main del index.html nuevo (funciona
tambien con las reglas actuales); (3) prueba con un colaborador real entrando desde el Gestor; (4) publicar
firestore.rules (consola o firebase deploy --only firestore:rules). No publicar las reglas
antes del index.html: el anterior lista todos los pedidos y con las reglas nuevas eso ya no se permite.
Desde el paso 4 solo se puede pedir entrando desde el Gestor.
API key: la Web API key ya esta restringida por dominio (paso 6 de abajo); signInWithCustomToken usa
Identity Toolkit, que ya esta en la lista de APIs permitidas. No hay que cambiar nada.
Errores que muestra la app (?error= del callback): sin_token (se abrio la Function sin token),
sin_numero (el token no trae numero de empleado), sso (token invalido, expirado, de otro comedor o error al firmar).
Pruebas de reglas (emulador de Firestore, necesita Java 11+):
cd tests && npm install && npm test
https://comedor-yama.grupoproesa.mx/ (GitHub Pages, repo Grupo-PROESA/Menu-club-YAM, CNAME a
grupo-proesa.github.io, Enforce HTTPS). El poster qr_poster.html genera el QR con esa URL.
Equipo compartido: el link "No soy yo" junto al numero cierra la sesion en ese navegador.