Add seed code for sdnr app based on ONF Centennial
[ccsdk/apps.git] / sdnr / wireless-transport / code-Carbon-SR1 / apps / dlux / dlux-web / src / app / routingConfig.js
diff --git a/sdnr/wireless-transport/code-Carbon-SR1/apps/dlux/dlux-web/src/app/routingConfig.js b/sdnr/wireless-transport/code-Carbon-SR1/apps/dlux/dlux-web/src/app/routingConfig.js
new file mode 100644 (file)
index 0000000..3e0ee90
--- /dev/null
@@ -0,0 +1,103 @@
+(function(exports){
+
+    var config = {
+
+        /* List all the roles you wish to use in the app
+        * You have a max of 31 before the bit shift pushes the accompanying integer out of
+        * the memory footprint for an integer
+        */
+        roles :[
+            'public',
+            'user',
+            'admin'],
+
+        /*
+        Build out all the access levels you want referencing the roles listed above
+        You can use the "*" symbol to represent access to all roles
+         */
+        accessLevels : {
+            'public' : "*",
+            'anon': ['public'],
+            'user' : ['user', 'admin'],
+            'admin': ['admin']
+        }
+
+    };
+
+    exports.userRoles = buildRoles(config.roles);
+    exports.accessLevels = buildAccessLevels(config.accessLevels, exports.userRoles);
+
+    /*
+        Method to build a distinct bit mask for each role
+        It starts off with "1" and shifts the bit to the left for each element in the
+        roles array parameter
+     */
+
+    function buildRoles(roles){
+
+        var bitMask = "01";
+        var userRoles = {};
+
+        for(var role in roles){
+            var intCode = parseInt(bitMask, 2);
+            userRoles[roles[role]] = {
+                bitMask: intCode,
+                title: roles[role]
+            };
+            bitMask = (intCode << 1 ).toString(2);
+        }
+
+        return userRoles;
+    }
+
+    /*
+    This method builds access level bit masks based on the accessLevelDeclaration parameter which must
+    contain an array for each access level containing the allowed user roles.
+     */
+    function buildAccessLevels(accessLevelDeclarations, userRoles){
+
+        var accessLevels = {};
+        var resultBitMask = '';
+        for(var level in accessLevelDeclarations){
+
+            if(typeof accessLevelDeclarations[level] == 'string'){
+                if(accessLevelDeclarations[level] == '*'){
+
+                    resultBitMask = '';
+
+                    for( var roleTemp in userRoles){
+                        resultBitMask += "1";
+                    }
+                    //accessLevels[level] = parseInt(resultBitMask, 2);
+                    accessLevels[level] = {
+                        bitMask: parseInt(resultBitMask, 2),
+                        title: accessLevelDeclarations[level]
+                    };
+                }
+                else {
+                    console.log("Access Control Error: Could not parse '" + accessLevelDeclarations[level] + "' as access definition for level '" + level + "'");
+                }
+
+            }
+            else {
+
+                resultBitMask = 0;
+                for(var role in accessLevelDeclarations[level]){
+                    if(userRoles.hasOwnProperty(accessLevelDeclarations[level][role])) {
+                        resultBitMask = resultBitMask | userRoles[accessLevelDeclarations[level][role]].bitMask;
+                    }
+                    else {
+                        console.log("Access Control Error: Could not find role '" + accessLevelDeclarations[level][role] + "' in registered roles while building access for '" + level + "'");
+                    }
+                }
+                accessLevels[level] = {
+                    bitMask: resultBitMask,
+                    title: accessLevelDeclarations[level][role]
+                };
+            }
+        }
+
+        return accessLevels;
+    }
+
+})(typeof exports === 'undefined' ? this['routingConfig'] = {} : exports);
\ No newline at end of file