protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { var authHeader = request.Headers.Authorization; if (authHeader == null) return base.SendAsync(request, cancellationToken); if (authHeader.Scheme != "Basic") return base.SendAsync(request, cancellationToken); if (String.IsNullOrEmpty(authHeader.Parameter)) return base.SendAsync(request, cancellationToken); var encodedUserPass = authHeader.Parameter.Trim(); var userPass = Encoding.ASCII.GetString(Convert.FromBase64String(encodedUserPass)); var parts = userPass.Split(":".ToCharArray()); var email = parts[0]; var password = parts[1]; var mem = new UserMembershipProvider(); if (!mem.ValidateUserEncoded(email, password)) return base.SendAsync(request, cancellationToken); var i = new RadarIdentity(email, "Basic"); //var identity = new GenericIdentity(username, "Basic"); //string[] roles = RadarRoleProvider.GetRolesForUser(email); var p = new RadarPrincipal(i); //var principal = new GenericPrincipal(i, roles); Thread.CurrentPrincipal = p; if (HttpContext.Current != null) HttpContext.Current.User = p; return base.SendAsync(request, cancellationToken); }
/// <summary> /// Implement to include authentication logic and create IPrincipal /// </summary> protected abstract bool TryCreatePrincipal(string email, string password, out RadarPrincipal principal);
private bool CheckUsers(RadarPrincipal principal) { string[] users = UsersSplit; if (users.Length == 0) return true; //NOTE: This is a case sensitive comparison return users.Any(u=> principal.Identity.Name == u); }
/// <summary> /// Implement to include authentication logic and create IPrincipal /// </summary> protected override bool TryCreatePrincipal(string email, string password, out RadarPrincipal principal) { principal = null; var mem = new UserMembershipProvider(); if (!mem.ValidateUserEncoded(email, password)) return false; principal = new RadarPrincipal(new RadarIdentity(email, "Basic")); return true; }
private bool CheckRoles(RadarPrincipal principal) { string[] roles = RolesSplit; if(roles.Length == 0) return true; return roles.Any(principal.IsInRole); }