灵符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)

controllers/portal.ling
// controllers/portal.ling — พอร์ทัลนักพัฒนา: แพ็กเกจของฉัน, กุญแจ, โปรไฟล์

// การ์ดเตือนให้ล็อกอิน
ฟังก์ชัน ต้องล็อกอิน(คำขอ) {
    คืน ตอบ(401, เปลือก(คำขอ, "ต้องเข้าสู่ระบบ",
        "<div class='auth-box'><h1>ต้องเข้าสู่ระบบ</h1>" +
        "<p class='muted'>เข้าสู่ระบบเพื่อจัดการแพ็กเกจและกุญแจ API</p>" +
        "<p><a href='/login'>เข้าสู่ระบบ</a> · <a href='/register'>ลงทะเบียน</a></p></div>"),
        "text/html; charset=utf-8")
}

// แถบเมนูพอร์ทัล
ฟังก์ชัน แถบพอร์ทัล(ชื่อผู้ใช้) {
    คืน "<div class='portal-bar'><span class='who'>@" + ชื่อผู้ใช้ + "</span>" +
        "<a href='/me/packages'>แพ็กเกจ</a>" +
        "<a href='/me/keys'>กุญแจ API</a>" +
        "<a href='/me/profile'>โปรไฟล์</a>" +
        "<a href='/logout'>ออกจากระบบ</a></div>"
}

// GET /me/packages
ฟังก์ชัน หน้าของฉัน(คำขอ) {
    ถ้า เข้าสู่ระบบแล้ว(คำขอ) == 0 {
        คืน ต้องล็อกอิน(คำขอ)
    }
    ผูก ผ = รับรายการ(ผู้ใช้ปัจจุบัน(คำขอ), 0)
    ผูก รายการ = แพ็กเกจของผู้ใช้(ผ.id)
    ผูก เนื้อ = "<p class='empty'>คุณยังไม่มีแพ็กเกจ — เผยแพร่ด้วย <code>lingfu publish</code></p>"
    ถ้า รายการ.len > 0 {
        ผูก ก = 0
        ผูก แถวๆ = ""
        ขณะที่ ก < รายการ.len {
            ผูก พ = รับรายการ(รายการ, ก)
            ผูก ป้าย = ""
            ถ้า พ.suspended == 1 {
                ผูก ป้าย = " <span class='yanked'>ระงับแล้ว</span>"
            }
            ผูก แถวๆ = แถวๆ + "<li class='card'><div class='card-top'>" +
                "<a class='pkg-name' href='/package?name=" + พ.name + "'>" + พ.name + "</a>" + ป้าย +
                "<span class='dl'>&#8595; " + พ.downloads + "</span></div>" +
                "<p class='pkg-desc'>" + พ.description + "</p></li>"
            ผูก ก = ก + 1
        }
        ผูก เนื้อ = "<ul class='cards full'>" + แถวๆ + "</ul>"
    }
    คืน เปลือก(คำขอ, "แพ็กเกจของฉัน",
        แถบพอร์ทัล(ผ.username) + "<h1>แพ็กเกจของฉัน</h1>" + เนื้อ)
}

// GET /me/keys
ฟังก์ชัน หน้ากุญแจ(คำขอ) {
    ถ้า เข้าสู่ระบบแล้ว(คำขอ) == 0 {
        คืน ต้องล็อกอิน(คำขอ)
    }
    ผูก ผ = รับรายการ(ผู้ใช้ปัจจุบัน(คำขอ), 0)
    ผูก กุญแจใหม่ = query_param(คำขอ.query, "new", "")

    ผูก กล่องใหม่ = ""
    ถ้า กุญแจใหม่ != "" {
        ผูก กล่องใหม่ = "<div class='notice'><b>กุญแจใหม่ (แสดงครั้งเดียว):</b><br>" +
            "<code class='newkey'>" + html_escape(กุญแจใหม่) + "</code></div>"
    }

    ผูก รายการ = กุญแจของ(ผ.id)
    ผูก แถวๆ = "<p class='empty'>ยังไม่มีกุญแจ</p>"
    ถ้า รายการ.len > 0 {
        ผูก ก = 0
        ผูก แถวๆ = ""
        ขณะที่ ก < รายการ.len {
            ผูก ก_ = รับรายการ(รายการ, ก)
            ผูก สถานะ = "<form method='post' action='/me/keys/revoke' class='inline'><input type='hidden' name='id' value='" + ก_.id + "'><button class='btn-danger'>ถอน</button></form>"
            ถ้า ก_.revoked == 1 {
                ผูก สถานะ = "<span class='yanked'>ถอนแล้ว</span>"
            }
            ผูก แถวๆ = แถวๆ + "<li class='ver-row'><b>" + ก_.name + "</b><span class='ver-date'>" + ก_.created_at + "</span>" + สถานะ + "</li>"
            ผูก ก = ก + 1
        }
        ผูก แถวๆ = "<ul class='vers'>" + แถวๆ + "</ul>"
    }

    คืน เปลือก(คำขอ, "กุญแจ API",
        แถบพอร์ทัล(ผ.username) + "<h1>กุญแจ API</h1>" + กล่องใหม่ +
        "<form method='post' action='/me/keys/new' class='form inline-form'>" +
        "<input name='name' placeholder='ชื่อกุญแจ (เช่น laptop)' required>" +
        "<button type='submit'>สร้างกุญแจใหม่</button></form>" +
        แถวๆ +
        "<div class='notice'><b>ใช้กับ lingfu:</b><br><code>lingfu login &lt;key&gt;</code><br><code>lingfu publish</code></div>")
}

