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); }
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); }