Compare commits

...

2 Commits

Author SHA1 Message Date
32dcf0c4a4
docs: moved index contents to "getting started" 2023-05-28 10:56:51 -04:00
a064bc9802
sachet/server/models.py: no more url_for errors in CLI
url_for is now called when requested and not at user init. this means
that creating the user via the CLI doesn't complain about not being in
an active request anymore
2023-05-28 10:48:28 -04:00
3 changed files with 99 additions and 52 deletions

92
docs/getting_started.rst Normal file
View File

@ -0,0 +1,92 @@
Getting started
===============
.. note::
Currently, Sachet does not have the configs to run under WSGI for production yet.
This page only explains how to get Sachet up and running for development purposes.
Installation
------------
Clone the repo::
git clone https://github.com/dogeystamp/sachet-server
cd sachet-server
Create a venv with required dependencies::
python -m venv venv
source venv/bin/activate
python -m pip install -r requirements.txt
Create a configuration file::
cp config.yml.example config.yml
Remember to set up a secret key in ``config.yml``:
.. code-block:: yaml
SECRET_KEY: "41DJjqp6+Ztk9krJkwbZem1+JijowDU6ifkgdntF2FK3ygi5HM"
.. note::
You can generate a secret key using the following command on Linux::
cat /dev/urandom | base64 | head -c 50
.. warning::
Keep this secret key safe!
If you leak this key, a malicious attacker could authenticate as any user on your server.
Initialize the database::
flask --debug --app sachet.server db upgrade
Set up an administrator user::
flask --debug --app sachet.server user create --username admin --admin yes --password password123
.. warning::
Setting the password via the command-line is not safe.
In a real environment, you should reset this password immediately (see :ref:`authentication_password_change`.)
You can now start Sachet in development mode::
flask --debug --app sachet.server run
Development
-----------
.. note::
This section also requires being in the virtual environment::
source venv/bin/activate
Testing
^^^^^^^
You can run tests using pytest::
pytest --cov --cov-report term-missing
Linting
^^^^^^^
Please use the linter before submitting code::
black .
Database maintenance
--------------------
To clean up the database (remove stale entries)::
flask --app sachet.server cleanup
Otherwise, to upgrade the database after a schema change::
flask --app sachet.server db upgrade

View File

@ -10,6 +10,7 @@ Welcome to Sachet's documentation!
:maxdepth: 2
:caption: Contents:
getting_started
authentication
pagination
permissions
@ -19,56 +20,6 @@ Welcome to Sachet's documentation!
Sachet is a small file-sharing server.
development
-----------
To start sachet in dev mode:
Clone the repo::
git clone https://github.com/dogeystamp/sachet
cd sachet
Create a venv with required dependencies::
python -m venv venv
source venv/bin/activate
python -m pip3 install -r requirements.txt
Create a configuration file (and set the secret key!)::
cp config.yml.example config.yml
vim config.yml
Start Flask in development mode::
flask --debug --app sachet.server run
tests
^^^^^
Run tests with pytest::
pytest --cov --cov-report term-missing
linting
^^^^^^^
Please use the linter before submitting code::
black .
database maintenance
--------------------
To clean up the database (remove stale entries)::
flask --app sachet.server cleanup
Otherwise, to upgrade the database after a schema change::
flask --app sachet.server db upgrade
Indices and tables
==================

View File

@ -89,9 +89,13 @@ class User(db.Model):
self.password = self.gen_hash(password)
self.username = username
self.url = url_for("users_blueprint.user_api", username=self.username)
self.register_date = datetime.datetime.now()
@property
def url(self):
"""URL linking to this resource."""
return url_for("users_blueprint.user_api", username=self.username)
def gen_hash(self, psswd):
"""Generates a hash from a password."""
return bcrypt.generate_password_hash(