1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
# What is this?
This is a URL shortener, a sort of a backend project practice. It uses GNU's
`libmicrohttpd` and `sqlite3` the database. The reason for me chosing
`libmicrohttpd` is simple: it's lightweight and does not have too much magic.
The reason for me chosing `sqlite` as a database is even simpler: it's fucking
based.
Sadly, I think I might want to run this inside a docker container on my server,
because it's C after and I'm no expect on security. Maybe I'll run it in a
chroot environment, who knows.
# Features
* Will try to process URLs in this order:
0. Checks if API endpoint exists at that URL, and if it does, and executes it.
0. Checks if URL is a shortened link name, and if it is, redirects there.
0. Tries to send a file at the location pointed to by URL (relative to
executable's location).
0. Tries to format file like this: `www/{URL}.html` and display the page \[e.g.
`/docs` -> `www/docs.html`\]
0. Returns 404
* \[In future\]: uses `inotify` to track changes in `endpoints.so` and reload it
* \[In future\]: `SIGUSR1` makes it reload `endpoints.so`
# API
Pretty small. See [html docs page](www/docs.html).
# Build
## Requirements
0. submodules
0. `make`
0. `gperf`
0. `cc`
0. linker that supports `.ld` scripts
0. `libmicrohttpd` installed with headers available.
0. `sqlite` installed with headers available.
0. git submodules cloned ([c\_headers](https://git.twistea.su/cgit/c_headers))
all of the paths can be configured in [`Makefile`](Makefile)
## Steps
`make`
## Os-specific dependency installation:
* debian12: `# apt install libmicrohttpd-dev libsqlite3-dev gperf`
* arch: `# pacman -S libmicrohttpd sqlite gperf`
# Run
0. Copy `config.env.default` to `config.env`, change environment variables in
there to match your needs
0. `make run`, or `env $(cat config.env) ./main`, or `. config.env && ./main`,
whichever fits your needs the most.
# License
AGPL. Sorry fellas, gotta stay free (as in "freedom"). Also,
[sorry, google employees](https://opensource.google/documentation/reference/patching#forbidden)
# Contributing
[my email](mailto:sotov@twistea.su)
I highly doubt that anyone whould contribute to this meme of a project, but you
know better, so mail me if you want. I accept modifications in code as tar'ed
archives of git repos.
|