|
||
---|---|---|
.junie | ||
api | ||
cmd/mcias | ||
data | ||
database | ||
docs | ||
.gitignore | ||
README.org | ||
go.mod | ||
go.sum | ||
main.go | ||
schema.sql |
README.org
MCIAS
MCIAS
MCIAS is the metacircular identity and access system, providing identity and authentication across metacircular projects.
It currently provides the following across metacircular services:
- User password authentication.
- User token authentication.
- Database credential authentication.
Future work should consider adding support for:
- TOTP (Time-based One-Time Password)
- Policy management for fine-grained access control.
Documentation
Comprehensive documentation is available in the docs directory:
- Overview - Project overview, system architecture, database schema, and security considerations
- API Documentation - API endpoints, request/response formats, error handling, and authentication flow
- Installation and Usage Guide - Prerequisites, installation steps, running the server, and more
Quick Start
To get started with MCIAS:
-
Initialize the database:
go run main.go init --db ./mcias.db
-
Start the server:
go run main.go server --db ./mcias.db
- The server will listen on port 8080 by default.
CLI Commands
MCIAS provides a command-line interface with the following commands:
Server Command
Start the MCIAS server:
go run main.go server [--db <path>] [--addr <address>]
Init Command
Initialize the database:
go run main.go init [--db <path>]
User Commands
Add a new user:
go run main.go user add --username <username> --password <password>
List all users:
go run main.go user list
Token Commands
Add a new token for a user:
go run main.go token add --username <username> [--duration <hours>]
List all tokens:
go run main.go token list
API Overview
Authentication Endpoints
/v1/login/password
Password-based authentication endpoint.
/v1/login/token
Token-based authentication endpoint.
/v1/credentials/database
Database credential authentication endpoint (not yet fully implemented).
Request Format
The general datastructure used to log in should look like:
{
"version": "v1",
"login": {
"user": "username",
"password": "secret password",
"token": "1234567890",
"totp": "123456"
}
}
Any fields that aren't used should be omitted. The version
and
login.user
types are required, as well as the appropriate
credential field.
Development
- Run tests:
go test ./...
- Run linter:
golangci-lint run
See the Installation and Usage Guide for more details.