diff --git a/.gitignore b/.gitignore index a5b6029..4be4109 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ filec **/*.o **/*.chtml mastodont-c +config.h \ No newline at end of file diff --git a/INSTALL.md b/INSTALL.md deleted file mode 100644 index 054628d..0000000 --- a/INSTALL.md +++ /dev/null @@ -1,40 +0,0 @@ -# Installing Treebird - -## Compiling - -You need the following libraries / packages: - -- libcurl - - Debian: `libcurl4-gnutls-dev` -- libcjson - - Debian: `libcjson-dev` - - Arch: `cjson` -- libpcre3 - - Debian: `libpcre3-dev` - -First, edit `config.h` to your instance's liking. - -`make` will clone the library, and compile both it and the project. - -`make update` should be run after updating, as it ensures both the library and the project are up to date. - -## Deploying - -After running `make`, Treebird's files will be in the `dist/` directory. _Copy_, ***DO NOT MOVE***, **everything but treebird.cgi** of this folder to your web server. Copy `treebird.cgi` to another directory of your choosing. - -- The example static files will be in `/var/www/treebird/`, with `treebird.cgi` in `/usr/local/bin/treebird.cgi`. - -### Using NGINX (and uWSGI) to serve Treebird -Treebird can be served over nginx by using a CGI server such as uwsgi. - -#### nginx -An example nginx configuration is available in [treebird.nginx.conf](./treebird.nginx.conf). -* Make sure to change `example.com` to your instance's domain. -* Make sure to change the `root` to wherever the static files are being stored - -#### uWSGI -uWSGI can be installed on debian with just `sudo apt isntall uwsgi`. - -An example configuration is available in [treebird.uwsgi.ini](./treebird.uwsgi.ini). This should be copied to `/etc/uwsgi/apps-enabled/treebird.ini` on debian (and potentially other) systems. - -##### Note: the uwsgi configuration file is currently very basic. \ No newline at end of file diff --git a/README.md b/README.md index c390fc5..c357228 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,28 @@ # Treebird -A pleroma frontend for cool people only. +![Treebird logo](./meta/treebird.png) + +A very lightweight Pleroma frontend. The goal is to create a frontend that's lightweight enough to be viewed without JS, but usable enough to improve the experience with JS. -Treebird uses C with FCGI, mastodont-c (another library that complements Treebird) for -communication, and plain JavaScript (100% optional). +Treebird uses C with FCGI, mastodont-c (library designed for Treebird, but can be used +for other applications as well), and plain JavaScript for the frontend (100% optional). -## Isn't FCGI outdated? +## Why? -No. +PleromaFE, pleroma's default frontend, uses way too much Javascript to be usable (and doesn't even support +all of it's own API features...). BloatFE is great, but designed only around Mastodon's api, and isn't as +modern or as lightweight as it could be. Soapbox is soapbox and does soapbox things. + +This led me to one choice, to develop my own frontend. + +## Compatibility + +Treebird respects compatibility with old browsers, and thus uses HTML table layouts, which are +supported even by most modern terminal web browsers. The core browser we aim to at least maintain compatibility +with is Netsurf, but most other browsers like GNU Emacs EWW, elinks, render Treebird wonderfully. ## Credits @@ -18,4 +30,4 @@ Please view the [`CREDITS`](./CREDITS) file. ## Installing -See [INSTALL.md](./INSTALL.md) +See [INSTALL.md](./docs/INSTALL.md) for instructions on Apache/Nginx. diff --git a/config.h b/config.def.h similarity index 87% rename from config.h rename to config.def.h index a1fe190..90afda8 100644 --- a/config.h +++ b/config.def.h @@ -16,7 +16,6 @@ * * The software's recognizable name. * - * * Example: "treebird" */ @@ -29,9 +28,9 @@ static char* const config_canonical_name = "treebird"; * This MUST include a slash at the end, and the protocol (like https://) at the * beginning * - * Example: "https://cum.desupost.soy/ + * Example: "https://shitposter.club/" */ -static char* const config_instance_url = "https://desuposter.club/"; +static char* const config_instance_url = "https://my-instace.social/"; /* * String: url_prefix @@ -41,7 +40,7 @@ static char* const config_instance_url = "https://desuposter.club/"; * * Example: "/treebird.cgi" */ -static char* const config_url_prefix = "/treebird.cgi"; +static char* const config_url_prefix = ""; /* * Bool: experimental_lookup @@ -62,6 +61,6 @@ static const int config_experimental_lookup = TRUE; * Enables the test page which dumps all CGI cookies, useful when * setting up a reverse proxy */ -static const unsigned config_test_page = TRUE; +static const unsigned config_test_page = FALSE; #endif // CONFIG_H diff --git a/docs/INSTALL.md b/docs/INSTALL.md new file mode 100644 index 0000000..78eab23 --- /dev/null +++ b/docs/INSTALL.md @@ -0,0 +1,61 @@ +# Installing Treebird + +## Compiling + +For the following GNU/Linux distributions, you will need the following libraries/packages: + +- libcurl + - Debian: `libcurl4-gnutls-dev` + - Arch: `curl` + - Void: `libcurl libcurl-devel` +- libcjson + - Debian: `libcjson-dev` + - Arch: `cjson` + - Void: `cJSON cJSON-devel` +- libpcre + - Debian: `libpcre3-dev` + - Void: `libpcre2` +- libfcgi + - Void: `fcgi fcgi-devel` + +Create a copy of `config.def.h` at `config.h`, edit the file with your information + +Run `make`. This will also clone mastodont-c, and compile both it and Treebird. + +If you `git pull` any changes, `make update` should be run after updating, as it ensures +the library is up to date. + +## Installation + +- TODO? + +Run `make install`, this might require root. + +If this succeeds (assuming you used default variables), you can now find Treebird at the following + +- `/usr/local/share/treebird/` - Contains CSS, images, and other meta files +- `/usr/local/bin/treebird` - Regular executable CGI file, test it by running it as is, it'll spit HTML out! + +### Using NGINX (and uWSGI) + +Treebird can be served over nginx by using a CGI server such as uwsgi. + +The example static files will be in `/var/www/treebird/`, with `treebird.cgi` at `/usr/local/bin/treebird`. + +After running `make`, Treebird's files will be in the `dist/` directory. _Copy_, ***DO NOT MOVE***, **everything but treebird.cgi** of this folder to your web server. Copy `treebird.cgi` to another directory of your choosing. + +#### nginx +An example nginx configuration is available in [treebird.nginx.conf](./sample/treebird.nginx.conf). +* Make sure to change `example.com` to your instance's domain. +* Make sure to change the `root` to wherever the static files are being stored + +#### uWSGI +uWSGI can be installed on debian with just `sudo apt isntall uwsgi`. + +An example configuration is available in [treebird.uwsgi.ini](./sample/treebird.uwsgi.ini). This should be copied to `/etc/uwsgi/apps-enabled/treebird.ini` on debian (and potentially other) systems. + +##### Note: the uwsgi configuration file is currently very basic. + +### Using Apache and mod_proxy_fcgi + +TODO \ No newline at end of file diff --git a/docs/sample/treebird.apache.conf b/docs/sample/treebird.apache.conf new file mode 100644 index 0000000..a7ca70d --- /dev/null +++ b/docs/sample/treebird.apache.conf @@ -0,0 +1,20 @@ +# TODO a lot of things +# THIS IS UNTESTED AND INCOMPLETE, ITS JUST FOR REFERENCE + +# Give access to our directory + + Require all granted + + + + DocumentRoot "/usr/local/share/treebird/dist" + + # Intercept meta files to be loaded before proxy + RewriteEngine on + RewriteRule ^/(.*).css /$1.css [L] + RewriteRule ^/(treebird\_logo|favicon).png /$1.png [L] + + # Set PATH_INFO variable + SetEnvIf Request_URI . proxy-fcgi-pathinfo=1 + ProxyPass / "fcgi://localhost:4000/" + \ No newline at end of file diff --git a/treebird.nginx.conf b/docs/sample/treebird.nginx.conf similarity index 100% rename from treebird.nginx.conf rename to docs/sample/treebird.nginx.conf diff --git a/treebird.uwsgi.ini b/docs/sample/treebird.uwsgi.ini similarity index 100% rename from treebird.uwsgi.ini rename to docs/sample/treebird.uwsgi.ini diff --git a/src/main.c b/src/main.c index bf3b00f..b616d0b 100644 --- a/src/main.c +++ b/src/main.c @@ -40,7 +40,7 @@ int main(void) // Global init mastodont_global_curl_init(); - unsigned run_count = 0; + unsigned run_count = 1; // API for (;FCGI_Accept() >= 0; ++run_count) @@ -75,8 +75,6 @@ int main(void) { "/notifications", content_notifications }, }; - printf("Run: %d\r\n", run_count); - handle_paths(&api, paths, sizeof(paths)/sizeof(paths[0])); // Cleanup @@ -88,6 +86,8 @@ int main(void) // can't even think reading them memset(&cookies, 0, sizeof(cookies)); memset(&post, 0, sizeof(post)); + + ++run_count; } mastodont_global_curl_cleanup();