灵符lingfu
F

fu.ling-lang.org

↓ 0 downloads

ทะเบียนแพ็กเกจ fu.ling-lang.org — เขียนด้วยภาษา Ling (ไทย) ทั้งหมด

Keywords registry, packages, web, ling, thai
lingfu install fu.ling-lang.org
LicenseApache-2.0 OR MIT
Authorsลิงลิน
READMECode / FilesVersionsDependency GraphDependentsSecurityBuildsSettings

Code / Files (22)

models/users.ling
// models/users.ling — โมเดลผู้ใช้ + เซสชัน + 2FA

// สร้างผู้ใช้พร้อมกุญแจลับ TOTP (2FA บังคับ) — คืนไอดีผู้ใช้ใหม่ (0 ถ้าซ้ำ)
ฟังก์ชัน ผู้ใช้สร้าง(ชื่อ, อีเมล, รหัสผ่าน, ความลับ) {
    ผูก แฮช = password_hash(รหัสผ่าน)
    ฐานข้อมูลรัน("INSERT OR IGNORE INTO users (username, email, password_hash, totp_secret) VALUES (?1, ?2, ?3, ?4)", ชื่อ, อีเมล, แฮช, ความลับ)
    ผูก แถว = ฐานข้อมูลถาม("SELECT id FROM users WHERE username = ?1", ชื่อ)
    ถ้า แถว.len == 0 {
        คืน 0
    }
    ผูก หัว = รับรายการ(แถว, 0)
    คืน หัว.id
}

ฟังก์ชัน ผู้ใช้มีอยู่(ชื่อ) {
    ผูก แถว = ฐานข้อมูลถาม("SELECT id FROM users WHERE username = ?1 OR email = ?1", ชื่อ)
    คืน แถว.len > 0
}

ฟังก์ชัน ผู้ใช้ทั้งหมด() {
    คืน ฐานข้อมูลถาม("SELECT id, username, bio, github, created_at FROM users ORDER BY id")
}

ฟังก์ชัน ผู้ใช้หา(ชื่อ) {
    คืน ฐานข้อมูลถาม("SELECT id, username, email, bio, github, created_at FROM users WHERE username = ?1", ชื่อ)
}

ฟังก์ชัน ผู้ใช้นับ() {
    ผูก แถว = ฐานข้อมูลถาม("SELECT COUNT(*) AS n FROM users")
    ผูก หัว = รับรายการ(แถว, 0)
    คืน หัว.n
}

// ตรวจรหัสผ่าน — คืนแถวผู้ใช้ (id, totp_secret, totp_confirmed) หรือ [] ถ้าผิด
ฟังก์ชัน ผู้ใช้ตรวจรหัส(ชื่อ, รหัสผ่าน) {
    ผูก แถว = ฐานข้อมูลถาม("SELECT id, username, password_hash, totp_secret, totp_confirmed FROM users WHERE username = ?1", ชื่อ)
    ถ้า แถว.len == 0 {
        คืน []
    }
    ผูก ผ = รับรายการ(แถว, 0)
    ถ้า password_verify(รหัสผ่าน, ผ.password_hash) {
        คืน แถว
    }
    คืน []
}

ฟังก์ชัน ผู้ใช้ยืนยัน2fa(ไอดี) {
    ฐานข้อมูลรัน("UPDATE users SET totp_confirmed = 1 WHERE id = ?1", ไอดี)
}

ฟังก์ชัน ผู้ใช้ตั้งประวัติ(ไอดี, ประวัติ, กิตฮับ) {
    ฐานข้อมูลรัน("UPDATE users SET bio = ?2, github = ?3 WHERE id = ?1", ไอดี, ประวัติ, กิตฮับ)
}

// ── เซสชัน ──
ฟังก์ชัน เซสชันสร้าง(ไอดีผู้ใช้, ระยะ) {
    ผูก โทเคน = random_hex(24)
    ฐานข้อมูลรัน("INSERT INTO sessions (token, user_id, stage) VALUES (?1, ?2, ?3)", โทเคน, ไอดีผู้ใช้, ระยะ)
    คืน โทเคน
}

ฟังก์ชัน เซสชันเลื่อนขั้น(โทเคน) {
    ฐานข้อมูลรัน("UPDATE sessions SET stage = 'active' WHERE token = ?1", โทเคน)
}

ฟังก์ชัน เซสชันลบ(โทเคน) {
    ฐานข้อมูลรัน("DELETE FROM sessions WHERE token = ?1", โทเคน)
}

// คืนแถวผู้ใช้+เซสชัน (id, username, stage, totp_secret) จากโทเคน หรือ []
ฟังก์ชัน เซสชันผู้ใช้(โทเคน) {
    ถ้า โทเคน == "" {
        คืน []
    }
    คืน ฐานข้อมูลถาม("SELECT u.id, u.username, u.totp_secret, s.stage FROM sessions s JOIN users u ON u.id = s.user_id WHERE s.token = ?1", โทเคน)
}

← Back to index