add blerg_init to blerg.a consumers
[blerg.git] / cgi / cgi_blerg.c
index 1bba24d..373c353 100644 (file)
@@ -100,6 +100,9 @@ int main(int argc, char *argv[]) {
        struct url_info info;
        char *data;
 
+       if (!blerg_init())
+               exit(1);
+
        if (cgi_init() != CGIERR_NONE)
                exit(0);
 
@@ -307,12 +310,12 @@ int main(int argc, char *argv[]) {
                        exit(0);
                }
 
-               if (!auth_login(username, password)) {
+               char *token = auth_login(username, password);
+               if (token == NULL) {
                        respond_JSON_Failure();
                        exit(0);
                }
 
-               char *token = auth_get_token(username);
                printf("Set-Cookie: auth=%s\r\n", token);
                free(token);
 
@@ -327,10 +330,10 @@ int main(int argc, char *argv[]) {
                if (!check_auth(username))
                        exit(0);
 
-               auth_logout(username);
+               const char *given_token = cgi_getcookie("auth");
+               auth_logout(username, given_token);
                respond_JSON_Success();
-       } else if (strncmp(path, "/subscribe", 11) == 0 || strncmp(path, "/unsubscribe", 13) == 0) {
-
+       } else if (strncmp(path, "/subscribe", 10) == 0 || strncmp(path, "/unsubscribe", 12) == 0) {
                const char *username = cgi_getentrystr("username");
                if (!check_auth(username))
                        exit(0);
@@ -376,26 +379,33 @@ int main(int argc, char *argv[]) {
                } else {
                        respond_blergref_list(feedlist, recs);
                }
+
+               struct blerg *b = blerg_open(username);
+               blerg_set_subscription_mark(b);
+               blerg_close(b);
        } else if (strncmp(path, "/feedinfo", 9) == 0) {
                const char *username = cgi_getentrystr("username");
                if (!check_auth(username))
                        exit(0);
 
-               if (path[9] != '/') {
-                       respond_404();
-                       exit(0);
-               }
-
-               ret = parse_url_info(path + 10, &info);
-               if ((ret & URL_INFO_NAME) == 0) {
-                       respond_404();
-                       exit(0);
-               }
-
                yajl_gen g = yajl_gen_alloc(&yajl_c, NULL);
                yajl_gen_map_open(g);
-               yajl_gen_string(g, "subscribed", 10);
-               yajl_gen_bool(g, is_subscribed(username, info.name));
+               if (path[9] == 0) {
+                       struct blerg *b = blerg_open(username);
+                       uint64_t subscription_mark = blerg_get_subscription_mark(b);
+                       blerg_close(b);
+
+                       yajl_gen_string(g, "new", 3);
+                       yajl_gen_integer(g, subscription_count_items(username) - subscription_mark);
+               } else {
+                       yajl_gen_string(g, "subscribed", 10);
+                       ret = parse_url_info(path + 10, &info);
+                       if ((ret & URL_INFO_NAME) == 1) {
+                               yajl_gen_bool(g, is_subscribed(username, info.name));
+                       } else {
+                               yajl_gen_bool(g, 0);
+                       }
+               }
                yajl_gen_map_close(g);
 
                const unsigned char *ybuf;
@@ -406,6 +416,23 @@ int main(int argc, char *argv[]) {
                fwrite(ybuf, len, 1, stdout);
 
                yajl_gen_free(g);
+       } else if (strncmp(path, "/passwd", 7) == 0) {
+               const char *username = cgi_getentrystr("username");
+               if (!check_auth(username))
+                       exit(0);
+
+               const char *password = cgi_getentrystr("password");
+               const char *new_password = cgi_getentrystr("new_password");
+               if (password == NULL || new_password == NULL) {
+                       respond_JSON_Failure();
+               } else {
+                       if (auth_check_password(username, password)) {
+                               auth_set_password(username, new_password);
+                               respond_JSON_Success();
+                       } else {
+                               respond_JSON_Failure();
+                       }
+               }
        } else {
                respond_404();
                exit(0);