# all files / red/api/editor/ index.js

85.45% Statements 47/55
62.5% Branches 5/8
40% Functions 2/5
85.45% Lines 47/55

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109

    1×
    1×

    1×
    1×

    1×
    1×
    1×
    1×
    1×

    1×
    2×
    1×
    1×

    1×

    1×

    3×
    3×
    3×
    3×

    2×

    2×
    2×
    2×
    2×

    2×
    2×
    2×

    2×
    2×
    2×
    2×

    2×
    2×
    2×

    2×
    2×
    2×
    2×

    2×
    2×
    2×
    2×
    2×

    2×
    2×
    2×

    2×

     /**
     * Copyright JS Foundation and other contributors, http://js.foundation
     *
     * Licensed under the Apache License, Version 2.0 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     *
     * http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     **/

    var express = require("express");
    var path = require('path');

    var comms = require("./comms");
    var library = require("./library");

    var auth = require("../auth");
    var needsPermission = auth.needsPermission;
    var runtime;
    var log;
    var apiUtil = require("../util");

    var ensureRuntimeStarted = function(req,res,next) {
        if (!runtime.isStarted()) {
            log.error("Node-RED runtime not started");
            res.status(503).send("Not started");
        } else {
            next();
        }
    }

    module.exports = {
        init: function(server, _runtime) {
            runtime = _runtime;
            log = runtime.log;
            var settings = runtime.settings;
            if (!settings.disableEditor) {

                comms.init(server,runtime);

                var ui = require("./ui");
                ui.init(runtime);
                var editorApp = express();
                Iif (settings.requireHttps === true) {
                    editorApp.enable('trust proxy');
                    editorApp.use(function (req, res, next) {
                        if (req.secure) {
                            next();
                        } else {
                            res.redirect('https://' + req.headers.host + req.originalUrl);
                        }
                    });
                }
                editorApp.get("/",ensureRuntimeStarted,ui.ensureSlash,ui.editor);
                editorApp.get("/icons/:module/:icon",ui.icon);
                editorApp.get("/icons/:scope/:module/:icon",ui.icon);

                var theme = require("./theme");
                theme.init(runtime);
                editorApp.use("/theme",theme.app());
                editorApp.use("/",ui.editorResources);

                //Projects
                var projects = require("./projects");
                projects.init(runtime);
                editorApp.use("/projects",projects.app());

                // Locales
                var locales = require("./locales");
                locales.init(runtime);
                editorApp.get('/locales/nodes',locales.getAllNodes,apiUtil.errorHandler);
                editorApp.get(/locales\/(.+)\/?$/,locales.get,apiUtil.errorHandler);

                // Library
                var library = require("./library");
                library.init(editorApp,runtime);
                editorApp.post(new RegExp("/library/flows\/(.*)"),needsPermission("library.write"),library.post,apiUtil.errorHandler);
                editorApp.get("/library/flows",needsPermission("library.read"),library.getAll,apiUtil.errorHandler);
                editorApp.get(new RegExp("/library/flows\/(.*)"),needsPermission("library.read"),library.get,apiUtil.errorHandler);

                // Credentials
                var credentials = require("./credentials");
                credentials.init(runtime);
                editorApp.get('/credentials/:type/:id', needsPermission("credentials.read"),credentials.get,apiUtil.errorHandler);

                return editorApp;
            }
        },
        start: function() {
            var catalogPath = path.resolve(path.join(__dirname,"locales"));
            return runtime.i18n.registerMessageCatalogs([
                {namespace: "editor",   dir: catalogPath, file:"editor.json"},
                {namespace: "jsonata",  dir: catalogPath, file:"jsonata.json"},
                {namespace: "infotips", dir: catalogPath, file:"infotips.json"}
            ]).then(function(){
                comms.start();
            });
        },
        stop: comms.stop,
        publish: comms.publish,
        registerLibrary: library.register
    }