// POST /me/keys/new
ฟังก์ชัน ทำกุญแจใหม่(คำขอ) {
    ถ้า เข้าสู่ระบบแล้ว(คำขอ) == 0 {
        คืน ต้องล็อกอิน(คำขอ)
    }
    ผูก ผ = รับรายการ(ผู้ใช้ปัจจุบัน(คำขอ), 0)
    ผูก ชื่อ = query_param(คำขอ.body, "name", "default")
    ผูก กุญแจ = กุญแจสร้าง(ผ.id, ชื่อ)
    คืน ตอบคุกกี้(302, "", "text/html", "", "/me/keys?new=" + กุญแจ)
}

// POST /me/keys/revoke
ฟังก์ชัน ทำกุญแจถอน(คำขอ) {
    ถ้า เข้าสู่ระบบแล้ว(คำขอ) == 0 {
        คืน ต้องล็อกอิน(คำขอ)
    }
    ผูก ผ = รับรายการ(ผู้ใช้ปัจจุบัน(คำขอ), 0)
    ผูก ไอดี = to_number(query_param(คำขอ.body, "id", "0"))
    กุญแจถอน(ไอดี, ผ.id)
    คืน ตอบคุกกี้(302, "", "text/html", "", "/me/keys")
}

// GET /me/profile
ฟังก์ชัน หน้าโปรไฟล์(คำขอ) {
    ถ้า เข้าสู่ระบบแล้ว(คำขอ) == 0 {
        คืน ต้องล็อกอิน(คำขอ)
    }
    ผูก ผ = รับรายการ(ผู้ใช้ปัจจุบัน(คำขอ), 0)
    ผูก รายละเอียด = ผู้ใช้หา(ผ.username)
    ผูก ข = รับรายการ(รายละเอียด, 0)
    คืน เปลือก(คำขอ, "โปรไฟล์",
        แถบพอร์ทัล(ผ.username) + "<h1>โปรไฟล์ของ @" + ผ.username + "</h1>" +
        "<form method='post' action='/me/profile' class='form'>" +
        "<label>ประวัติย่อ (bio)<textarea name='bio' rows='4'>" + html_escape(ข.bio) + "</textarea></label>" +
        "<label>GitHub<input name='github' value='" + html_escape(ข.github) + "' placeholder='ชื่อผู้ใช้ GitHub'></label>" +
        "<button type='submit'>บันทึก</button></form>")
}

// POST /me/profile
ฟังก์ชัน ทำโปรไฟล์(คำขอ) {
    ถ้า เข้าสู่ระบบแล้ว(คำขอ) == 0 {
        คืน ต้องล็อกอิน(คำขอ)
    }
    ผูก ผ = รับรายการ(ผู้ใช้ปัจจุบัน(คำขอ), 0)
    ผูก ประวัติ = query_param(คำขอ.body, "bio", "")
    ผูก กิตฮับ = query_param(คำขอ.body, "github", "")
    ผู้ใช้ตั้งประวัติ(ผ.id, ประวัติ, กิตฮับ)
    คืน ตอบคุกกี้(302, "", "text/html", "", "/me/profile")
}

← Back to index