public async Task <TaskResult> Join(string code, ulong userid, string token)
        {
            AuthToken authToken = await Context.AuthTokens.FindAsync(token);

            // Return the same if the token is for the wrong user to prevent someone
            // from knowing if they cracked another user's token. This is basically
            // impossible to happen by chance but better safe than sorry in the case that
            // the literal impossible odds occur, more likely someone gets a stolen token
            // but is not aware of the owner but I'll shut up now - Spike
            if (authToken == null || authToken.User_Id != userid)
            {
                return(new TaskResult(false, $"Incorrect token!"));
            }

            PlanetInvite invite = await Context.PlanetInvites.FindAsync(code);

            if (invite == null)
            {
                return(new TaskResult(false, $"Code is not found!"));
            }

            PlanetBan ban = await Context.PlanetBans.FirstOrDefaultAsync(x => x.User_Id == userid && x.Planet_Id == invite.Planet_Id);

            if (ban != null)
            {
                return(new TaskResult(false, $"User is banned from this planet!"));
            }

            PlanetMember mem = await Context.PlanetMembers.FirstOrDefaultAsync(x => x.User_Id == userid && x.Planet_Id == invite.Planet_Id);

            if (mem != null)
            {
                return(new TaskResult(false, $"User is already in this planet!"));
            }

            Planet planet = await Context.Planets.FirstOrDefaultAsync(x => x.Id == invite.Planet_Id);

            if (!planet.Public)
            {
                return(new TaskResult(false, $"Planet is set to private!"));
            }

            PlanetMember member = new PlanetMember()
            {
                User_Id   = userid,
                Planet_Id = invite.Planet_Id,
            };

            await Context.PlanetMembers.AddAsync(member);

            await Context.SaveChangesAsync();

            return(new TaskResult(true, $"Joined Planet"));
        }
示例#2
0
        public async Task <TaskResult> BanUser(ulong target_id, ulong planet_id, string reason, string token, uint time)
        {
            AuthToken authToken = await Context.AuthTokens.FindAsync(token);

            if (authToken == null)
            {
                return(new TaskResult(false, "Failed to authorize user."));
            }

            ServerPlanet planet = await ServerPlanet.FindAsync(planet_id);

            if (!(await planet.AuthorizedAsync(authToken, PlanetPermissions.Ban)))
            {
                return(new TaskResult(false, "You are not authorized to do this."));
            }

            ServerPlanetMember member = await Context.PlanetMembers.FirstOrDefaultAsync(x => x.Id == target_id &&
                                                                                        x.Planet_Id == planet_id);

            PlanetBan ban = new PlanetBan()
            {
                Id        = IdManager.Generate(),
                Reason    = reason,
                Planet_Id = planet_id,
                User_Id   = member.User_Id,
                Banner_Id = authToken.User_Id,
                Time      = DateTime.UtcNow,
                Permanent = false
            };

            if (time <= 0)
            {
                ban.Permanent = true;
            }
            else
            {
                ban.Minutes = time;
            }

            // Add channel to database
            await Context.PlanetBans.AddAsync(ban);

            List <ServerPlanetRoleMember> roles = await Task.Run(() => Context.PlanetRoleMembers.Where(x => x.Member_Id == target_id && x.Planet_Id == planet_id).ToList());

            foreach (ServerPlanetRoleMember role in roles)
            {
                Context.PlanetRoleMembers.Remove(role);
            }

            Context.PlanetMembers.Remove(member);
            await Context.SaveChangesAsync();

            return(new TaskResult(true, $"Successfully banned user {member.Nickname}"));
        }
示例#3
0
        public async Task <TaskResult> BanUser(ulong id, ulong Planet_Id, string reason, ulong userid, string token, uint time)
        {
            AuthToken authToken = await Context.AuthTokens.FindAsync(token);

            // Return the same if the token is for the wrong user to prevent someone
            // from knowing if they cracked another user's token. This is basically
            // impossible to happen by chance but better safe than sorry in the case that
            // the literal impossible odds occur, more likely someone gets a stolen token
            // but is not aware of the owner but I'll shut up now - Spike
            if (authToken == null || authToken.User_Id != userid)
            {
                return(new TaskResult(false, "Failed to authorize user."));
            }

            ServerPlanet planet = await ServerPlanet.FindAsync(Planet_Id, Mapper);

            if (!(await planet.AuthorizedAsync(authToken, PlanetPermissions.Ban)))
            {
                return(new TaskResult(false, "You are not authorized to do this."));
            }

            PlanetBan ban = new PlanetBan()
            {
                Reason    = reason,
                Planet_Id = Planet_Id,
                User_Id   = id,
                Banner_Id = userid,
                Time      = DateTime.UtcNow,
                Permanent = false
            };

            if (time <= 0)
            {
                ban.Permanent = true;
            }
            else
            {
                ban.Minutes = time;
            }

            // Add channel to database
            await Context.PlanetBans.AddAsync(ban);

            PlanetMember member = await Context.PlanetMembers.Where(x => x.User_Id == id).FirstOrDefaultAsync();

            Context.PlanetMembers.Remove(member);
            await Context.SaveChangesAsync();

            return(new TaskResult(true, $"Successfully banned user {id}"));
        }
        public async Task <TaskResult <ClientPlanetInvite> > GetInvite(string code, ulong userid)
        {
            PlanetInvite invite = await Context.PlanetInvites.FirstOrDefaultAsync(x => x.Code == code);


            if (invite.IsPermanent() == false)
            {
                if (DateTime.UtcNow > invite.Time.AddMinutes((double)invite.Hours))
                {
                    Context.PlanetInvites.Remove(invite);

                    await Context.SaveChangesAsync();

                    return(new TaskResult <ClientPlanetInvite>(false, $"Invite is expired", null));
                }
            }

            PlanetBan ban = await Context.PlanetBans.FirstOrDefaultAsync(x => x.User_Id == userid && x.Planet_Id == invite.Planet_Id);

            if (ban != null)
            {
                return(new TaskResult <ClientPlanetInvite>(false, $"User is banned from this planet!", null));
            }

            PlanetMember member = await Context.PlanetMembers.FirstOrDefaultAsync(x => x.User_Id == userid && x.Planet_Id == invite.Planet_Id);

            if (member != null)
            {
                return(new TaskResult <ClientPlanetInvite>(false, $"User is already in this planet!", null));
            }

            ClientPlanetInvite clientinvite = ClientPlanetInvite.FromBase(invite, Mapper);

            Planet planet = await Context.Planets.FirstOrDefaultAsync(x => x.Id == invite.Planet_Id);

            if (!planet.Public)
            {
                return(new TaskResult <ClientPlanetInvite>(false, $"Planet is set to private!", null));
            }

            clientinvite.PlanetName = planet.Name;

            return(new TaskResult <ClientPlanetInvite>(true, $"Successfully got invite", clientinvite));
        }