Example #1
0
gpii.pcpChannel.sessionToPCP = function (model, transformSpec) {
    var schemas = transformSpec.ontologyMetadata.flat.schemas;
    var outModel = fluid.filterKeys(model, ["userToken", "activeContextName"]);
    var settingControls = {};
    var activePreferences = fluid.get(model, ["preferences", "contexts", model.activeContextName, "preferences"]);
    var prefApplicationPrefix = "http://registry.gpii.net/applications/";

    fluid.each(activePreferences, function (prefsVal, prefsKey) {
        if (prefsKey.startsWith(prefApplicationPrefix)) {
            var solKey = prefsKey.substring(prefApplicationPrefix.length);
            var solution = model.solutionsRegistryEntries[solKey];
            if (solution) {
                fluid.each(prefsVal, function (innerPrefsVal, innerPrefsKey) {
                    gpii.pcpChannel.emitSettingControl(settingControls, schemas[innerPrefsKey], innerPrefsVal, [prefsKey, innerPrefsKey], solution.name);
                });
            }
        } else {
            gpii.pcpChannel.emitSettingControl(settingControls, schemas[prefsKey], prefsVal, [prefsKey]);
        }
    });
    outModel.settingControls = settingControls;
    outModel.preferences = {
        name: fluid.get(model, "preferences.name"),
        contexts: fluid.transform(fluid.get(model, "preferences.contexts"), function (contextVal) {
            return fluid.filterKeys(contextVal, ["name"]);
        })
    };

    return outModel;
};
Example #2
0
gpii.pspChannel.sessionToPSP = function (model, transformSpec) {
    var schemas = transformSpec.ontologyMetadata.flat.schemas;
    var outModel = fluid.filterKeys(model, ["gpiiKey", "activeContextName"]);
    var settingControls = {};
    var activePreferences = fluid.get(model, ["preferences", "contexts", model.activeContextName, "preferences"]);
    var prefApplicationPrefix = "http://registry.gpii.net/applications/";

    fluid.each(activePreferences, function (prefsVal, prefsKey) {
        if (prefsKey.startsWith(prefApplicationPrefix)) {
            var solKey = prefsKey.substring(prefApplicationPrefix.length);
            var solution = model.solutionsRegistryEntries[solKey];
            if (solution) {
                fluid.each(prefsVal, function (innerPrefsVal, innerPrefsKey) {
                    var liveness = gpii.matchMakerFramework.utils.getLeastLiveness([ solution ], innerPrefsKey);
                    gpii.pspChannel.emitSettingControl(settingControls, schemas[innerPrefsKey], innerPrefsVal, [prefsKey, innerPrefsKey], liveness, solution.name);
                });
            }
        } else {
            var activeSolutionIds = Object.keys(fluid.get(model, "activeConfiguration.inferredConfiguration.applications"));
            var activeSolutions = fluid.filterKeys(model.solutionsRegistryEntries, activeSolutionIds);
            var liveness = gpii.matchMakerFramework.utils.getLeastLiveness(activeSolutions, prefsKey);
            gpii.pspChannel.emitSettingControl(settingControls, schemas[prefsKey], prefsVal, [prefsKey], liveness);
        }
    });
    outModel.settingControls = settingControls;
    outModel.preferences = {
        name: fluid.get(model, "preferences.name"),
        contexts: fluid.transform(fluid.get(model, "preferences.contexts"), function (contextVal) {
            return fluid.filterKeys(contextVal, ["name"]);
        })
    };
    return outModel;
};
gpii.tests.settingsDataSource.assertInitialAccessToken = function (that, settingsDataSource, isExpired) {
    var initialAccessToken = fluid.get(settingsDataSource, ["accessTokens", gpii.tests.settingsDataSource.gpiiKey, "accessToken"]);
    var initialTimestampExpires = fluid.get(settingsDataSource, ["accessTokens", gpii.tests.settingsDataSource.gpiiKey, "timestampExpires"]);

    jqUnit.assertValue("A saved access token is in place", initialAccessToken);
    jqUnit[isExpired ? "assertTrue" : "assertFalse"]("A saved access token is not expired", gpii.oauth2.getExpiresIn(new Date(), initialTimestampExpires) === 0);
    that.initialSavedAccessToken = initialAccessToken;
    that.initialSavedTimestampExpires = initialTimestampExpires;
};
gpii.settingsHandlers.webSockets.addClient = function (that, solutionId, client) {
    var initialSettings = fluid.get(that.model.settings, [solutionId]);
    var currentValue = fluid.get(that.clients, [solutionId, client.id]);
    if (!currentValue) {
        fluid.set(that.clients, [solutionId, client.id], client);
        client.sendTypedMessage("connectionSucceeded", initialSettings);
        client.events.onDestroy.addListener(function () {
            that.removeClient(client);
        });
    }

};
Example #5
0
 request.getSolutions = function (matchMaker, event, model) {
     var device = model.device,
         os = fluid.get(device, "OS.id"),
         version = fluid.get(device, "OS.version");
     matchMaker.solutionsReporter.get({
         os: os,
         version: version
     }, function (solutions) {
         matchMaker.prefilterSolutions(solutions, os, version);
         solutions = matchMaker.prefilterSolutions(solutions, device);
         event.fire(solutions);
     });
 };
