private IEnumerable<ESPermission> GetFolderEsPermissions(WspPrincipal principal, string rootFolderName) { var dictionary = HttpContext.Current.Session != null ?HttpContext.Current.Session[WebDavAppConfigManager.Instance.SessionKeys.WebDavRootFoldersPermissions] as Dictionary<string, IEnumerable<ESPermission>> : null; if (dictionary == null) { dictionary = new Dictionary<string, IEnumerable<ESPermission>>(); var rootFolders = WSP.Services.EnterpriseStorage.GetEnterpriseFoldersPaged(principal.ItemId, false,false, false,"","",0, int.MaxValue).PageItems; foreach (var rootFolder in rootFolders) { var permissions = WSP.Services.EnterpriseStorage.GetEnterpriseFolderPermissions(principal.ItemId, rootFolder.Name); dictionary.Add(rootFolder.Name, permissions); } if (HttpContext.Current.Session != null) { HttpContext.Current.Session[WebDavAppConfigManager.Instance.SessionKeys.WebDavRootFoldersPermissions] = dictionary; } } return dictionary.ContainsKey(rootFolderName) ? dictionary[rootFolderName] : new ESPermission[0]; }
public WspPrincipal LogIn(string login, string password) { if (ValidateAuthenticationData(login, password) == false) { return null; } var principal = new WspPrincipal(login); var exchangeAccount = WSP.Services.ExchangeServer.GetAccountByAccountNameWithoutItemId(login); var organization = WSP.Services.Organizations.GetOrganization(exchangeAccount.ItemId); principal.AccountId = exchangeAccount.AccountId; principal.ItemId = exchangeAccount.ItemId; principal.OrganizationId = organization.OrganizationId; principal.DisplayName = exchangeAccount.DisplayName; principal.AccountName = exchangeAccount.AccountName; principal.EncryptedPassword = _cryptography.Encrypt(password); if (HttpContext.Current != null) { HttpContext.Current.User = principal; } Thread.CurrentPrincipal = principal; return principal; }
public bool HasAccess(WspPrincipal principal, string path) { path = path.RemoveLeadingFromPath(principal.OrganizationId); var permissions = GetPermissions(principal, path); return permissions.HasFlag(WebDavPermissions.Read) || permissions.HasFlag(WebDavPermissions.Write); }
public WebDavAccessToken CreateToken(WspPrincipal principal, string filePath) { var token = new WebDavAccessToken(); token.AccessToken = Guid.NewGuid(); token.AccountId = principal.AccountId; token.ItemId = principal.ItemId; token.AuthData = principal.EncryptedPassword; token.ExpirationDate = DateTime.Now.AddHours(3); token.FilePath = filePath; token.Id = WSP.Services.EnterpriseStorage.AddWebDavAccessToken(token); return token; }
public WebDavPermissions GetPermissions(WspPrincipal principal, string path) { if (string.IsNullOrEmpty(path)) { return WebDavPermissions.Read; } var resultPermissions = WebDavPermissions.Empty; var rootFolder = GetRootFolder(path); var userGroups = GetUserSecurityGroups(principal); var permissions = GetFolderEsPermissions(principal, rootFolder); foreach (var permission in permissions) { if ((!permission.IsGroup && (permission.DisplayName == principal.UserName || permission.DisplayName == principal.DisplayName)) || (permission.IsGroup && userGroups.Any(x => x.DisplayName == permission.DisplayName))) { if (permission.Access.ToLowerInvariant().Contains("read")) { resultPermissions |= WebDavPermissions.Read; } if (permission.Access.ToLowerInvariant().Contains("write")) { resultPermissions |= WebDavPermissions.Write; } } } var owaEditFolders = GetOwaFoldersWithEditPermission(principal); if (owaEditFolders.Contains(rootFolder)) { resultPermissions |= WebDavPermissions.OwaEdit; } else { resultPermissions |= WebDavPermissions.OwaRead; } return resultPermissions; }
public void CreateAuthenticationTicket(WspPrincipal principal) { var serializer = new JavaScriptSerializer(); string userData = serializer.Serialize(principal); var authTicket = new FormsAuthenticationTicket(1, principal.Identity.Name, DateTime.Now, DateTime.Now.Add(FormsAuthentication.Timeout), FormsAuthentication.SlidingExpiration, userData); var encTicket = FormsAuthentication.Encrypt(authTicket); var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket); if (FormsAuthentication.SlidingExpiration) { cookie.Expires = authTicket.Expiration; } HttpContext.Current.Response.Cookies.Add(cookie); }
private IEnumerable<string> GetOwaFoldersWithEditPermission(WspPrincipal principal) { var folders = HttpContext.Current.Session != null ? HttpContext.Current.Session[WebDavAppConfigManager.Instance.SessionKeys.OwaEditFoldersSessionKey] as IEnumerable<string> : null; if (folders != null) { return folders; } var accountsIds = new List<int>(); accountsIds.Add(principal.AccountId); var groups = GetUserSecurityGroups(principal); accountsIds.AddRange(groups.Select(x=>x.AccountId)); try { folders = WspContext.Services.EnterpriseStorage.GetUserEnterpriseFolderWithOwaEditPermission(principal.ItemId, accountsIds.ToArray()); } catch (Exception) { //TODO remove try catch when es &portal will be updated return new List<string>(); } if (HttpContext.Current.Session != null) { HttpContext.Current.Session[WebDavAppConfigManager.Instance.SessionKeys.OwaEditFoldersSessionKey] = folders; } return folders; }
public IEnumerable<ExchangeAccount> GetUserSecurityGroups(WspPrincipal principal) { var groups = HttpContext.Current.Session != null ? HttpContext.Current.Session[WebDavAppConfigManager.Instance.SessionKeys.UserGroupsKey] as IEnumerable<ExchangeAccount> : null; if (groups == null) { groups = WSP.Services.Organizations.GetSecurityGroupsByMember(principal.ItemId, principal.AccountId); if (HttpContext.Current.Session != null) { HttpContext.Current.Session[WebDavAppConfigManager.Instance.SessionKeys.UserGroupsKey] = groups; } } return groups ?? new ExchangeAccount[0]; }