public bool QuotaCheckAndUpdate(UserContext userContext, UserQuota quota) { bool flag; lock (this.syncObject) { if (this.CheckConcurrentRequestQuota(quota.MaxConcurrentRequests)) { if (this.CheckRequestPerTimeSlotQuota(quota.MaxRequestsPerTimeSlot, quota.TimeSlotSize)) { Usage usage = this; usage.concurrentRequests = usage.concurrentRequests + 1; this.requests.Increment(quota.TimeSlotSize); TraceHelper.Current.UserQuotaSucceeded(userContext.Name); TraceHelper.Current.DebugMessage(string.Concat("Usage.QuotaCheckAndUpdate called. Concurrent requests = ", this.concurrentRequests)); flag = true; } else { DataServiceController.Current.QuotaSystem.UserQuotaViolation.Increment(); TraceHelper.Current.UserQuotaViolation(userContext.Name, "MaxRequestPerTimeSlot quota violation"); DataServiceController.Current.PerfCounters.UserQuotaViolationsPerSec.Increment(); flag = false; } } else { DataServiceController.Current.QuotaSystem.UserQuotaViolation.Increment(); TraceHelper.Current.UserQuotaViolation(userContext.Name, "MaxConcurrentRequest quota violation"); DataServiceController.Current.PerfCounters.UserQuotaViolationsPerSec.Increment(); flag = false; } } return flag; }
/// <summary> /// Authorize a user. /// </summary> /// <param name="senderInfo">Sender information</param> /// <param name="userQuota">User quota value</param> /// <returns>User context in which to execute PowerShell cmdlet</returns> public override WindowsIdentity AuthorizeUser(SenderInfo senderInfo, out UserQuota userQuota) { var maxConcurrentRequests = ConfigurationManager.AppSettings["MaxConcurrentRequests"]; var maxRequestsPerTimeslot = ConfigurationManager.AppSettings["MaxRequestsPerTimeslot"]; var timeslotSize = ConfigurationManager.AppSettings["TimeslotSize"]; userQuota = new UserQuota( maxConcurrentRequests != null ? int.Parse(maxConcurrentRequests, CultureInfo.CurrentUICulture) : DefaultMaxConcurrentRequests, maxRequestsPerTimeslot != null ? int.Parse(maxRequestsPerTimeslot, CultureInfo.CurrentUICulture) : DefaultMaxRequestsPerTimeslot, timeslotSize != null ? int.Parse(timeslotSize, CultureInfo.CurrentUICulture) : DefaultTimeslotSize); return WindowsIdentity.GetCurrent(); }
/// <summary> /// Authorizes a user /// </summary> /// <param name="senderInfo">User information</param> /// <param name="quota">Returns user quota</param> /// <returns>WindowsIdentity, if the user is authorized else throws an exception</returns> public override WindowsIdentity AuthorizeUser(SenderInfo senderInfo, out UserQuota quota) { if ((senderInfo == null) || (senderInfo.Principal == null) || (senderInfo.Principal.Identity == null)) { throw new ArgumentNullException("senderInfo"); } if (senderInfo.Principal.Identity.IsAuthenticated == false) { throw new ArgumentException("User is not authenticated"); } RbacUser.RbacUserInfo userInfo = null; if (senderInfo.Principal.WindowsIdentity != null) { userInfo = new RbacUser.RbacUserInfo(senderInfo.Principal.WindowsIdentity); } else { userInfo = new RbacUser.RbacUserInfo(senderInfo.Principal.Identity); } return RbacSystem.Current.AuthorizeUser(userInfo, out quota); }
public abstract WindowsIdentity AuthorizeUser(SenderInfo senderInfo, out UserQuota userQuota);