@lafferty-lounge/route-server

0.5.0 • Public • Published

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 on

ENV

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()
};

Readme

Keywords

none

Package Sidebar

Install

npm i @lafferty-lounge/route-server

Weekly Downloads

0

Version

0.5.0

License

WTFPL

Last publish

Collaborators

  • lafferty-lounge