mirror of
https://codeberg.org/grunfink/snac2.git
synced 2024-11-09 19:50:26 +03:00
More work in lists.
This commit is contained in:
parent
8275a5f4d8
commit
9a13e330f1
66
data.c
66
data.c
@ -1731,9 +1731,9 @@ xs_list *tag_search(char *tag, int skip, int show)
|
|||||||
|
|
||||||
/** lists **/
|
/** lists **/
|
||||||
|
|
||||||
xs_list *list_maint(snac *user, const char *list, int op)
|
xs_val *list_maint(snac *user, const char *list, int op)
|
||||||
{
|
{
|
||||||
xs_list *l = NULL;
|
xs_val *l = NULL;
|
||||||
|
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case 0: /** list of lists **/
|
case 0: /** list of lists **/
|
||||||
@ -1752,10 +1752,12 @@ xs_list *list_maint(snac *user, const char *list, int op)
|
|||||||
fclose(f);
|
fclose(f);
|
||||||
|
|
||||||
title = xs_strip_i(title);
|
title = xs_strip_i(title);
|
||||||
xs *md5 = xs_md5_hex(title, strlen(title));
|
|
||||||
|
xs *v2 = xs_replace(v, ".id", "");
|
||||||
|
xs *l2 = xs_split(v2, "/");
|
||||||
|
|
||||||
/* return [ list_id, list_title ] */
|
/* return [ list_id, list_title ] */
|
||||||
l = xs_list_append(l, xs_list_append(xs_list_new(), md5, title));
|
l = xs_list_append(l, xs_list_append(xs_list_new(), xs_list_get(l2, -1), title));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1764,26 +1766,58 @@ xs_list *list_maint(snac *user, const char *list, int op)
|
|||||||
|
|
||||||
case 1: /** create new list (list is the name) **/
|
case 1: /** create new list (list is the name) **/
|
||||||
{
|
{
|
||||||
FILE *f;
|
xs *lol = list_maint(user, NULL, 0);
|
||||||
xs *dir = xs_fmt("%s/list/", user->basedir);
|
int c = 0;
|
||||||
xs *md5 = xs_md5_hex(list, strlen(list));
|
xs_list *v;
|
||||||
|
int add = 1;
|
||||||
|
|
||||||
mkdirx(dir);
|
/* check if this list name already exists */
|
||||||
|
while (xs_list_next(lol, &v, &c)) {
|
||||||
|
if (strcmp(xs_list_get(v, 1), list) == 0) {
|
||||||
|
add = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
xs *fn = xs_fmt("%s%s.id", dir, md5);
|
if (add) {
|
||||||
|
FILE *f;
|
||||||
|
xs *dir = xs_fmt("%s/list/", user->basedir);
|
||||||
|
xs *id = xs_fmt("%010x", time(NULL));
|
||||||
|
|
||||||
if ((f = fopen(fn, "w")) != NULL) {
|
mkdirx(dir);
|
||||||
fprintf(f, "%s\n", list);
|
|
||||||
fclose(f);
|
xs *fn = xs_fmt("%s%s.id", dir, id);
|
||||||
|
|
||||||
|
if ((f = fopen(fn, "w")) != NULL) {
|
||||||
|
fprintf(f, "%s\n", list);
|
||||||
|
fclose(f);
|
||||||
|
}
|
||||||
|
|
||||||
|
l = xs_stock(XSTYPE_TRUE);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
l = xs_stock(XSTYPE_FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2: /** delete list (list is the id) **/
|
||||||
|
{
|
||||||
|
if (xs_is_hex(list)) {
|
||||||
|
xs *fn = xs_fmt("%s/list/%s.id", user->basedir, list);
|
||||||
|
unlink(fn);
|
||||||
|
|
||||||
|
fn = xs_replace_i(fn, ".id", ".lst");
|
||||||
|
unlink(fn);
|
||||||
|
|
||||||
|
fn = xs_replace_i(fn, ".list", ".idx");
|
||||||
|
unlink(fn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2: /** delete list (list is md5 id) **/
|
case 3: /** list content (list is the id) **/
|
||||||
break;
|
|
||||||
|
|
||||||
case 3: /** list content (list is md5 id) **/
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
51
mastoapi.c
51
mastoapi.c
@ -1766,7 +1766,6 @@ int mastoapi_get_handler(const xs_dict *req, const char *q_path,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
if (strcmp(cmd, "/v1/lists") == 0) { /** **/
|
if (strcmp(cmd, "/v1/lists") == 0) { /** **/
|
||||||
/* snac does not support lists */
|
|
||||||
if (logged_in) {
|
if (logged_in) {
|
||||||
xs *lol = list_maint(&snac1, NULL, 0);
|
xs *lol = list_maint(&snac1, NULL, 0);
|
||||||
xs *l = xs_list_new();
|
xs *l = xs_list_new();
|
||||||
@ -2656,17 +2655,22 @@ int mastoapi_post_handler(const xs_dict *req, const char *q_path,
|
|||||||
|
|
||||||
if (xs_type(title) == XSTYPE_STRING) {
|
if (xs_type(title) == XSTYPE_STRING) {
|
||||||
/* add the list */
|
/* add the list */
|
||||||
list_maint(&snac, title, 1);
|
|
||||||
|
|
||||||
xs *out = xs_dict_new();
|
xs *out = xs_dict_new();
|
||||||
|
|
||||||
out = xs_dict_append(out, "title", title);
|
if (xs_type(list_maint(&snac, title, 1)) == XSTYPE_TRUE) {
|
||||||
out = xs_dict_append(out, "replies_policy", xs_dict_get_def(args, "replies_policy", "list"));
|
out = xs_dict_append(out, "title", title);
|
||||||
out = xs_dict_append(out, "exclusive", xs_stock(XSTYPE_FALSE));
|
out = xs_dict_append(out, "replies_policy", xs_dict_get_def(args, "replies_policy", "list"));
|
||||||
|
out = xs_dict_append(out, "exclusive", xs_stock(XSTYPE_FALSE));
|
||||||
|
|
||||||
|
status = 200;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
out = xs_dict_append(out, "error", "cannot create list");
|
||||||
|
status = 422;
|
||||||
|
}
|
||||||
|
|
||||||
*body = xs_json_dumps(out, 4);
|
*body = xs_json_dumps(out, 4);
|
||||||
*ctype = "application/json";
|
*ctype = "application/json";
|
||||||
status = 200;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
status = 422;
|
status = 422;
|
||||||
@ -2691,16 +2695,43 @@ int mastoapi_delete_handler(const xs_dict *req, const char *q_path,
|
|||||||
(void)b_size;
|
(void)b_size;
|
||||||
(void)ctype;
|
(void)ctype;
|
||||||
|
|
||||||
|
int status = 404;
|
||||||
|
|
||||||
if (!xs_startswith(q_path, "/api/v1/") && !xs_startswith(q_path, "/api/v2/"))
|
if (!xs_startswith(q_path, "/api/v1/") && !xs_startswith(q_path, "/api/v2/"))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
srv_debug(1, xs_fmt("mastoapi_delete_handler %s", q_path));
|
snac snac = {0};
|
||||||
|
int logged_in = process_auth_token(&snac, req);
|
||||||
|
|
||||||
xs *cmd = xs_replace_n(q_path, "/api", "", 1);
|
xs *cmd = xs_replace_n(q_path, "/api", "", 1);
|
||||||
|
|
||||||
if (xs_startswith(cmd, "/v1/push/subscription") || xs_startswith(cmd, "/v2/push/subscription")) { /** **/
|
if (xs_startswith(cmd, "/v1/push/subscription") || xs_startswith(cmd, "/v2/push/subscription")) { /** **/
|
||||||
// pretend we deleted it, since it doesn't exist anyway
|
// pretend we deleted it, since it doesn't exist anyway
|
||||||
return 200;
|
status = 200;
|
||||||
}
|
}
|
||||||
return 0;
|
else
|
||||||
|
if (xs_startswith(cmd, "/v1/lists/")) {
|
||||||
|
if (logged_in) {
|
||||||
|
xs *l = xs_split(cmd, "/");
|
||||||
|
char *id = xs_list_get(l, -1);
|
||||||
|
|
||||||
|
if (xs_is_hex(id)) {
|
||||||
|
list_maint(&snac, id, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
status = 200;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
status = 401;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* user cleanup */
|
||||||
|
if (logged_in)
|
||||||
|
user_free(&snac);
|
||||||
|
|
||||||
|
srv_debug(1, xs_fmt("mastoapi_delete_handler %s %d", q_path, status));
|
||||||
|
|
||||||
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
2
snac.h
2
snac.h
@ -174,7 +174,7 @@ int is_hidden(snac *snac, const char *id);
|
|||||||
void tag_index(const char *id, const xs_dict *obj);
|
void tag_index(const char *id, const xs_dict *obj);
|
||||||
xs_list *tag_search(char *tag, int skip, int show);
|
xs_list *tag_search(char *tag, int skip, int show);
|
||||||
|
|
||||||
xs_list *list_maint(snac *user, const char *list, int op);
|
xs_val *list_maint(snac *user, const char *list, int op);
|
||||||
|
|
||||||
int actor_add(const char *actor, xs_dict *msg);
|
int actor_add(const char *actor, xs_dict *msg);
|
||||||
int actor_get(const char *actor, xs_dict **data);
|
int actor_get(const char *actor, xs_dict **data);
|
||||||
|
Loading…
Reference in New Issue
Block a user