Esempio n. 1
0
        public void Handle(IVoltronSession session, ModerationRequest packet)
        {
            if (session.IsAnonymous)
            {
                return;
            }
            using (var da = DAFactory.Get)
            {
                var user  = da.Users.GetById(session.UserId);
                var mod   = user.is_moderator;
                var admin = user.is_admin;

                if (!(mod || admin))
                {
                    return;
                }

                switch (packet.Type)
                {
                case ModerationRequestType.IPBAN_USER:
                case ModerationRequestType.BAN_USER:
                case ModerationRequestType.KICK_USER:
                    var targetAvatar = packet.EntityId;
                    if (packet.Type == ModerationRequestType.BAN_USER || packet.Type == ModerationRequestType.IPBAN_USER)
                    {
                        var ava = da.Avatars.Get(packet.EntityId);
                        if (ava != null)
                        {
                            var theiruser = da.Users.GetById(ava.user_id);

                            if (theiruser != null && !(theiruser.is_admin || theiruser.is_moderator))
                            {
                                FSO.Server.Api.Api.INSTANCE.SendBanMail(theiruser.username, theiruser.email, 0);     // Need to handle end_date in the future

                                da.Users.UpdateBanned(theiruser.user_id, true);
                                if (packet.Type == ModerationRequestType.IPBAN_USER && theiruser.last_ip != "127.0.0.1" && theiruser.last_ip != "::1")
                                {
                                    da.Bans.Add(theiruser.last_ip, theiruser.user_id, "Banned from ingame", 0, theiruser.client_id);
                                }
                            }
                            else
                            {
                                return;
                            }
                        }
                    }

                    Sessions.GetByAvatarId(targetAvatar)?.Close();

                    break;
                }
            }
        }
Esempio n. 2
0
        public async Task <bool> SetModerationState(long amId, string version, Amsv1MaterialData materialData)
        {
            var uri = _baseUri + $"/api/{_apiVersion}/am/{amId}/version/{version}/moderation";

            try
            {
                var status = materialData.ModerationState;
                if (_moderationStateMap.TryGetValue(materialData.ModerationState, out var mappedStatus))
                {
                    status = mappedStatus;
                }

                var request = new ModerationRequest {
                    Status = status, Comment = materialData.ModerationComment ?? string.Empty
                };
                var reqContent = new StringContent(request.ToJson(), Encoding.UTF8, "application/json");

                using (var response = await _httpClient.PutAsync(uri, reqContent))
                {
                    var content = await response.Content.ReadAsStringAsync();

                    if (!response.IsSuccessStatusCode)
                    {
                        if (response.StatusCode == HttpStatusCode.PreconditionFailed)
                        {
                            _logger.Error("[MODERATION_FAIL] Unable to add moderation to material {amid} uuid {uuid} firm {firmid}. Moderation info: {info}, Response: {content}", amId, materialData.Uuid, materialData.FirmId, request, content);
                        }
                        else
                        {
                            response.EnsureSuccessStatusCode();
                        }
                    }

                    _logger.Information("[MODERATION_SUCCESS] Ad material {uuid} {firmid} successfully moderated with state: {state}, comment: {comment}", materialData.Uuid, materialData.FirmId, materialData.ModerationState, materialData.ModerationComment);

                    return(response.IsSuccessStatusCode);
                }
            }
            catch (Exception ex)
            {
                _logger.Error(ex, "Exception occured while moderating material {amid}", amId);
                throw;
            }
        }
Esempio n. 3
0
        public void Handle(IVoltronSession session, ModerationRequest packet)
        {
            if (session.IsAnonymous)
            {
                return;
            }
            using (var da = DAFactory.Get())
            {
                var user  = da.Users.GetById(session.UserId);
                var mod   = user.is_moderator;
                var admin = user.is_admin;

                if (!(mod || admin))
                {
                    return;
                }

                switch (packet.Type)
                {
                case ModerationRequestType.IPBAN_USER:
                case ModerationRequestType.BAN_USER:
                case ModerationRequestType.KICK_USER:
                    var targetAvatar = packet.EntityId;
                    if (packet.Type == ModerationRequestType.BAN_USER || packet.Type == ModerationRequestType.IPBAN_USER)
                    {
                        var ava = da.Avatars.Get(packet.EntityId);
                        if (ava != null)
                        {
                            var theiruser = da.Users.GetById(ava.user_id);

                            if (theiruser != null && !(theiruser.is_admin || theiruser.is_moderator))
                            {
                                FSO.Server.Api.Api.INSTANCE?.SendBanMail(theiruser.username, theiruser.email, 0);     // Need to handle end_date in the future

                                da.Users.UpdateBanned(theiruser.user_id, true);
                                if (packet.Type == ModerationRequestType.IPBAN_USER && theiruser.last_ip != "127.0.0.1" && theiruser.last_ip != "::1")
                                {
                                    da.Bans.Add(theiruser.last_ip, theiruser.user_id, "Banned from ingame", 0, theiruser.client_id);
                                }
                            }
                            else
                            {
                                return;
                            }
                        }
                    }

                    Sessions.GetByAvatarId(targetAvatar)?.Close();

                    break;

                case ModerationRequestType.CHANGE_MENTOR_STATUS:
                {
                    var tAvatar = packet.EntityId;
                    var ava     = da.Avatars.Get(packet.EntityId);
                    if (ava != null)
                    {
                        var theiruser = da.Users.GetById(ava.user_id);

                        if (theiruser != null)         // should admins also be able to be mentors? right now there's no rule against it
                        {
                            var newvalue = !da.Users.GetMentorStatus(ava.user_id);
                            da.Users.SetMentorStatus(theiruser.user_id, newvalue);         // toggle the setting held for the current avatar
                        }
                    }
                }
                break;
                }
            }
        }