public void Execute(IRocketPlayer caller, string[] command) { if (command.Length == 0) { this.SendUsage(caller); return; } var name = command.GetStringParameter(0); var region = RegionsPlugin.Instance.GetRegion(name, true); if (region == null) { UnturnedChat.Say(caller, "Region \"" + name + "\" not found", Color.red); return; } if (!region.IsOwner(caller) && !PermissionUtil.HasPermission(caller, "redefine.override")) { UnturnedChat.Say(caller, "You're not the owner of this region!", Color.red); return; } var args = new ArrayList(command); args.RemoveAt(0); if (region.Type.OnRedefine(PlayerUtil.GetUnturnedPlayer(caller), (string[])args.ToArray(typeof(string)))) { RegionsPlugin.Instance.Regions.Remove(region); RegionsPlugin.Instance.Configuration.Save(); RegionsPlugin.Instance.OnRegionRemoved(region); RegionsPlugin.Instance.Regions.Add(region); RegionsPlugin.Instance.Configuration.Save(); RegionsPlugin.Instance.OnRegionCreated(region); UnturnedChat.Say(caller, "Successfully redefined region: " + name, Color.green); return; } UnturnedChat.Say(caller, "Redefine of region: " + name + " failed.", Color.red); }
public override void OnActionExecuting(ActionExecutingContext context) { base.OnActionExecuting(context); var p = context.HttpContext.User.GetPermissions(); bool hasPermission = false; foreach (var permission in _permissions) { if (PermissionUtil.HasPermission(p, (int)permission, Access.Active)) { hasPermission = true; break; } } if (!hasPermission) { throw new ForbiddenException(string.Join(", ", _permissions)); } }
public async Task <bool> CreateLog(DbContext dbContext, Model.Identity old, Model.Identity @new) { var changes = new List <string>() { "<b>Change Log:</b>" }; if ([email protected](old.Name, StringComparison.InvariantCultureIgnoreCase)) { changes.Add($"• <b>Name</b>: {old.Name} to {@new.Name}."); } if ([email protected](old.Designation, StringComparison.InvariantCultureIgnoreCase)) { changes.Add($"• <b>Designation</b>: {old.Designation} to {@new.Designation}."); } if ([email protected](old.Email, StringComparison.InvariantCultureIgnoreCase)) { changes.Add($"• <b>Email</b>: {old.Email} to {@new.Email}."); } if (@new.Status != old.Status) { changes.Add($"• <b>Status</b>: {old.Status} to {@new.Status}."); } if (@new.Role != old.Role) { changes.Add($"• <b>Role</b>: {old.Role} to {@new.Role}."); } var newClusters = @new.Clusters? .Where(e => old.Clusters?.FirstOrDefault(o => o.ID == e.ID) == null); if (newClusters?.Any() ?? false) { changes.Add($"• <b>Added Clusters</b>: {string.Join(", ", newClusters.Select(e => e.District))}."); } var removedClusters = old.Clusters? .Where(o => @new.Clusters?.FirstOrDefault(e => e.ID == o.ID) == null); if (removedClusters?.Any() ?? false) { changes.Add($"• <b>Removed Clusters</b>: {string.Join(", ", removedClusters.Select(e => e.District))}."); } var newRequestTypes = @new.RequestTypes?.Where(e => !old.RequestTypes?.Contains(e) ?? true); var removedRequestTypes = old.RequestTypes?.Where(e => [email protected]?.Contains(e) ?? true); if (newRequestTypes?.Any() ?? false) { changes.Add($"• <b>Added Request Types</b>: {string.Join(", ", newRequestTypes)}."); } if (removedRequestTypes?.Any() ?? false) { changes.Add($"• <b>Removed Request Types</b>: {string.Join(", ", removedRequestTypes)}."); } var addedPermissions = new List <Permission>(); var removedPermissions = new List <Permission>(); if (!string.IsNullOrEmpty(@new.Permissions)) { for (int i = 0; i < @new.Permissions.Length; i++) { var newPermission = PermissionUtil.HasPermission(@new.Permissions, i, Access.Active); var oldPermission = PermissionUtil.HasPermission(old.Permissions, i, Access.Active); if (newPermission != oldPermission) { if (newPermission) { addedPermissions.Add((Permission)i); } else { removedPermissions.Add((Permission)i); } } } } if (!string.IsNullOrEmpty(old.Permissions)) { var start = @new.Permissions?.Length ?? 0; for (int i = start; i < old.Permissions.Length; i++) { removedPermissions.Add((Permission)i); } } if (addedPermissions.Any()) { changes.Add($"• <b>Added Permission</b> {string.Join(", ", addedPermissions)}."); } if (removedPermissions.Any()) { changes.Add($"• <b>Removed Permission</b>: {string.Join(", ", removedPermissions)}."); } var hasChanges = changes.Count() > 1; if (hasChanges) { var logID = await dbContext.Log.InsertLog(new Log { Action = await dbContext.Translation.GetTranslation(Locale.EN, "IdentityUpdated"), Notes = string.Join('\n', changes), UserID = _user.ID, UserName = _user.Name }); await dbContext.Identity.MapIdentityToLog(_identity.ID, logID); } return(hasChanges); }
public void Execute(IRocketPlayer caller, string[] command) { if (command.Length < 2) { this.SendUsage(caller); return; } var name = command[0]; var region = RegionsPlugin.Instance.GetRegion(name, true); if (region == null) { UnturnedChat.Say(caller, "Region \"" + name + "\" not found", Color.red); return; } if (!region.IsOwner(caller) && !PermissionUtil.HasPermission(caller, "flag.override")) { UnturnedChat.Say(caller, "You're not the owner of this region!", Color.red); return; } var flagName = command[1]; var t = RegionFlag.GetFlagType(flagName); if (t == null) { UnturnedChat.Say(caller, "Unknown flag: \"" + flagName + "\"", Color.red); return; } var f = region.GetFlag(t); if (f == null) { f = (RegionFlag)Activator.CreateInstance(t); f.Name = RegionFlag.GetFlagName(t); } var hasFlagPermission = PermissionUtil.HasPermission(caller, "flag." + flagName); var usage = "Usage: /rflag " + name + " " + f.Name + " " + f.Usage + " [-g <group>]"; if (command.Length == 3 && command[2].Equals("--help")) { var description = f.Description; var value = f.GetValue <object>(); UnturnedChat.Say(caller, "Flag: " + f.Name, Color.blue); UnturnedChat.Say(caller, "Description: " + description, Color.blue); if (!hasFlagPermission) { return; } UnturnedChat.Say(caller, usage); UnturnedChat.Say(caller, "Value: " + (value ?? "null"), Color.blue); return; } if (!hasFlagPermission) { UnturnedChat.Say(caller, "You don't have access to this flag!", Color.red); return; } f.Region = region; Group group = Group.ALL; List <string> args = new List <string>(); bool isValue = false; bool groupSet = false; foreach (string arg in command.Skip(2)) { if (!groupSet) { if (isValue) { if (f.SupportsGroups) { group = GroupExtensions.GetGroup(arg); } groupSet = true; isValue = false; continue; } if (arg.ToLower().Equals("-g") || arg.ToLower().Equals("--group")) { if (!f.SupportsGroups) { UnturnedChat.Say(caller, "Warning: Flag does not support groups", Color.red); } isValue = true; continue; } } args.Add(arg); } string shownValue; if (isValue || !f.ParseValue(caller, region, args.ToArray(), out shownValue, group)) { UnturnedChat.Say(caller, usage, Color.red); return; } region.SetFlag(f.Name, f.Value, f.GroupValues); if (shownValue != null) { string msg = $"Flag has been set to: {shownValue}"; if (f.SupportsGroups) { msg += $" for group {group}!"; } UnturnedChat.Say(caller, msg, Color.green); } RegionsPlugin.Instance.Configuration.Save(); }