Esempio n. 1
0
 /// <summary>
 /// Initializes a new instance of the <see cref="UserPermission"/> class.
 /// </summary>
 /// <param name="serverID">The ID of the server that the permission is associated with.</param>
 /// <param name="userID">The ID of the user that the permission applies to.</param>
 /// <param name="permission">The unique identifier of the permission.</param>
 /// <param name="target">The allowed targets for the permission.</param>
 public UserPermission(Snowflake serverID, Snowflake userID, Guid permission, PermissionTarget target)
 {
     this.UserID     = userID;
     this.Permission = permission;
     this.Target     = target;
     this.ServerID   = serverID;
 }
Esempio n. 2
0
 /// <summary>
 /// Initializes a new instance of the <see cref="UserPermission"/> class.
 /// </summary>
 /// <param name="serverID">The ID of the server that the permission is associated with.</param>
 /// <param name="userID">The ID of the user that the permission applies to.</param>
 /// <param name="permission">The unique identifier of the permission.</param>
 /// <param name="target">The allowed targets for the permission.</param>
 public UserPermission(long serverID, long userID, Guid permission, PermissionTarget target)
 {
     this.UserID     = userID;
     this.Permission = permission;
     this.Target     = target;
     this.ServerID   = serverID;
 }
        internal static ChannelCreateAuditLogData Create(BaseDiscordClient discord, Model log, EntryModel entry)
        {
            var changes    = entry.Changes;
            var overwrites = new List <Overwrite>();

            var overwritesModel = changes.FirstOrDefault(x => x.ChangedProperty == "permission_overwrites");
            var typeModel       = changes.FirstOrDefault(x => x.ChangedProperty == "type");
            var nameModel       = changes.FirstOrDefault(x => x.ChangedProperty == "name");

            var type = typeModel.NewValue.ToObject <ChannelType>();
            var name = nameModel.NewValue.ToObject <string>();

            foreach (var overwrite in overwritesModel.NewValue)
            {
                var deny  = overwrite.Value <ulong>("deny");
                var _type = overwrite.Value <string>("type");
                var id    = overwrite.Value <ulong>("id");
                var allow = overwrite.Value <ulong>("allow");

                PermissionTarget permType = _type == "member" ? PermissionTarget.User : PermissionTarget.Role;

                overwrites.Add(new Overwrite(id, permType, new OverwritePermissions(allow, deny)));
            }

            return(new ChannelCreateAuditLogData(entry.TargetId.Value, name, type, overwrites.ToReadOnlyCollection()));
        }
 private OverwriteUpdateAuditLogData(OverwritePermissions before, OverwritePermissions after, ulong targetId, PermissionTarget targetType)
 {
     OldPermissions    = before;
     NewPermissions    = after;
     OverwriteTargetId = targetId;
     OverwriteType     = targetType;
 }
Esempio n. 5
0
        /// <inheritdoc/>
        public bool IsGrantedByDefaultTo(PermissionTarget target)
        {
            switch (target)
            {
            case PermissionTarget.Self:
            {
                return(this.IsGrantedByDefaultToSelf);
            }

            case PermissionTarget.Other:
            {
                return(this.IsGrantedByDefaultToOthers);
            }

            case PermissionTarget.All:
            {
                return(this.IsGrantedByDefaultToSelf && this.IsGrantedByDefaultToOthers);
            }

            default:
            {
                throw new ArgumentOutOfRangeException(nameof(target), target, null);
            }
            }
        }
 public static PermissionTargetDto Map(PermissionTarget permissionTarget)
 {
     return new PermissionTargetDto
                {
                    DisplayOrder = permissionTarget.DisplayOrder,
                    Name = permissionTarget.Name
                };
 }
