Skip to content

Repository files navigation

isabelle-core

Build Status

Isabelle is a Rust-based framework for building safe and performant servers for the variety of use cases.

Features

  • Unified item storage with addition, editing and deletion support.
  • Collection hooks allowing plugins to do additional checks or synchronization.
  • Security checks.
  • E-Mail sending support.
  • Google Calendar integration.
  • Login/logout functionality.
  • One-time password support.
  • Self-describing HTTP API: an OpenAPI 3.1 document generated from the running deployment, plugin routes included.

API description

The full HTTP surface of a running deployment is described by an OpenAPI 3.1 document the server generates on request:

  • GET /openapi.json — the document itself.
  • GET /docs — the same thing rendered as a static page (no scripts, no external assets, works offline).

Both are public. A description is not a credential: every endpoint it names still authenticates its own callers, so publishing it opens nothing. It does say which plugin routes exist and which collections the store holds — a deployment that would rather not publish that starts core with --openapi-private, which serves both to administrators only.

It is generated rather than committed because half of the surface only exists at runtime: each extra_route / extra_unprotected_route / extra_rest_route in internals.js becomes a real path at startup, and the collection parameter is constrained to the collections the store actually holds. The short list below covers the endpoints core itself always has.

Endpoints

  1. GET /is_logged_in: check the login status.

Result:

{
	"username": "<username>",
	"id": <user id>,
	"role": [ "role_is_admin" ],
	"site_name": "Test",
	"site_logo": "Test Logo"
	"licensed_to": "Test Company"
}
  1. POST /login (username, password inside the post request):
{
	"succeeded": true/false,
	"error": "detailed error",
}
  1. POST /logout:

  2. GET /itm/list (collection, [id], [id_min], [id_max], [skip], [limit], [sort_key], [filter]): read the item from the collection

{
	"map": [ <id>: {} ],
	"total_count": <value>
}
  1. POST /itm/edit ("item" inside the post request and inside the query string, "collection" and "merge" = false/true in query): edit the item in collection.
{
	"succeeded": true/false,
	"error": "detailed error",
}
  1. POST /itm/del (collection, id): delete the item from the collection
{
	"succeeded": true/false,
	"error": "detailed error",
}

Dependencies

  • Python 3 is needed for Google Calendar integration

Building

Building Isabelle is as easy as Cargo invocation:

cargo build

Running

Use run.sh script:

./run.sh

License

MIT

About

Isabelle Core

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages