+ } else if (strncmp(url, "/subscribe", 11) == 0) {
+ struct subscribe_state *ss = (struct subscribe_state *) *ptr;
+
+ if (ss == NULL) {
+ if (strcmp(method, MHD_HTTP_METHOD_POST) != 0)
+ return respond_405(connection);
+
+ struct subscribe_state *ss = malloc(sizeof(struct subscribe_state));
+ ss->username[0] = ss->to[0] = 0;
+ ss->pp = MHD_create_post_processor(connection, 1024, &POST_subscribe_iterator, ss);
+ *ptr = ss;
+ return MHD_YES;
+ }
+
+ if (*upload_data_size) {
+ MHD_post_process(ss->pp, upload_data, *upload_data_size);
+ *upload_data_size = 0;
+ return MHD_YES;
+ }
+
+ const char *given_token = MHD_lookup_connection_value(connection, MHD_COOKIE_KIND, "auth");
+ if (auth_check_token(ss->username, given_token)) {
+ subscription_add(ss->username, ss->to);
+ return respond_JSON_Success(connection);
+ } else {
+ return respond_JSON_Failure(connection);
+ }