Esempio n. 7
0
 /// <inheritdoc/>
 public bool IsGrantedByDefaultTo(PermissionTarget target)
 {
     return(target switch
     {
         PermissionTarget.Self => this.IsGrantedByDefaultToSelf,
         PermissionTarget.Other => this.IsGrantedByDefaultToOthers,
         PermissionTarget.All => this.IsGrantedByDefaultToSelf && this.IsGrantedByDefaultToOthers,
         _ => throw new ArgumentOutOfRangeException(nameof(target), target, null)
     });
Esempio n. 8
0
            async Task manageThing(string strId, ulong thingId, PermissionTarget thingType, bool?value)
            {
                await Interaction.AcknowledgeAsync(flags : InteractionResponseFlags.Ephemeral);

                try
                {
                    RestApplicationCommand command = await getCommand(strId);

                    if (command == null)
                    {
                        await Interaction.FollowupAsync(":x: Command does not exist");

                        return;
                    }

                    GuildApplicationCommandPermissions existingPerms = null;
                    if (command is RestGlobalCommand g)
                    {
                        existingPerms = await g.GetCommandPermissions(Interaction.Guild.Id);
                    }
                    else if (command is RestGuildCommand u)
                    {
                        existingPerms = await u.GetCommandPermissions();
                    }
                    var permBuilder   = SlashCommandPermsBuilder.From(existingPerms);
                    var existingValue = permBuilder.Get(thingId);
                    if (value.HasValue)
                    {
                        if (existingValue != value.Value)
                        {
                            permBuilder.With(thingId, thingType, value.Value);
                            await command.ModifyCommandPermissionsAsync(Interaction.Guild.Id, permBuilder.Build().ToArray());
                        }
                        await Interaction.FollowupAsync("Done!");
                    }
                    else
                    {
                        if (!existingValue.HasValue)
                        {
                            await Interaction.FollowupAsync($"{thingType} has no explicit permission set.");
                        }
                        else
                        {
                            await Interaction.FollowupAsync($"{thingType} permission for command: " + emote(existingValue.Value));
                        }
                    }
                }
                catch (Exception ex)
                {
                    Program.LogMsg(ex, "a");
                }
            }
Esempio n. 9
0
        private void CreateOrUpdatePublicPermissions(string repo, string path)
        {
            string prefix = FindPrefixFromOrigin();

            // create permissions based on the repo and path
            string permissionTargetKey = string.Format("shr-{0}-{1}-{2}.pub", prefix, repo.Replace(".", "").Replace(" ", ""), path.GetHashCode());
            string permissionTargetlRepoDescription = string.Format("Public sharing permissions on {0} in {1} for repo {2}", repo, Origin, repo);
            string permissionsTargetIncludePattern  = string.Format("{0}/**", path);

            PermissionTarget permissionTarget = storeBaseUrl.Security().GetPermissionTargetDetails(permissionTargetKey);

            // some persmissions already exist for that repo
            if (permissionTarget != null)
            {
                if (permissionTarget.Repositories.Count() > 1 || !permissionTarget.Repositories.Contains(repo))
                {
                    log.ErrorFormat("Permission target already exists on artifactory but not for the right repo : {0} [{1}]. Please contact the administrator.", permissionTargetKey, repo);
                    throw new ShareException(string.Format("Permission target already exists on artifactory but not for the right repo : {0} [{1}]. Please contact the administrator.", permissionTargetKey, repo));
                }
                // if the permission does not exist
                if (!permissionTarget.IncludesPattern.Split(',').Any(ip => ip.Trim(' ') == permissionsTargetIncludePattern))
                {
                    log.DebugFormat("Updating already existing permission target on artifactory : {0}", permissionTargetKey);
                    permissionTarget.IncludesPattern += "," + permissionsTargetIncludePattern;
                }
            }
            else
            {
                permissionTarget = new PermissionTarget()
                {
                    Name         = permissionTargetKey,
                    Repositories = new System.Collections.Generic.List <string>()
                    {
                        repo
                    },
                    IncludesPattern = permissionsTargetIncludePattern
                };
            }

            Permissions permissions = new Permissions();

            permissions.Add("r");
            permissionTarget.Principals.Groups.Clear();
            permissionTarget.Principals.Groups.Add("readers", permissions);
            permissionTarget.Principals.Users.Clear();
            permissionTarget.Principals.Users.Add("anonymous", permissions);

            storeBaseUrl.Security().CreateOrReplacePermissionTarget(permissionTarget);
        }
Esempio n. 10
0
        internal static OverwriteCreateAuditLogData Create(BaseDiscordClient discord, Model log, EntryModel entry)
        {
            API.AuditLogChangeJson[] changes = entry.Changes;

            API.AuditLogChangeJson denyModel  = changes.FirstOrDefault(x => x.ChangedProperty == "deny");
            API.AuditLogChangeJson allowModel = changes.FirstOrDefault(x => x.ChangedProperty == "allow");

            ulong deny  = denyModel.NewValue.ToObject <ulong>(discord.ApiClient.Serializer);
            ulong allow = allowModel.NewValue.ToObject <ulong>(discord.ApiClient.Serializer);

            OverwritePermissions permissions = new OverwritePermissions(allow, deny);

            ulong            id   = entry.Options.OverwriteTargetId.Value;
            PermissionTarget type = entry.Options.OverwriteType;

            return(new OverwriteCreateAuditLogData(entry.TargetId.Value, new Overwrite(id, type, permissions)));
        }
        internal static OverwriteDeleteAuditLogData Create(BaseDiscordClient discord, Model log, EntryModel entry)
        {
            var changes = entry.Changes;

            var denyModel  = changes.FirstOrDefault(x => x.ChangedProperty == "deny");
            var typeModel  = changes.FirstOrDefault(x => x.ChangedProperty == "type");
            var idModel    = changes.FirstOrDefault(x => x.ChangedProperty == "id");
            var allowModel = changes.FirstOrDefault(x => x.ChangedProperty == "allow");

            var deny  = denyModel.OldValue.ToObject <ulong>();
            var type  = typeModel.OldValue.ToObject <string>();
            var id    = idModel.OldValue.ToObject <ulong>();
            var allow = allowModel.OldValue.ToObject <ulong>();

            PermissionTarget target = type == "member" ? PermissionTarget.User : PermissionTarget.Role;

            return(new OverwriteDeleteAuditLogData(new Overwrite(id, target, new OverwritePermissions(allow, deny))));
        }
        internal static OverwriteUpdateAuditLogData Create(BaseDiscordClient discord, Model log, EntryModel entry)
        {
            API.AuditLogChangeJson[] changes = entry.Changes;

            API.AuditLogChangeJson denyModel  = changes.FirstOrDefault(x => x.ChangedProperty == "deny");
            API.AuditLogChangeJson allowModel = changes.FirstOrDefault(x => x.ChangedProperty == "allow");

            ulong?beforeAllow = allowModel?.OldValue?.ToObject <ulong>(discord.ApiClient.Serializer);
            ulong?afterAllow  = allowModel?.NewValue?.ToObject <ulong>(discord.ApiClient.Serializer);
            ulong?beforeDeny  = denyModel?.OldValue?.ToObject <ulong>(discord.ApiClient.Serializer);
            ulong?afterDeny   = denyModel?.NewValue?.ToObject <ulong>(discord.ApiClient.Serializer);

            OverwritePermissions beforePermissions = new OverwritePermissions(beforeAllow ?? 0, beforeDeny ?? 0);
            OverwritePermissions afterPermissions  = new OverwritePermissions(afterAllow ?? 0, afterDeny ?? 0);

            PermissionTarget type = entry.Options.OverwriteType;

            return(new OverwriteUpdateAuditLogData(entry.TargetId.Value, beforePermissions, afterPermissions, entry.Options.OverwriteTargetId.Value, type));
        }
Esempio n. 13
0
        internal static OverwriteCreateAuditLogData Create(BaseDiscordClient discord, Model log, EntryModel entry)
        {
            var changes = entry.Changes;

            var denyModel  = changes.FirstOrDefault(x => x.ChangedProperty == "deny");
            var allowModel = changes.FirstOrDefault(x => x.ChangedProperty == "allow");

            var deny  = denyModel.NewValue.ToObject <ulong>();
            var allow = allowModel.NewValue.ToObject <ulong>();

            var permissions = new OverwritePermissions(allow, deny);

            var id   = entry.Options.OverwriteTargetId.Value;
            var type = entry.Options.OverwriteType;

            PermissionTarget target = type == "member" ? PermissionTarget.User : PermissionTarget.Role;

            return(new OverwriteCreateAuditLogData(new Overwrite(id, target, permissions)));
        }
        internal static OverwriteUpdateAuditLogData Create(BaseDiscordClient discord, Model log, EntryModel entry)
        {
            var changes = entry.Changes;

            var denyModel  = changes.FirstOrDefault(x => x.ChangedProperty == "deny");
            var allowModel = changes.FirstOrDefault(x => x.ChangedProperty == "allow");

            var beforeAllow = allowModel?.OldValue?.ToObject <ulong>();
            var afterAllow  = allowModel?.NewValue?.ToObject <ulong>();
            var beforeDeny  = denyModel?.OldValue?.ToObject <ulong>();
            var afterDeny   = denyModel?.OldValue?.ToObject <ulong>();

            var beforePermissions = new OverwritePermissions(beforeAllow ?? 0, beforeDeny ?? 0);
            var afterPermissions  = new OverwritePermissions(afterAllow ?? 0, afterDeny ?? 0);

            PermissionTarget target = entry.Options.OverwriteType == "member" ? PermissionTarget.User : PermissionTarget.Role;

            return(new OverwriteUpdateAuditLogData(beforePermissions, afterPermissions, entry.Options.OverwriteTargetId.Value, target));
        }
Esempio n. 15
0
        public PermissionStatus IsFiltered(ulong id, PermissionTarget target)
        {
            for (int i = 0; i < Permissions.Count; i++)
            {
                Permission permission = Permissions[i];

                if (permission.Target == target)
                {
                    PermissionStatus targetStatus = permission.IsFiltered(id);

                    if (targetStatus != PermissionStatus.NotFound)
                    {
                        return(targetStatus);
                    }
                }
            }

            return(PermissionStatus.NotFound);
        }
Esempio n. 16
0
        /***************************************************************************************************************************************/

        #region Permissions

        /// <summary>
        /// Creates the permission for group on repo.
        /// </summary>
        /// <param name="group">Group.</param>
        /// <param name="repo">Repo.</param>
        public void CreatePermissionForGroupOnRepo(string group, string repo)
        {
            PermissionTarget permissionTarget = new PermissionTarget {
                Name         = group,
                Repositories = new List <string> {
                    repo
                }
            };

            Permissions permissions = new Permissions();

            permissions.Add(PERMISSION_DELETE);
            permissions.Add(PERMISSION_READ);
            permissions.Add(PERMISSION_DEPLOY);
            permissions.Add(PERMISSION_ANNOTATE);
            permissionTarget.Principals.Groups.Clear();
            permissionTarget.Principals.Groups.Add(group, permissions);

            ArtifactoryBaseUrl.Security().CreateOrReplacePermissionTarget(permissionTarget);
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="RequireEntityOwnerOrPermissionAttribute"/> class.
 /// </summary>
 /// <param name="permission">The permission to require.</param>
 /// <param name="target">The target to require.</param>
 public RequireEntityOwnerOrPermissionAttribute(Permission permission, PermissionTarget target)
 {
     this.Permission = permission;
     this.Target     = target;
 }
Esempio n. 18
0
 /// <summary>
 /// Initializes a new instance of the <see cref="RequirePermissionAttribute"/> class.
 /// </summary>
 /// <param name="type">The required permission.</param>
 /// <param name="target">The required target scope.</param>
 public RequirePermissionAttribute(Type type, PermissionTarget target)
 {
     this.Type   = type;
     this.Target = target;
 }
Esempio n. 19
0
 public ModifyChannelPermissionsParams(PermissionTarget type, ChannelPermissions allow, ChannelPermissions deny)
 {
     Type  = type;
     Allow = allow;
     Deny  = deny;
 }
Esempio n. 20
0
 /// <summary>
 /// Initializes a new instance of the <see cref="RolePermission"/> class.
 /// </summary>
 /// <param name="roleID">The ID of the role that the permission applies to.</param>
 /// <param name="permission">The unique identifier of the permission.</param>
 /// <param name="target">The allowed targets for the permission.</param>
 public RolePermission(long roleID, Guid permission, PermissionTarget target)
 {
     this.RoleID     = roleID;
     this.Permission = permission;
     this.Target     = target;
 }
Esempio n. 21
0
 public bool Equals(PermissionTarget type) => type != null && type.Value == Value;
        public async Task <bool> CheckPermissionAsync(PrincipalIn principal, string uniqueRightCode, PermissionTarget target, CancellationToken cancellationToken = default)
        {
            var queryParameters = new NameValueCollection();

            return(await _connection.RequestResourceAsync <PermissionsCheckPermissionPostRequest, bool>("POST", $"api/http/permissions/check-permission{queryParameters.ToQueryString()}",
                                                                                                        new PermissionsCheckPermissionPostRequest
            {
                Principal = principal,
                UniqueRightCode = uniqueRightCode,
                Target = target,
            }, cancellationToken));
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="RequireEntityOwnerOrPermissionAttribute"/> class.
 /// </summary>
 /// <param name="permissionType">The permission to require.</param>
 /// <param name="target">The target to require.</param>
 public RequireEntityOwnerOrPermissionAttribute(Type permissionType, PermissionTarget target)
 {
     _permissionType = permissionType;
     _target         = target;
 }
Esempio n. 24
0
 /// <summary>
 ///     Initializes a new <see cref="Overwrite"/> with provided target information and modified permissions.
 /// </summary>
 public Overwrite(ulong targetId, PermissionTarget targetType, OverwritePermissions permissions)
 {
     TargetId    = targetId;
     TargetType  = targetType;
     Permissions = permissions;
 }
Esempio n. 25
0
        private void CreateOrUpdateRestrictedPermissions(string repo, string path, bool addPermissions = false)
        {
            string prefix = FindPrefixFromOrigin();

            // create permissions based on the repo and path
            string permissionTargetKey = string.Format("shr-{0}-{1}-{2}.reader", prefix, repo.Replace(".", "").Replace(" ", ""), path.GetHashCode());
            string permissionTargetlRepoDescription = string.Format("Sharing permissions on {0} in {1} for repo {2}", repo, Origin, repo);
            string permissionsTargetIncludePattern  = string.Format("{0}/**", path);

            PermissionTarget permissionTarget = storeBaseUrl.Security().GetPermissionTargetDetails(permissionTargetKey);

            // some persmissions already exist for that repo
            if (permissionTarget != null)
            {
                if (permissionTarget.Repositories.Count() > 1 || !permissionTarget.Repositories.Contains(repo))
                {
                    log.ErrorFormat("Permission target already exists on artifactory but not for the right repo : {0} [{1}]. Please contact the administrator.", permissionTargetKey, repo);
                    throw new ShareException(string.Format("Permission target already exists on artifactory but not for the right repo : {0} [{1}]. Please contact the administrator.", permissionTargetKey, repo));
                }
                // if the permission does not exist
                if (!permissionTarget.IncludesPattern.Split(',').Any(ip => ip.Trim(' ') == permissionsTargetIncludePattern))
                {
                    log.DebugFormat("Updating already existing permission target on artifactory : {0}", permissionTargetKey);
                    permissionTarget.IncludesPattern += "," + permissionsTargetIncludePattern;
                }
            }
            else
            {
                permissionTarget = new PermissionTarget()
                {
                    Name         = permissionTargetKey,
                    Repositories = new System.Collections.Generic.List <string>()
                    {
                        repo
                    },
                    IncludesPattern = permissionsTargetIncludePattern
                };
            }

            foreach (var community in Communities)
            {
                string      communityGroupName = string.Format("{0}-co-{1}", prefix, community.Identifier);
                Permissions permissions        = new Permissions();
                if (addPermissions && permissionTarget.Principals.Groups.ContainsKey(communityGroupName))
                {
                    permissions = permissionTarget.Principals.Groups[communityGroupName];
                }
                if (!permissions.Contains("r"))
                {
                    permissions.Add("r");
                }
                permissionTarget.Principals.Groups.Remove(communityGroupName);
                permissionTarget.Principals.Groups.Add(communityGroupName, permissions);
            }

            foreach (var user in Users)
            {
                Permissions permissions = new Permissions();
                if (addPermissions && permissionTarget.Principals.Groups.ContainsKey(user.Username))
                {
                    permissions = permissionTarget.Principals.Users[user.Username];
                }
                if (!permissions.Contains("r"))
                {
                    permissions.Add("r");
                }
                permissionTarget.Principals.Users.Remove(user.Username);
                permissionTarget.Principals.Users.Add(user.Username, permissions);
            }

            storeBaseUrl.Security().CreateOrReplacePermissionTarget(permissionTarget);
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="RequirePermissionAttribute"/> class.
 /// </summary>
 /// <param name="permissionType">The required permission.</param>
 /// <param name="target">The required target scope.</param>
 public RequirePermissionAttribute([NotNull] Type permissionType, PermissionTarget target)
 {
     _permissionType = permissionType;
     _target         = target;
 }
Esempio n. 27
0
 public Permission(PermissionType type, PermissionTarget target, List <ulong> identifiers)
 {
     Type        = type;
     Target      = target;
     Identifiers = identifiers;
 }
 public PermissionsCheckPermissionPostRequest(PrincipalIn principal, string uniqueRightCode, PermissionTarget target)
 {
     Principal       = principal;
     UniqueRightCode = uniqueRightCode;
     Target          = target;
 }
Esempio n. 29
0
 public bool Equals(PermissionTarget type) => type != null && type.Value == Value;