# all files / red/runtime/storage/localfilesystem/ index.js

97.56% Statements 40/41
64.29% Branches 9/14
100% Functions 2/2
97.56% Lines 40/41

    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

    1×
    1×
    1×

    1×
    1×
    1×
    1×
    1×
    1×

    1×
    1×

    1×

    17×

    17×

    17×
    4×
    4×
    1×

    3×

    3×
    3×
    1×

    3×
    2×
    2×
    2×

    17×
    17×
    17×
    17×

    17×
    17×

    17×
    17×
    17×
    17×

    17×

    17×

    17×

    1×
     /**
     * 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 fs = require('fs-extra');
    var when = require('when');
    var fspath = require("path");

    var log = require("../../log");
    var util = require("./util");
    var library = require("./library");
    var sessions = require("./sessions");
    var runtimeSettings = require("./settings");
    var projects = require("./projects");

    var initialFlowLoadComplete = false;
    var settings;

    var localfilesystem = {
        init: function(_settings, runtime) {
            settings = _settings;

            var promises = [];

            if (!settings.userDir) {
                try {
                    fs.statSync(fspath.join(process.env.NODE_RED_HOME,".config.json"));
                    settings.userDir = process.env.NODE_RED_HOME;
                } catch(err) {
                    try {
                        // Consider compatibility for older versions
                        Eif (process.env.HOMEPATH) {
                            fs.statSync(fspath.join(process.env.HOMEPATH,".node-red",".config.json"));
                            settings.userDir = fspath.join(process.env.HOMEPATH,".node-red");
                        }
                    } catch(err) {
                    }
                    if (!settings.userDir) {
                        settings.userDir = fspath.join(process.env.HOME || process.env.USERPROFILE || process.env.HOMEPATH || process.env.NODE_RED_HOME,".node-red");
                        Eif (!settings.readOnly) {
                            promises.push(fs.ensureDir(fspath.join(settings.userDir,"node_modules")));
                        }
                    }
                }
            }

            sessions.init(settings);
            runtimeSettings.init(settings);
            promises.push(library.init(settings));
            promises.push(projects.init(settings, runtime));

            var packageFile = fspath.join(settings.userDir,"package.json");
            var packagePromise = when.resolve();

            Eif (!settings.readOnly) {
                packagePromise = function() {
                    try {
                        fs.statSync(packageFile);
                    } catch(err) {
                        var defaultPackage = {
                            "name": "node-red-project",
                            "description": "A Node-RED Project",
                            "version": "0.0.1"
                        };
                        return util.writeFile(packageFile,JSON.stringify(defaultPackage,"",4));
                    }
                    return true;
                }
            }
            return when.all(promises).then(packagePromise);
        },

        getFlows: projects.getFlows,
        saveFlows: projects.saveFlows,
        getCredentials: projects.getCredentials,
        saveCredentials: projects.saveCredentials,

        getSettings: runtimeSettings.getSettings,
        saveSettings: runtimeSettings.saveSettings,
        getSessions: sessions.getSessions,
        saveSessions: sessions.saveSessions,
        getLibraryEntry: library.getLibraryEntry,
        saveLibraryEntry: library.saveLibraryEntry,
        projects: projects
    };

    module.exports = localfilesystem;