@lafferty-lounge/route-server
v0.5.0
Published
A simple server for storing and reading http routes and their associated certificate information
Downloads
30
Readme
The route server
The lafferty lounge route server is used to manage route inside of a kubernetes cluster. It also holds key/cert information for domains.
Options
# flag default description
--data-dir # /var/lib/lafferty-lounge/route-server where the server should store its data
--token # the Bearer token to verify requests against
--port # 8080 the port to listen onENV
Prefix options with LL_ROUTE_SERVER.
LL_ROUTE_SERVER_DATA_DIR="/data/dir"Joi Schemas
const routeSchema = joi.object({
match: joi.string().required(),
target: joi.string().required(),
priority: joi.number().required(),
protocols: joi.array().items(joi.string().required()).required(),
description: joi.string().required()
});
const hostSchema = {
description: joi.string().required(),
match: joi.string().required(),
priority: joi.number().required(),
routes: joi.object().pattern(/.+/, routeSchema).required()
};
const tlsHostSchema = {
description: joi.string().required(),
key: joi.string(),
cert: joi.string()
};
const tlsAuthSchema = {
key: joi.string(),
cert: joi.string()
};API
GET /api/v1/hosts
{
"hosts": {
"lafferty-lounge.com": {
"match": "^lafferty-lounge.com",
"description": "the lafferty lounge site",
"priority": 1,
"routes": {
"apis": {
"match": "^/api/v1/.*",
"target": {
"url": "http://lafferty-lounge-api-server-v1",
"ca": "---BEGIN CERTIFICATE---",
"protocols": ["https"]
},
"priority": 1,
"description": "the lafferty lounge api server"
}
}
}
}
}PUT /api/v1/hosts
joi.object().pattern(/.+/, hostSchema).required()GET /api/v1/hosts/:host
{
"match": "^lafferty-lounge.com",
"description": "the lafferty lounge site",
"priority": 1,
"routes": {
"apis": {
"match": "^/api/v1/.*",
"target": {
"url": "http://lafferty-lounge-api-server-v1",
"ca": "---BEGIN CERTIFICATE---",
"protocols": ["https"]
},
"priority": 1,
"description": "the lafferty lounge api server"
}
}
}PUT /api/v1/hosts/:host
const hostSchema = {
description: joi.string().required(),
match: joi.string().required(),
priority: joi.number().required(),
routes: joi.object().pattern(/.+/, routeSchema).required()
}GET /api/v1/hosts/:host/routes
{
"apis": {
"match": "^/api/v1/.*",
"target": {
"url": "http://lafferty-lounge-api-server-v1",
"ca": "---BEGIN CERTIFICATE---",
"protocols": ["https"]
},
"priority": 1,
"description": "the lafferty lounge api server"
}
}PUT /api/v1/hosts/:host/routes
joi.object().pattern(/.+/, routeSchema).required()GET /api/v1/hosts/:host/routes/:route
{
"match": "^/api/v1/.*",
"target": {
"url": "http://lafferty-lounge-api-server-v1",
"ca": "---BEGIN CERTIFICATE---",
"protocols": ["https"]
},
"priority": 1,
"description": "the lafferty lounge api server"
}PUT /api/v1/hosts/:host/routes/:route
const routeSchema = joi.object({
match: joi.string().required(),
target: joi.string().required(),
priority: joi.number().required(),
protocols: joi.array().items(joi.string().required()).required(),
description: joi.string().required()
});GET /api/v1/tls
{
"hosts": {
"lafferty-lounge.com": {
"description": "lafferty lounge main site",
"cert": "[optional] ---BEGIN CERT---",
"key": "[optional] ---BEGIN KEY---"
}
}
}GET /api/v1/tls/hosts
{
"lafferty-lounge.com": {
"description": "lafferty lounge main site",
"cert": "[optional] ---BEGIN CERT---",
"key": "[optional] ---BEGIN KEY---"
}
}PUT /api/v1/tls/hosts
joi.object().pattern(/.+/, tlsHostSchema).required()GET /api/v1/tls/hosts/:host
{
"description": "lafferty lounge main site",
"cert": "[optional] ---BEGIN CERT---",
"key": "[optional] ---BEGIN KEY---"
}PUT /api/v1/tls/hosts/:host
const tlsHostSchema = {
description: joi.string().required(),
key: joi.string(),
cert: joi.string()
};PUT /api/v1/tls/hosts/:host/auth
const tlsAuthSchema = {
key: joi.string(),
cert: joi.string()
};