Beispiel #1
0
        public static AppPermission ParseFromString(string permissionString)
        {
            var p = new AppPermission();
            // String format: path/to/resource[(partitionKey)][{permission}]
            var databaseSectionStart          = permissionString.IndexOf("/");
            var databaseSectionEnd            = permissionString.IndexOf("/", databaseSectionStart + 1);
            var partitionKeySectionTokenStart = permissionString.IndexOf('(');
            var partitionKeySectionTokenEnd   = permissionString.IndexOf(')');
            var permissionSectionStart        = permissionString.IndexOf('{');
            var permissionSectionEnd          = permissionString.IndexOf('}');
            var resourceSectionEnd            = partitionKeySectionTokenStart >= 0 ? partitionKeySectionTokenStart : permissionSectionStart >= 0 ? permissionSectionStart : permissionString.Length - 1;

            p.ResourceId = permissionString.Substring(0, resourceSectionEnd);

            // This should always be true, but just in case there is a bad string, just ignore it here
            if (databaseSectionStart >= 0 && databaseSectionEnd >= databaseSectionStart)
            {
                p.DatabaseId = permissionString.Substring(databaseSectionStart + 1, databaseSectionEnd - (databaseSectionStart + 1));
            }

            if (partitionKeySectionTokenStart >= 0 && partitionKeySectionTokenEnd > partitionKeySectionTokenStart)
            {
                p.PartitionKeyPropertyName = permissionString.Substring(partitionKeySectionTokenStart + 1, partitionKeySectionTokenEnd - (partitionKeySectionTokenStart + 1));
            }

            if (permissionSectionStart >= 0 && permissionSectionEnd > permissionSectionStart)
            {
                var permissionModeString = permissionString.Substring(permissionSectionStart + 1, permissionSectionEnd - (permissionSectionStart + 1));
                p.PermissionMode = permissionModeString == "All" ? PermissionMode.All : PermissionMode.Read;
            }

            return(p);
        }
Beispiel #2
0
        private static Dictionary <string, List <AppPermission> > CreateDefaultRolePermissionMap()
        {
            var d = new Dictionary <string, List <AppPermission> >();
            var l = new List <AppPermission>();
            var n = "Default";

            // Handle single value case
            string value = Environment.GetEnvironmentVariable("TOKEN_PROVIDER_COSMOS_DEFAULT");

            if (!string.IsNullOrEmpty(value))
            {
                l.Add(AppPermission.ParseFromString(value));
            }

            // Handle multiple value case
            string keysString = Environment.GetEnvironmentVariable("TOKEN_PROVIDER_COSMOS_DEFAULT_KEYS");

            if (!string.IsNullOrEmpty(keysString))
            {
                string[] keys = keysString.Split(';');
                foreach (string key in keys)
                {
                    try
                    {
                        string v = Environment.GetEnvironmentVariable(key);
                        l.Add(AppPermission.ParseFromString(v));
                    }
                    catch (Exception e)
                    {
                        // TODO: should probably log or something if there is a bad token
                    }
                }
            }

            d.Add(n, l);
            return(d);
        }