The logout button sort of works; oddly you have to press it twice.
+/** @brief Revoke the cookie used by this session
+ * @param c Client
+ * @return 0 on success, non-0 on error
+ */
+int disorder_revoke(disorder_client *c) {
+ return disorder_simple(c, 0, "revoke", (char *)0);
+}
+
/*
Local Variables:
c-basic-offset:2
/*
Local Variables:
c-basic-offset:2
int disorder_confirm(disorder_client *c, const char *confirm);
int disorder_make_cookie(disorder_client *c, char **cookiep);
const char *disorder_last(disorder_client *c);
int disorder_confirm(disorder_client *c, const char *confirm);
int disorder_make_cookie(disorder_client *c, char **cookiep);
const char *disorder_last(disorder_client *c);
+int disorder_revoke(disorder_client *c);
static void redirect(struct sink *output) {
const char *back;
static void redirect(struct sink *output) {
const char *back;
- cgi_header(output, "Location",
- (back = cgi_get("back")) ? back : front_url());
+ back = cgi_get("back");
+ cgi_header(output, "Location", back && *back ? back : front_url());
expand_template(ds, output, "login");
}
expand_template(ds, output, "login");
}
+static void act_logout(cgi_sink *output,
+ dcgi_state *ds) {
+ disorder_revoke(ds->g->client);
+ login_cookie = 0;
+ /* Back to the login page */
+ expand_template(ds, output, "login");
+}
+
static void act_register(cgi_sink *output,
dcgi_state *ds) {
const char *username, *password, *email;
static void act_register(cgi_sink *output,
dcgi_state *ds) {
const char *username, *password, *email;
{ "disable", act_disable },
{ "enable", act_enable },
{ "login", act_login },
{ "disable", act_disable },
{ "enable", act_enable },
{ "login", act_login },
+ { "logout", act_logout },
{ "move", act_move },
{ "pause", act_pause },
{ "play", act_play },
{ "move", act_move },
{ "pause", act_pause },
{ "play", act_play },