main.ts 2.35 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
#!/usr/bin/env node
/*
 * Copyright (C) 2015 Centro de Computacao Cientifica e Software Livre
 * Departamento de Informatica - Universidade Federal do Parana
 *
 * This file is part of blendb.
 *
 * blendb is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * blendb is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with blendb.  If not, see <http://www.gnu.org/licenses/>.
 */

// external libraries
Eduardo L. Buratti's avatar
Eduardo L. Buratti committed
23 24 25
import express = require("express");
const osprey = require("osprey");
const ramlParser = require("raml-parser");
26 27

// load router
Eduardo L. Buratti's avatar
Eduardo L. Buratti committed
28
import { router } from "./api/router-v1";
29

30 31 32
// create a new express app
const app = module.exports = express();

33 34 35 36 37 38 39 40
// Load configuration file

import { ConfigParser } from "./util/configParser";
const configPath = (app.get("env") === "test") ? "config/test.yaml" : "config/config.yaml";
const config = ConfigParser.parse(configPath);

// include middlewares
import { EngineMw } from "./api/middlewares/engine";
41
import { PostgresMw, MonetMw } from "./api/middlewares/adapter";
42
import { ErrorMw } from "./api/middlewares/error";
43 44

app.use(EngineMw(config));
45 46 47 48
if (config.adapter === "postgres") {
    app.use(PostgresMw(config.connection));
}

49 50 51 52
else if (config.adapter === "monet") {
    app.use(MonetMw(config.connection));
}

53
else {
54
    console.error("Invalid adapter. Options available are: postgres and monet");
55 56
    process.exit(1);
}
57

58
// parse the RAML spec and load osprey middleware
Eduardo L. Buratti's avatar
Eduardo L. Buratti committed
59
ramlParser.loadFile("specs/blendb-api-v1.raml")
60
    .then((raml: any) => {
Eduardo L. Buratti's avatar
Eduardo L. Buratti committed
61
        app.use("/v1",
62 63 64 65
            osprey.security(raml),
            osprey.server(raml),
            router);

66 67
        app.use("/v1", ErrorMw("v1"));

68 69
        let port = process.env.PORT || 3000;
        app.listen(port);
70

71 72
        if (app.get("env") === "development") {
            console.log("Server listening on port " + port + ".");
73 74 75
        }
    },
    (err: any) => {
Eduardo L. Buratti's avatar
Eduardo L. Buratti committed
76
        console.error("RAML Parsing Error: " + err.message);
77 78
        process.exit(1);
    });