OSS-BSS-Field-Dispatch/src/api/auth.js
louispaulb 1b0fc89304 Initial commit — OSS/BSS Field Dispatch app
Current state: custom CSS + vanilla Vue components
Architecture: modular with composables, provide/inject pattern
Ready for progressive migration to Quasar native components

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 14:11:40 -04:00

61 lines
2.0 KiB
JavaScript

// ── ERPNext session-cookie auth ──────────────────────────────────────────────
// To swap to JWT or another auth method:
// 1. Replace login() / logout() / getLoggedUser() implementations here.
// 2. The stores/auth.js calls these — no changes needed there.
// ─────────────────────────────────────────────────────────────────────────────
import { BASE_URL } from 'src/config/erpnext'
let _csrf = null
export async function getCSRF () {
if (_csrf) return _csrf
try {
const res = await fetch(BASE_URL + '/', { credentials: 'include' })
const html = await res.text()
const m = html.match(/csrf_token\s*[:=]\s*['"]([^'"]+)['"]/)
if (m) _csrf = m[1]
} catch { /* ignore */ }
return _csrf
}
export function invalidateCSRF () { _csrf = null }
export async function login (usr, pwd) {
const res = await fetch(BASE_URL + '/api/method/login', {
method: 'POST',
credentials: 'include',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: new URLSearchParams({ usr, pwd }),
})
const data = await res.json()
if (!res.ok || data.exc_type === 'AuthenticationError') {
throw new Error(data.message || 'Identifiants incorrects')
}
invalidateCSRF()
return data
}
export async function logout () {
try {
await fetch(BASE_URL + '/api/method/frappe.auth.logout', {
method: 'POST',
credentials: 'include',
})
} catch { /* ignore */ }
invalidateCSRF()
}
// Returns email string if logged in, null if guest/error
export async function getLoggedUser () {
try {
const res = await fetch(BASE_URL + '/api/method/frappe.auth.get_logged_user', {
credentials: 'include',
})
const data = await res.json()
const user = data.message
return user && user !== 'Guest' ? user : null
} catch {
return null
}
}