Skip to content
/ site Public
forked from juxt-site/site

A platform for building stateful API services.

Notifications You must be signed in to change notification settings

l4e21/site

 
 

Repository files navigation

Site (2.0)

Site is an Application Data Platform, allowing the deployment of Application Programming Interfaces to serve state to applications.

Description

Site offers the following:

  • Bitemporal data storage (via XTDB)

  • User authentication (including OpenID)

  • Flexible access-control (RBAC, ABAC and policy-based)

  • Support for OpenAPI and GraphQL programmable APIs, with an embedded powerful language.

  • A built-in OAuth2 Authorization Server for issuing access tokens

  • Excellent conformance with standards (HTTP, OAuth2, OpenID) to maximise interoperability and minimize lock-in

On top of these features, Site has strong support for data governance. Every state of the database is accessible at any point in time. Every change to the database is auditable, so you can find out who made which change to the data, and when.

OAuth2

Site fully implements the OAuth2 Authorization Framework. Site assumes the roles of a Resource Server and Authorization Server.

Internal Developer Platforms

Site can be adopted as part of an Internal Developer Platform (IDP).

Status

Site 2.0 is not yet ready for evaluation outside of JUXT, and is in the process of maturing. We are developing 'in the open', please treat this repository in that spirit.

The previous 1.0 generation of Site is maintained at https://github.com/juxt/site.

Which types of projects might I use Site for?

  • You want to get started on a project quickly, and there are requirements for the project to serve data securely over an API.

  • You are building an Internal Developer Platform (IDP) and want to provide a solution to your developers to help them speed their development of APIs.

  • You have a dataset that you want to make available to consumers/customers via a secure OAuth2-compliant API, but don’t want to build a system from scratch.

In these cases, JUXT can provide expert guidance, consulting and development resources, if required. Contact [email protected] to schedule an appointment.

Testing

Run the tests with make test if you have make installed, or if not, with clojure -M:test -m kaocha.runner test.

Technical Description

Site is a standards-compliant web server, fulfilling the roles of an OAuth2 resource server and authorization server.

resource server

The server hosting the protected resources, capable of accepting and responding to protected resource requests using access tokens.

Resources are documents which represent a resource’s identity (URI), configuration and current state (which might be some data, image or other media). Site stores resources in a database.

A resource request is a standard web request to a URI (as part of an API, such as OpenAPI) or GraphQL request.

Requests contain an access-token, acquired from an authorization server:

authorization server

The server issuing access tokens to the client after successfully authenticating the resource owner and obtaining authorization.

Currently, the only supported database is JUXT’s immutable XTDB database. XTDB is a good fit for Site, since many of its features (such as document ids and references) map cleanly onto web concepts (such as URIs and links).

Features

Current development is still focussed on the technical feature set, as required to conform to the relevant standards and provide good interoperability.

Resource Server

  • Content Negotiation

  • Conditional Requests

  • Access Control (RBAC, ABAC or policy based)

  • GraphQL

Authorization Server

  • Client Registration

  • User Authentication (Basic, Login form, OpenID)

  • OAuth2 access token grants

Programming Site

Some types of resource, such as 'operations', may contain Site 'programs' that are executed when required. All resources are stored in the database, including all program code.

Currently, the only available programming language is SCI.

Consulting

Contact [email protected] if you would like help, we can provide professional consulting services for Site and/or XTDB.

License

The MIT License (MIT)

Copyright © 2020-2023 JUXT LTD.

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

About

A platform for building stateful API services.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Clojure 96.3%
  • JavaScript 2.1%
  • HTML 0.9%
  • Shell 0.3%
  • Dockerfile 0.3%
  • Makefile 0.1%