122 lines
3.5 KiB
Markdown
122 lines
3.5 KiB
Markdown
# shi
|
|
**SH**ell **I**mageboard
|
|
(second edition)
|
|
|
|
actually pretty decent
|
|
|
|
### features
|
|
- its all POSIX sh
|
|
- seriously
|
|
- posting
|
|
- replies
|
|
- images
|
|
- timestamps
|
|
- more
|
|
|
|
### how to set up
|
|
- clone this repo
|
|
- cd to this repo
|
|
- `. ./console.sh` to start the shi console
|
|
- `start_listener` to start listening for posts
|
|
- you might want to do `tail -f log.txt` in another terminal to see whats going on
|
|
|
|
### how backends work
|
|
- shi has a builtin framework for swappable backends both for post receiving and storage,
|
|
currently there is:
|
|
- tar backend
|
|
- like the old version of shi
|
|
- receives tar files through nc and generates posts
|
|
- bad
|
|
- don't use it
|
|
- http backend
|
|
- listens for an http POST request with form data
|
|
- allows user-friendly html post form
|
|
- cool
|
|
- good
|
|
- file db backend
|
|
- stores posts as a series of text files in folders
|
|
- unchanged from old shi
|
|
- ok
|
|
- **how backends work**
|
|
- **listening**
|
|
- a backend is a shell script with a `listen` function
|
|
- this function is expected to continuously output post data it receives
|
|
- as long as the backend has a listen function that continuously outputs data to stdout in the proper format,
|
|
shi doesn't care where it comes from.
|
|
- **db**
|
|
- a db backend is simply a shell script providing the following functions:
|
|
- `path_to_post <post id>`
|
|
- `create post <board> <parent> <user> <title> <content> <image_name> <image_content> <post_id> <post_type>`
|
|
- `get_post_data <post_data_path> <item>`
|
|
- note that since these functions are both in the same file, `post_data_path` can be in any format you desire
|
|
- again, shi doesn't care how this is done, only that it follows this format
|
|
|
|
### anatomy of a post
|
|
- user
|
|
- name of user who posted the post
|
|
- title
|
|
- title of post
|
|
- this will be ignored for replies
|
|
- content
|
|
- the text content of a post
|
|
- thumb_path
|
|
- optional, filesystem path to the thumbnail of the post's image
|
|
- image_path
|
|
- optional, filesystem path to the image
|
|
- html_path
|
|
- path to where the html of the post is stored
|
|
- post_id
|
|
- unique numerical id of the post
|
|
- post_type
|
|
- type of post, specifies what template to use
|
|
- currently there is 'oppost' and 'reply' supported
|
|
- replies
|
|
- newline separated list of post_id's for all the replies to the op post
|
|
- a trailing /. is added to prevent `find` from seeing `post_data_path` itself
|
|
|
|
### defining new post templates
|
|
- edit your template of choice in the 'templates' folder,
|
|
- {{{ TRIPLE BRACES }}} will be replaced with their respective variables
|
|
|
|
### style notes
|
|
- if it can be done in a single line, you can set a variable to it,
|
|
otherwise declare the variable as empty and then set it to your operation
|
|
- follow shellcheck
|
|
|
|
### files n folders
|
|
- boards
|
|
- where all the html for the boards is stored
|
|
- console.sh
|
|
- source this to allow you to control shi
|
|
- globals.sh
|
|
- global variables (really just settings)
|
|
- inbox
|
|
- where posts data is cached before being processed
|
|
- latest
|
|
- the id of the latest post
|
|
- very important!!
|
|
- LICENSE
|
|
- free software, free society
|
|
- log.txt
|
|
- log
|
|
- problems.txt
|
|
- current issues with shi
|
|
- README.md
|
|
- this file
|
|
- reset.sh
|
|
- debug script that nukes all boards and completely resets shi
|
|
- don't use this unless you've really screwed up
|
|
- shi.sh
|
|
- memories
|
|
- templates
|
|
- templates
|
|
- util.sh
|
|
- utility functions employed by console.sh
|
|
|
|
|
|
|
|
|
|
this whole rewrite started because of a feature request by desvox. Unfortunately, due to the complexity of responding to http requests with sh, this feature was not added.
|
|
|
|
Sorry desvox :(
|