示例#1
0
        public async Task <TaskResult <List <PlanetMemberInfo> > > GetPlanetMemberInfo(ulong planet_id, string token)
        {
            AuthToken authToken = await Context.AuthTokens.FindAsync(token);

            // If not a member of planet
            if (authToken == null || !(await Context.PlanetMembers.AnyAsync(x => x.User_Id == authToken.User_Id && x.Planet_Id == planet_id)))
            {
                return(new TaskResult <List <PlanetMemberInfo> >(false, $"Could not authenticate.", null));
            }

            var members = Context.PlanetMembers.AsQueryable()
                          .Where(x => x.Planet_Id == planet_id)
                          .Include(x => x.User)
                          .Include(x => x.RoleMembership
                                   .OrderBy(x => x.Role.Position))
                          .ThenInclude(x => x.Role);

            List <PlanetMemberInfo> info = new List <PlanetMemberInfo>();

            foreach (var member in members)
            {
                PlanetMemberInfo planetInfo = new PlanetMemberInfo()
                {
                    Member  = member,
                    User    = member.User,
                    RoleIds = member.RoleMembership.Select(x => x.Role_Id).ToList(),
                    State   = "Currently browsing"
                };

                info.Add(planetInfo);
            }

            return(new TaskResult <List <PlanetMemberInfo> >(true, $"Retrieved {members.Count()} member info objects", info));
        }
示例#2
0
        private static async Task GetMemberInfo(HttpContext ctx, ValourDB db,
                                                [FromHeader] string authorization, [Required] ulong planet_id)
        {
            ServerAuthToken auth = await ServerAuthToken.TryAuthorize(authorization, db);

            if (auth == null)
            {
                ctx.Response.StatusCode = 401;
                await ctx.Response.WriteAsync($"Token is invalid [token: {authorization}]");

                return;
            }

            ServerPlanet planet = await db.Planets
                                  .Include(x => x.Members).ThenInclude(x => x.User)
                                  .Include(x => x.Members).ThenInclude(x => x.RoleMembership.OrderBy(x => x.Role.Position))
                                  .ThenInclude(x => x.Role)
                                  .FirstOrDefaultAsync(x => x.Id == planet_id);

            if (planet == null)
            {
                ctx.Response.StatusCode = 400;
                await ctx.Response.WriteAsync($"Planet not found [id: {planet_id.ToString()}]");

                return;
            }

            if (!planet.Members.Any(x => x.User_Id == auth.User_Id))
            {
                ctx.Response.StatusCode = 401;
                await ctx.Response.WriteAsync($"Member not found");

                return;
            }

            List <PlanetMemberInfo> info = new List <PlanetMemberInfo>();

            foreach (var member in planet.Members)
            {
                PlanetMemberInfo planetInfo = new PlanetMemberInfo()
                {
                    Member  = member,
                    User    = member.User,
                    RoleIds = member.RoleMembership.Select(x => x.Role_Id),
                    State   = "Currently browsing"
                };

                info.Add(planetInfo);
            }

            ctx.Response.StatusCode = 200;
            await ctx.Response.WriteAsJsonAsync(info);
        }
示例#3
0
 public void SetCacheValues(PlanetMemberInfo info)
 {
     SetCacheValues(info.RoleIds, info.State, info.User);
 }