88 lines
4.0 KiB
Markdown
88 lines
4.0 KiB
Markdown
# sessions
|
|
|
|
A minimalist backend for [sessions-ext](https://gitea.dwysokinski.me/twhelp/sessions-ext).
|
|
|
|
## Getting started
|
|
|
|
### Development
|
|
|
|
#### Setting up the environment
|
|
|
|
Prerequisites:
|
|
|
|
1. **Go** (>= 1.19)
|
|
2. **Node.js** (LTS, needed for commitlint)
|
|
3. **Kubernetes** (>= 1.25.0)
|
|
1. **minikube**
|
|
2. **Docker Desktop**
|
|
4. **Docker CLI**
|
|
5. **Skaffold**
|
|
6. **pre-commit**
|
|
7. **IDE/Code editor** (e.g. Goland, VSCode, vim, neovim)
|
|
8. **direnv** (optional, but recommended)
|
|
|
|
```shell
|
|
# if you have direnv installed
|
|
direnv allow
|
|
|
|
# install git hooks and required tools
|
|
make install
|
|
|
|
# run all required services
|
|
skaffold run --port-forward=true --tail=true
|
|
|
|
# stop all of them
|
|
skaffold delete
|
|
```
|
|
|
|
#### Running unit tests
|
|
|
|
At least one of the following is required to run unit tests:
|
|
- Docker ([dockertest](https://github.com/ory/dockertest) will spin up a database)
|
|
- Postgres database
|
|
|
|
```shell
|
|
# Docker
|
|
go test -v ./...
|
|
|
|
# Postgres database
|
|
TESTS_DB_DSN=postgres://sessions:sessions_pass@127.0.0.1/sessions go test -v ./...
|
|
```
|
|
|
|
#### Creating a new database migration
|
|
|
|
```shell
|
|
# create a migration
|
|
go run ./cmd/sessions/main.go db migration create go migration 1
|
|
```
|
|
|
|
![img.png](docs/migration.png)
|
|
|
|
## Configuration options
|
|
|
|
Configuration options can be specified via environment variables.
|
|
|
|
| Env variable | Default | Description |
|
|
|--------------------------------|-----------------------|----------------------------------------------------------------------------------------------------------------|
|
|
| ``APP_MODE`` | ``development`` | Whether to use development or production settings |
|
|
| ``DB_DSN`` | | **Required.** Syntax: ``postgres://user:password@host:5432/db?sslmode=disable``. Only Postgres is supported. |
|
|
| ``DB_MAX_OPEN_CONNECTIONS`` | ``5`` | Maximum number of open connections to the database (https://pkg.go.dev/database/sql#DB.SetMaxOpenConns) |
|
|
| ``DB_MAX_IDLE_CONNECTIONS`` | ``2`` | Maximum number of connections in the idle connection pool (https://pkg.go.dev/database/sql#DB.SetMaxIdleConns) |
|
|
| ``DB_CONNECTION_MAX_LIFETIME`` | ``3m`` | Maximum amount of time a connection may be reused (https://pkg.go.dev/database/sql#DB.SetConnMaxLifetime) |
|
|
| ``API_SWAGGER_ENABLED`` | ``false`` | Enables the API documentation endpoints (e.g. ``/api/v1/swagger/index.html``, ``/api/v1/swagger/doc.json``) |
|
|
| ``API_SWAGGER_HOST`` | | Host (name or ip) serving the API (e.g. localhost:8080) |
|
|
| ``API_SWAGGER_SCHEMES`` | ``http,https`` | Comma-separated list of protocols |
|
|
| ``API_CORS_ENABLED`` | ``false`` | Enables CORS headers |
|
|
| ``API_CORS_ALLOWED_ORIGINS`` | | Comma-separated list of allowed domains |
|
|
| ``API_CORS_ALLOW_CREDENTIALS`` | ``false`` | Whether requests with credentials are allowed |
|
|
| ``API_CORS_ALLOWED_METHODS`` | ``HEAD,GET,POST,PUT`` | Comma-separated list of allowed methods |
|
|
| ``API_CORS_MAX_AGE`` | ``300`` | Max time to cache response (seconds) |
|
|
|
|
## License
|
|
|
|
Distributed under the MIT License. See ``LICENSE`` for more information.
|
|
|
|
## Contact
|
|
|
|
Dawid Wysokiński - [contact@dwysokinski.me](mailto:contact@dwysokinski.me)
|