| 
				
					
						 | 
			||
|---|---|---|
| .junie | ||
| api | ||
| cmd/mcias | ||
| data | ||
| database | ||
| docs | ||
| .gitignore | ||
| .golangci.yml | ||
| 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 - Run specific linter: 
golangci-lint run --disable-all --enable=gosec 
The project uses a strict golangci-lint configuration defined in .golangci.yml.
  This configuration includes a comprehensive set of linters focused on:
- Security best practices
 - Code quality and maintainability
 - Performance considerations
 - Error handling correctness
 
See the Installation and Usage Guide for more details.