summaryrefslogtreecommitdiff
path: root/guard/templates.py
blob: e8d63a0961f15b3f790403283dd9067f3be8d7e0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
from . import model

from typing import Iterable

from lxml.builder import E
from lxml import etree
from flask import url_for


def _html(title: str, body: etree.Element) -> str:
    return etree.tostring(E.html(
        E.head(E.title(title)),
        E.body(body)
    ), encoding='utf-8')


def login() -> str:
    return _html("Login", E.form(
        E.input(type="password", name="secret", placeholder="Secret admin token"),
        E.button("login", type="submit"),
        method="POST"
    ))


def _index_access(accesses: Iterable[model.Access]):
    return map(lambda access: (
        E.tr(
            E.td(access.token),
            E.td(access.pattern),
            E.td(str(access.create_date)),
            E.td(access.comment),
            E.td(
                E.form(
                    E.input(type="hidden", name="id", value=str(access.id)),
                    E.button("X", title="Delete", type="submit"),
                    method="POST", action=url_for("delete")))
        )
    ), accesses)


def index(serverport: str, cookiename: str) -> str:
    return _html(
        "Manage access tokens",
        E.div(
            E.p(E.a("Logout", href=url_for("logout"))),
            E.p("Call the write-service like: ",
                E.pre("http://thisMachine:{}/write".format(serverport)),
                "with the token in a cookie named {}".format(cookiename)),
            E.p("Or directly in the url: ",
                E.pre("http://thisMachine:{}/write/<token>".format(serverport))),
            E.form(
                E.input(type="hidden", name="action", value="create"),
                E.input(name="token", placeholder="Token secret"),
                E.input(name="pattern", placeholder="Paths pattern"),
                E.input(name="comment", placeholder="Comment"),
                E.button("Create", type="submit"), method="POST"),
            E.hr(),
            E.table(
                E.tr(
                    E.th("cookie: " + cookiename + " value"), E.th("Pattern"),
                    E.th("Create Date"), E.th("Comment"), E.th()
                ), border="1", style="width: 100%",
                *_index_access(model.Access.select().order_by(model.Access.create_date))
            ))
    )