diff --git a/src/http.c b/src/http.c
new file mode 100644
index 0000000..5cbfe12
--- /dev/null
+++ b/src/http.c
@@ -0,0 +1,40 @@
+/*
+ * Treebird - Lightweight frontend for Pleroma
+ * Copyright (C) 2022 Nekobit
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+#include "http.h"
+
+#define REDIR_HTML_BEGIN "" \
+ "" \
+ "
" \
+ "Redirecting" \
+ "" \
+ ""
+#define REDIR_HTML_END "" \
+ ""
+
+void redirect(char* status, char* location)
+{
+ char* loc_str = location ? location : "/";
+
+ printf("Status: %s\r\n"
+ "Location: %s\r\n\r\n"
+ REDIR_HTML_BEGIN "Redirecting to %s..." REDIR_HTML_END,
+ status,
+ loc_str,
+ loc_str);
+}
diff --git a/src/http.h b/src/http.h
new file mode 100644
index 0000000..acf7158
--- /dev/null
+++ b/src/http.h
@@ -0,0 +1,27 @@
+/*
+ * Treebird - Lightweight frontend for Pleroma
+ * Copyright (C) 2022 Nekobit
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+#ifndef HTTP_H
+#define HTTP_H
+#include
+
+#define REDIRECT_303 "303 See Other"
+
+void redirect(char* status, char* location);
+
+#endif // HTTP_H
diff --git a/src/page_config.c b/src/page_config.c
index 6821608..01ae4e3 100644
--- a/src/page_config.c
+++ b/src/page_config.c
@@ -19,6 +19,7 @@
#include
#include
#include
+#include "http.h"
#include "base_page.h"
#include "../config.h"
#include "easprintf.h"
@@ -110,5 +111,5 @@ void content_config_appearance(struct session* ssn, mastodont_t* api, char** dat
void content_config(struct session* ssn, mastodont_t* api, char** data)
{
-
+ redirect(REDIRECT_303, "/config/general");
}
diff --git a/src/status.c b/src/status.c
index 343ff26..6d898f7 100644
--- a/src/status.c
+++ b/src/status.c
@@ -18,6 +18,7 @@
#include
#include
+#include "http.h"
#include "base_page.h"
#include "status.h"
#include "easprintf.h"
@@ -73,11 +74,7 @@ void content_status_create(struct session* ssn, mastodont_t* api, char** data)
try_post_status(ssn, api);
- printf("Status: 303 See Other\r\n"
- "Location: %s\r\n"
- "Content-Length: 14\r\n\r\n"
- "Redirecting...",
- referer ? referer : "/");
+ redirect(REDIRECT_303, referer);
}
int try_interact_status(struct session* ssn, mastodont_t* api, char* id)