Example #6
0
 return fluid.transform(changeMap, function (value, key) {
     if (fluid.isPlainObject(value)) {
         return inspect(value, path + (path && ".") + key);
     } else {
         // fluid.get can't support 0 length key names.
         var exp = fluid.get(expected, path);
         var act = fluid.get(actual, path);
         return {
             expected: exp && exp[key] || undefined,
             actual: act && act[key] || undefined
         };
     }
 });
Example #7
0
 clientPromise.then(function (client) {
     if (client && fluid.get(client, ["oauth2ClientSecret"]) === expectedOauth2ClientSecret) {
         promiseTogo.resolve(client);
     } else {
         fluid.log("clientService: unauthorized client with oauth2ClientId - " + oauth2ClientId);
         promiseTogo.reject(gpii.oauth2.errors.unauthorized);
     }
 }, function (err) {
Example #8
0
 fluid.remove_if(solutions, function (solution) {
     var solutionOSVersion = fluid.find(fluid.get(solution, "contexts.OS"), function(OSEntry) {
         return OSEntry.id === os ? OSEntry.version : undefined;
     });
     if (!semver.satisfies(version, solutionOSVersion)) {
         return true;
     }
 });
Example #9
0
gpii.tests.singleInstance.resolveReferences = function (model, value) {
    if (typeof(value) === "string") {
        return value.charAt(0) === "$" ? fluid.get(model, value.substring(1)) : value;
    } else {
        return fluid.transform(value, function (obj) {
            return gpii.tests.singleInstance.resolveReferences(model, obj);
        });
    }
};
Example #10
0
 gpii.flowManager.getSolutions = function (solutionsRegistryDataSource, deviceContext, event, onError) {
     var os = fluid.get(deviceContext, "OS.id");
     var promise = solutionsRegistryDataSource.get({});
     promise.then(function (solutions) {
         var solutionsRegistryEntries = gpii.matchMakerFramework.filterSolutions(solutions[os], deviceContext);
         fluid.log("Fetched filtered solutions registry entries: ", gpii.renderMegapayload({solutionsRegistryEntries: solutionsRegistryEntries}));
         event.fire(solutionsRegistryEntries, solutions);
     }, onError.fire);
 };
gpii.settingsHandlers.exploding.impl = function (operation, settings, options) {
    if (options && options.launchHandler && operation === "set") {
        gpii.settingsHandlers.exploding.runningState.running = settings.running;
        var launchOperation = settings.running ? "launch" : "stop";
        var launchSettings = fluid.get(options, ["preferences", "contexts", "gpii-default", "preferences", "http://registry.gpii.net/applications/net.gpii.explode"]);
        return gpii.settingsHandlers.exploding.determineExplode(launchOperation, launchSettings, settings);
    } else {
        return gpii.settingsHandlers.exploding.determineExplode(operation, settings, settings);
    }
};
 gpii.preferencesServer.old.get.buildReturnPayload = function (rawPrefs, ontologyHandler, request, requestProxy) {
     fluid.log("Raw preferences fetched by old PreferencesServer: " + JSON.stringify(rawPrefs, null, 2));
     var fullPrefs = ontologyHandler.rawPrefsToOntology(rawPrefs, "flat");
     var prefs = fluid.get(fullPrefs, "contexts.gpii-default.preferences");
     var togo = (!prefs) ? {} : {
         userToken: request.req.params.userToken,
         preferences: gpii.preferencesServer.old.get.newFlatToOldFlat(prefs)
     };
     requestProxy.events.onSuccess.fire(togo);
 };
    gpii.contextManager.evaluateMatch = function (that, matchMakerResponse) {
        var contextPayload = $.extend({}, matchMakerResponse);
        var matchMakerOutput = matchMakerResponse.matchMakerOutput;

        var activeContexts = gpii.contextManager.utils.findActiveContexts(fluid.get(that.model, "currentContext"), matchMakerOutput);

        // save highest priority context as the applied one
        contextPayload.activeContextName = activeContexts[0];
        contextPayload.activeConfiguration = $.extend(true, {}, matchMakerOutput.inferredConfiguration[contextPayload.activeContextName]);
        return contextPayload;
    };
    var results = fluid.transform(payload.settings, function (value, key) {
        var oldValue = fluid.get(that.model.settings, [path, key]);
        var type;

        if (oldValue === undefined) {
            type = "ADD";
        } else if (value === undefined) {
            type = "DELETE";
        } else {
            type = null;
        }

        that.applier.change(["settings", path, key], value, type);

        var newValue = fluid.get(that.model.settings, [path, key]);

        return {
            oldValue: oldValue,
            newValue: newValue
        };
    });
Example #15
0
 var map = fluid.transform(termMap, function resolve(entry) {
     entry = String(entry);
     var encode = !noencode;
     if (entry.indexOf("noencode:") === 0) {
         encode = false;
         entry = entry.substring("noencode:".length);
     }
     var value = entry.charAt(0) === "%" ? fluid.get(directModel, entry.substring(1)) : entry;
     if (encode) {
         value = encodeURIComponent(value);
     }
     return value;
 });
Example #16
0
gpii.iniFile.read.gotValue = function (state, sectionPath, key, value, quoted) {
    // Ignore the value if it's already set, if only setting first duplicates.
    var set = !state.options.firstDuplicate || (fluid.get(state.result, sectionPath.concat(key), value) === undefined);
    if (!state.options.strings && !quoted) {
        // Try to convert it to a non-string value.
        if (/^([0-9]+|true|false|null)$/.test(value)) {
            value = JSON.parse(value);
        }
    }
    if (set) {
        fluid.set(state.result, sectionPath.concat(key), value);
    }
};
Example #17
0
gpii.iniFile.read.sectionBegin = function (state, sectionPath) {
    var existing = sectionPath.length && fluid.get(state.result, sectionPath);
    if (existing) {
        if (fluid.isPlainObject(existing)) {
            fluid.log("iniFile - Warning: Merging sections with duplicate name: ",
                sectionPath.join("."));
        } else {
            fluid.log("iniFile - Warning: Overwriting key=value with section of the same name: ",
                sectionPath.join("."));
            fluid.set(state.result, sectionPath, {});
        }
    }
};
gpii.flowManager.untrustedSettingsDataSource.findValidAccessToken = function (that, gpiiKey) {
    var allAccessTokens = that.accessTokens;

    var accessToken = fluid.get(allAccessTokens, [gpiiKey, "accessToken"]);
    var expiresIn = gpii.oauth2.getExpiresIn(new Date(), fluid.get(allAccessTokens, [gpiiKey, "timestampExpires"]));

    // If the locally saved access token exists and is still valid, return it.
    // Otherwise, request an new access token from the cloud and return.
    // The new access token is saved locally for the continuing use.
    if (!accessToken || !expiresIn || expiresIn < that.options.minAccessTokenLifeTimeInSecond) {
        var accessTokenPromise = that.accessRequester.getAccessToken(gpiiKey);
        var mapper = function (accessTokenObj) {
            var accessTokenFromCloud = accessTokenObj.access_token;
            var timestampExpiresFromCloud = gpii.oauth2.getTimestampExpires(new Date(), accessTokenObj.expiresIn);
            that.save(gpiiKey, accessTokenFromCloud, timestampExpiresFromCloud);
            return accessTokenFromCloud;
        };
        return fluid.promise.map(accessTokenPromise, mapper);
    } else {
        return fluid.promise().resolve(accessToken);
    }
};
 map = fluid.transform(map, function (entry) {
     var encode = false;
     if (entry.indexOf(eUC) === 0) {
         encode = true;
         entry = entry.substring(eUC.length);
     }
     if (entry.charAt(0) === "%") {
         entry = fluid.get(directModel, entry.substring(1));
     }
     if (encode) {
         entry = encodeURIComponent(entry);
     }
     return entry;
 });
Example #20
0
gpii.iniFile.write.sectionBegin = function (state, sectionPath) {
    var output = [];
    if (sectionPath.length > 0) {
        // Add the values to the previous section that haven't already been added.
        fluid.each(gpii.iniFile.getUnwrittenValues(state, state.currentPath, false), function (tuple) {
            output.push.apply(output, gpii.iniFile.writeValue(tuple.key, tuple.value, sectionPath, state.options));
        });
    }
    state.currentPath = sectionPath.slice();
    state.currentSection = fluid.get(state.data, state.currentPath);

    state.currentPathString = state.currentPath.join(state.pathSep);
    state.valuesWritten[state.currentPathString] = true;

    return output.length && (output.join(state.options.eol) + state.options.eol);
};
Example #21
0
 fluid.each(activePreferences, function (prefsVal, prefsKey) {
     if (prefsKey.startsWith(prefApplicationPrefix)) {
         var solKey = prefsKey.substring(prefApplicationPrefix.length);
         var solution = model.solutionsRegistryEntries[solKey];
         if (solution) {
             fluid.each(prefsVal, function (innerPrefsVal, innerPrefsKey) {
                 var liveness = gpii.matchMakerFramework.utils.getLeastLiveness([ solution ], innerPrefsKey);
                 gpii.pspChannel.emitSettingControl(settingControls, schemas[innerPrefsKey], innerPrefsVal, [prefsKey, innerPrefsKey], liveness, solution.name);
             });
         }
     } else {
         var activeSolutionIds = Object.keys(fluid.get(model, "activeConfiguration.inferredConfiguration.applications"));
         var activeSolutions = fluid.filterKeys(model.solutionsRegistryEntries, activeSolutionIds);
         var liveness = gpii.matchMakerFramework.utils.getLeastLiveness(activeSolutions, prefsKey);
         gpii.pspChannel.emitSettingControl(settingControls, schemas[prefsKey], prefsVal, [prefsKey], liveness);
     }
 });
Example #22
0
gpii.lifecycleManager.userLogonHandling.startLifecycle = function (that, lifecycleManager, lifecyclePayload, event) {
    gpii.logFully("userLogonHandling.startLifecycle got final payload ", gpii.renderMegapayload(lifecyclePayload));
    if (that.options.defaultLifecycleInstructions && lifecyclePayload.gpiiKey !== "noUser") {
        // Merge the default snapshot with current key's lifecycle instructions to combine the key in action
        // with "reset all" functionality
        fluid.set(lifecyclePayload, ["activeConfiguration", "lifecycleInstructions"], fluid.extend(
            true, {}, that.options.defaultLifecycleInstructions, fluid.get(lifecyclePayload, ["activeConfiguration", "lifecycleInstructions"])
        ));
    }
    var promise = lifecycleManager.start(lifecyclePayload);
    promise.then(function () {
        gpii.lifecycleManager.userLogonHandling.updateLogonChangeModel(lifecycleManager, lifecyclePayload.gpiiKey, "login", false);
        event.fire("User with GPII key " + lifecyclePayload.gpiiKey + " was successfully logged in.");
    }, function (error) {
        fluid.log(fluid.logLevel.FAIL, "Error returned from lifecycle manager: ", error);
        lifecycleManager.errorResponse(that, "Error occurred during login: " + error.message);
    });
};
Example #23
0
gpii.contextManager.updateActiveContextName = function (that, fullPayload, forceContextName) {
    var matchMakerOutput = fullPayload.matchMakerOutput;
    var newActiveContextName;
    if (forceContextName === undefined) {
        if (fullPayload.forcedContext) { // Don't compute conditions if context has been forced
            newActiveContextName = fullPayload.activeContextName;
        } else {
            var activeContexts = gpii.contextManager.utils.findActiveContexts(fluid.get(that.model, "currentEnvironment"), matchMakerOutput);
            // save highest priority context as the applied one
            newActiveContextName = activeContexts[0];
        }
    } else {
        newActiveContextName = forceContextName;
        fullPayload.forcedContext = true;
    }
    fullPayload.activeContextName = newActiveContextName;
    return fullPayload;
};
Example #24
0
gpii.iniFile.getUnwrittenValues = function (state, sectionPath, subSections) {
    var items = [];
    var section = fluid.get(state.data, sectionPath);
    if (section) {
        var allKeys = Object.keys(section);
        var path = sectionPath.length ? sectionPath.join(state.pathSep) + state.pathSep : "";
        fluid.each(allKeys, function (key) {
            if (!state.valuesWritten[path + key]) {
                var value = section[key];
                if (fluid.isPlainObject(value) === !!subSections) {
                    items.push({
                        key: key,
                        value: value
                    });
                }
            }
        });
    }
    return items;
};
Example #25
0
 gpii.lifecycleManager.responseToSnapshot = function (solutionId, handlerResponse) {
     var unValued = fluid.model.transform(handlerResponse, gpii.lifecycleManager.responseToSnapshotRules, 
         {isomorphic: true});
     // TODO: Should eventually be able to do this final stage through transformation too
     return fluid.get(unValued, fluid.model.escapedPath(solutionId, "0"), fluid.model.escapedGetConfig);
 };
 var results = fluid.transform(payload.settings, function (value, key) {
     var currentValue = fluid.get(that.model.settings, [path, key]);
     return currentValue;
 });
gpii.settingsHandlers.webSockets.getSettingsForId = function (that, solutionId) {
    return fluid.get(that.model.settings, [solutionId]);
};
Example #28
0
 return function (parsed) {
     var resolver = resolvers[parsed.context];
     return !resolver? undefined : (
         typeof(resolver) === "function" ? resolver(parsed.path) : fluid.get(resolver, parsed.path));
 };
gpii.test.cloudBased.oauth2.verifyFieldInResponse = function (response, request, funcName, fieldName) {
    var fieldValue = fluid.get(response, fieldName);
    fluid.log(funcName + " Got " + fieldName + ": ", fieldValue);
    jqUnit.assertValue("Should have received " + fieldName, fieldValue);
    fluid.set(request, fieldName, fieldValue);
};
gpii.test.cloudBased.oauth2.filter = function (model, options, filterName) {
    var changes = fluid.get(options, [filterName, "changes"]);
    fluid.log("cloudBased.oauth2.filter fetched changes " + JSON.stringify(changes, null, 2) + " for filter name " + filterName);
    return changes ? gpii.test.cloudBased.oauth2.filterModel(model, changes) : model;
};