2023-07-11 20:57:08 +00:00
|
|
|
@name .
|
|
|
|
|
2020-08-24 17:20:33 +00:00
|
|
|
# SMR
|
2020-05-15 19:10:11 -04:00
|
|
|
|
2023-07-11 20:57:08 +00:00
|
|
|
|
2020-08-24 17:20:33 +00:00
|
|
|
## Overview
|
2020-05-15 19:10:11 -04:00
|
|
|
|
2020-08-24 17:20:33 +00:00
|
|
|
This repository contains the source code to a pastebin clone. It was made after
|
|
|
|
concerns with pastebin.com taking down certain kinds of content. SMR aims to
|
|
|
|
be small, fast, and secure. It is built on top of [Kore](https://kore.io), using
|
|
|
|
[luajit](https://luajit.org) to expose a Lua programming environment. It uses
|
2021-02-22 07:46:57 +00:00
|
|
|
[sqlite3](https://sqlite.org) as it's database. SMR is implemented in about
|
2023-08-09 22:28:48 +00:00
|
|
|
5k SLOC. Contributions welcome.
|
2022-11-21 00:32:49 +00:00
|
|
|
|
2023-07-11 20:57:08 +00:00
|
|
|
Language|files|blank|comment|code
|
|
|
|
:-------|-------:|-------:|-------:|-------:
|
|
|
|
Lua|37|331|678|2197
|
|
|
|
HTML|22|100|0|1021
|
|
|
|
C|4|102|251|712
|
|
|
|
JavaScript|4|23|34|293
|
|
|
|
SQL|36|6|61|274
|
|
|
|
make|1|30|6|146
|
|
|
|
CSS|3|4|8|74
|
|
|
|
C/C++ Header|4|3|0|48
|
|
|
|
SUM:|111|599|1038|4765
|
2020-08-24 17:20:33 +00:00
|
|
|
|
|
|
|
## Roadmap
|
|
|
|
|
|
|
|
* Accounts (complete)
|
|
|
|
* Comments (complete)
|
2020-10-12 00:01:03 +00:00
|
|
|
* Tags (complete)
|
2020-12-29 19:13:33 +00:00
|
|
|
* Search (complete)
|
2022-11-21 00:32:49 +00:00
|
|
|
* Archive (complete)
|
|
|
|
* Author biographies (complete)
|
|
|
|
* Kore 4.2.0 (complete)
|
|
|
|
* addon api
|
2020-08-24 17:20:33 +00:00
|
|
|
|
2021-01-11 03:35:25 +00:00
|
|
|
TODO's:
|
2022-11-21 00:32:49 +00:00
|
|
|
|
|
|
|
* Currently, people can post comments to unlisted stories even if they don't have
|
2021-01-11 03:35:25 +00:00
|
|
|
the correct link.
|
2022-11-21 00:32:49 +00:00
|
|
|
* Find a replacement preprocessor
|
|
|
|
* The archive is currently generated weekly from a cron job, and served
|
|
|
|
syncronously. We can generate a zip file on-the-fly instead, and if the client
|
|
|
|
disconnects, it's fine to drop the whole thing.
|
|
|
|
* We can simplify a lot of error handling logic by setting sql prepared statements to reset during error unwinding.
|
|
|
|
* We can simplify a lot of business logic by having requests parse their parameters eagerly.
|
2021-01-11 03:35:25 +00:00
|
|
|
|
2020-12-23 06:07:00 +00:00
|
|
|
## Hacking
|
|
|
|
|
|
|
|
If you want to contribute to this repository:
|
2020-12-23 07:14:56 +00:00
|
|
|
1. Install the [kore webserver](https://kore.io)(Documentation -> installation)
|
|
|
|
2. Use a `kodev create smr` to create a blank kore application
|
|
|
|
3. Install Lua and Luarocks from your package manager
|
|
|
|
4. Use Luarocks to install the following dependencies (`luarocks install <package>`)
|
|
|
|
* etlua - Lua templating, comparable to Jinja for Python
|
|
|
|
* lpeg - Parsing Expression Grammers, used to build text parsers
|
|
|
|
* lsqlite3 - Sqlite3 for Lua, a lightweight database
|
|
|
|
* lua-zlib - Data compression
|
|
|
|
5. You may need to modify conf/build.conf, I use Lua 5.1 on my development machine,
|
|
|
|
but everything should still work with later versions.
|
2021-01-04 03:05:50 +00:00
|
|
|
6. Install [spp](https://github.com/radare/spp)
|
|
|
|
7. Clone this repository into the smr folder, cd into the root, and run `make`!
|
2022-02-20 00:21:50 +00:00
|
|
|
* You may need to modify the configuration in the Makefile, add `test.monster 127.0.0.1` to your `/etc/hosts`, modify command invocation, ect.
|
2020-12-23 06:07:00 +00:00
|
|
|
|
2023-07-11 20:57:08 +00:00
|
|
|
## Folder layout
|
|
|
|
|
|
|
|
While the core business logic of SMR is kept under 5k SLOC, tests, documentation,
|
|
|
|
and other resources exceed this limit. The following is an explanation of what
|
|
|
|
goes where:
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
smr/
|
|
|
|
assets/ - kore assets, compiled into the binary. Javascript and CSS are kept here.
|
|
|
|
cert/ - kore certificates. This is a default to get you started, but in production you should set certificates appropriately.
|
|
|
|
conf/ - kore configuration. See https://docs.kore.io/4.2.0/applications/koreconf.html
|
|
|
|
doc/ - documentation for smr that doesn't belong to any particular file
|
|
|
|
kore_chroot/ - a chroot to get you started modifying smr. In production this should be a properly configured chroot
|
|
|
|
packaging/ - scripts for packaging smr for different systems
|
|
|
|
spec/ - unit and system tests for smr
|
|
|
|
src/ - all the business logic of smr
|
|
|
|
lua/ - Lua shared code between endpoints
|
|
|
|
endpoints/ - 1-per endpoint business logic
|
|
|
|
pages/ - Etlua templated html, exposed from src/lua/pages.lua
|
|
|
|
sql/ - Sqlite queries, exposed from src/lua/queries.lua
|
|
|
|
tools/ - command line tools for working with the smr database
|
|
|
|
accounts/ - tool for modifying author accounts
|
|
|
|
archive/ - tool for generating archives of the site (NOT the same as backups)
|
|
|
|
migrate/ - tool for migrating/upgrading the smr database
|
|
|
|
</pre>
|
|
|
|
|
2022-02-20 00:21:50 +00:00
|
|
|
## Misc. notes
|
2020-08-24 17:20:33 +00:00
|
|
|
|
|
|
|
SMR requires a slightly modified version of Kore to run. See [my kore patches](https://git.fuwafuwa.moe/rmalley/kore_patches)
|
|
|
|
for the changes I needed to make to get the JIT compiler playing nice with
|
|
|
|
Kore's seccomp restrictions. There are a few other changes, like modified kore
|
|
|
|
to accept any text as input for things like file upload.
|
2021-01-04 03:05:50 +00:00
|
|
|
|
2020-12-23 06:07:00 +00:00
|
|
|
**UPDATE (12/18/2020)**
|
2021-01-04 03:05:50 +00:00
|
|
|
|
2020-12-23 06:07:00 +00:00
|
|
|
Kore 4.0 no longer needs the seccomp changes, as those have been exposed to
|
|
|
|
library users, and smr has been updated appropriately. It still needs the
|
|
|
|
allow-multiline-input patch though.
|