commit:5e89558c1afec270c54f4827380817e3ef8591f4
author:Chip Black
committer:Chip Black
date:Mon Jun 30 22:34:30 2014 -0500
parents:7c2bb06244cbb1e41b4bf2fca943019a37a8332c
/status is always POST authenticated
diff --git a/cgi/cgi_blerg.c b/cgi/cgi_blerg.c
line changes: +38/-35
index 0a9998a..8bd5189
--- a/cgi/cgi_blerg.c
+++ b/cgi/cgi_blerg.c
@@ -31,6 +31,16 @@ int check_auth(const char *username) {
 	return 1;
 }
 
+void respond_yajl(yajl_gen g) {
+	const unsigned char *ybuf;
+	unsigned int content_len;
+
+	yajl_gen_get_buf(g, &ybuf, &content_len);
+
+	printf("Content-type: application/json\r\n");
+	printf("Content-length: %d\r\n\r\n", content_len);
+	fwrite(ybuf, content_len, 1, stdout);
+}
 
 void respond_for_range(struct blerg *b, uint64_t from, uint64_t to) {
 	const unsigned char *ybuf;
@@ -265,13 +275,7 @@ int main(int argc, char *argv[]) {
 		yajl_gen_string(g, (unsigned char *)number, strlen(number));
 		yajl_gen_map_close(g);
 
-		const unsigned char *ybuf;
-		unsigned int content_len;
-		yajl_gen_get_buf(g, &ybuf, &content_len);
-
-		printf("Content-type: application/json\r\n");
-		printf("Content-length: %d\r\n\r\n", content_len);
-		fwrite(ybuf, content_len, 1, stdout);
+		respond_yajl(g);
 
 		yajl_gen_free(g);
 	} else if (strncmp(path, "/create", 8) == 0) {
@@ -390,9 +394,14 @@ int main(int argc, char *argv[]) {
 		if (!check_auth(username))
 			exit(0);
 
-		yajl_gen g = yajl_gen_alloc(&yajl_c, NULL);
+		if (strncmp(request_method, "POST", 4) != 0) {
+			respond_405();
+			exit(0);
+		}
 
-		if (strncmp(request_method, "POST", 4) == 0) {
+		yajl_gen g;
+
+		if (path[7] == 0) {  /* No username */
 			const char *clear = cgi_getentrystr("clear");
 
 			if (strncmp(clear, "feed", 4) == 0) {
@@ -406,12 +415,9 @@ int main(int argc, char *argv[]) {
 				blerg_close(b);
 				respond_JSON_Success();
 			} else {
-				respond_JSON_Failure();
-			}
-			exit(0);
-		} else if (strncmp(request_method, "GET", 3) == 0) {
-			yajl_gen_map_open(g);
-			if (path[7] == 0) {
+				g = yajl_gen_alloc(&yajl_c, NULL);
+				yajl_gen_map_open(g);
+
 				struct blerg *b = blerg_open(username);
 				uint64_t subscription_mark = blerg_get_subscription_mark(b);
 				int mentioned = blerg_get_status(b, BLERGSTATUS_MENTIONED);
@@ -422,30 +428,27 @@ int main(int argc, char *argv[]) {
 
 				yajl_gen_string(g, (unsigned char *)"mentioned", 9);
 				yajl_gen_bool(g, mentioned);
+
+				yajl_gen_map_close(g);
+				respond_yajl(g);
+				yajl_gen_free(g);
+			}
+		} else {  /* with username */
+			g = yajl_gen_alloc(&yajl_c, NULL);
+			yajl_gen_map_open(g);
+
+			yajl_gen_string(g, (unsigned char *)"subscribed", 10);
+			ret = parse_url_info(path + 8, &info);
+			if ((ret & URL_INFO_NAME) == 1) {
+				yajl_gen_bool(g, is_subscribed(username, info.name));
 			} else {
-				yajl_gen_string(g, (unsigned char *)"subscribed", 10);
-				ret = parse_url_info(path + 8, &info);
-				if ((ret & URL_INFO_NAME) == 1) {
-					yajl_gen_bool(g, is_subscribed(username, info.name));
-				} else {
-					yajl_gen_bool(g, 0);
-				}
+				yajl_gen_bool(g, 0);
 			}
+
 			yajl_gen_map_close(g);
-		} else {
-			respond_405();
-			exit(0);
+			respond_yajl(g);
+			yajl_gen_free(g);
 		}
-
-		const unsigned char *ybuf;
-		unsigned int content_len;
-		yajl_gen_get_buf(g, &ybuf, &content_len);
-
-		printf("Content-type: application/json\r\n");
-		printf("Content-length: %d\r\n\r\n", content_len);
-		fwrite(ybuf, content_len, 1, stdout);
-
-		yajl_gen_free(g);
 	} else if (strncmp(path, "/passwd", 7) == 0) {
 		const char *username = cgi_getentrystr("username");
 		if (!check_auth(username))