示例#1
0
        public async Task <IActionResult> DeleteProvider(string token, int animeId, int crossRefType)
        {
            try
            {
                SessionInfoWithError s = await VerifyTokenAsync(token);

                if (s.Error != null)
                {
                    return(s.Error);
                }
                Models.Database.WebCache_CrossRef_AniDB_Provider r = await _db.CrossRef_AniDB_Providers.FirstOrDefaultAsync(a => a.AniDBUserId == s.AniDBUserId && a.AnimeID == animeId && a.CrossRefType == (CrossRefType)crossRefType);

                if (r == null)
                {
                    return(StatusCode(404, "CrossRef Not Found"));
                }
                _db.Remove(r);
                await _db.SaveChangesAsync();

                return(Ok());
            }
            catch (Exception e)
            {
                _logger.LogError(e, $"DELETEPROVIDER with Token={token} AnimeId={animeId} CrossRefType={(CrossRefType)crossRefType}");

                return(StatusCode(500));
            }
        }
示例#2
0
        public async Task <IActionResult> ProviderManage(string token, int id, bool approve)
        {
            try
            {
                SessionInfoWithError s = await VerifyTokenAsync(token);

                if (s.Error != null)
                {
                    return(s.Error);
                }
                if ((s.Role & WebCache_RoleType.Admin) == 0)
                {
                    return(StatusCode(403, "Admin Only"));
                }
                //Exists already?
                Models.Database.WebCache_CrossRef_AniDB_Provider r = await _db.CrossRef_AniDB_Providers.FirstOrDefaultAsync(a => a.WebCache_AniDB_ProviderID == id);

                if (r == null)
                {
                    return(StatusCode(404, "CrossRef Not Found"));
                }
                if (approve)
                {
                    r.Approved = WebCache_RoleType.Admin;
                    List <Models.Database.WebCache_CrossRef_AniDB_Provider> reset_admins = await _db.CrossRef_AniDB_Providers.Where(a => a.AnimeID == r.AnimeID && a.CrossRefType == r.CrossRefType && a.AniDBUserId != s.AniDBUserId && a.Approved == WebCache_RoleType.Admin && a.WebCache_AniDB_ProviderID != r.WebCache_AniDB_ProviderID).ToListAsync();

                    foreach (Models.Database.WebCache_CrossRef_AniDB_Provider w in reset_admins)
                    {
                        w.Approved = WebCache_RoleType.None;
                    }
                }
                else
                {
                    r.Approved = WebCache_RoleType.None;
                }

                r.AniDBUserId = s.AniDBUserId;
                await _db.SaveChangesAsync();

                return(Ok());
            }
            catch (Exception e)
            {
                _logger.LogError(e, $"PROVIDERMANAGE with Token={token} Id={id} Approval:{approve}");
                return(StatusCode(500));
            }
        }
示例#3
0
        private async Task <IActionResult> GetProviderInternal(SessionInfoWithError s, int animeId, CrossRefType crossRefType)
        {
            List <WebCache_CrossRef_AniDB_Provider> results = new List <WebCache_CrossRef_AniDB_Provider>();

            //First check for admin approved link
            Models.Database.WebCache_CrossRef_AniDB_Provider r = await _db.CrossRef_AniDB_Providers.FirstOrDefaultAsync(a => a.Approved == WebCache_RoleType.Admin && a.AnimeID == animeId && a.CrossRefType == crossRefType);

            if (r != null)
            {
                results.Add(r.ToWebCache(WebCache_ReliabilityType.AdminVerified, 0));
                if ((s.Role & WebCache_RoleType.Admin) == 0)
                {
                    return(new JsonResult(results));
                }
                //If not Admin, early exit, otherwise other admin might want to evaluate
            }

            //Second Check for Moderator Approved Link
            List <Models.Database.WebCache_CrossRef_AniDB_Provider> rl = await _db.CrossRef_AniDB_Providers.Where(a => a.Approved == WebCache_RoleType.Moderator && a.AnimeID == animeId && a.CrossRefType == crossRefType).ToListAsync();

            if (rl.Count > 0)
            {
                results.AddRange(rl.Select(a => a.ToWebCache(WebCache_ReliabilityType.ModeratorVerified, 0)));
            }
            //Then The user link
            r = await _db.CrossRef_AniDB_Providers.FirstOrDefaultAsync(a => a.AniDBUserId == s.AniDBUserId && a.AnimeID == animeId && a.CrossRefType == crossRefType);

            if (r != null)
            {
                results.Add(r.ToWebCache(WebCache_ReliabilityType.User, 0));
            }
            //And Now, the popular ones.
            var res = await _db.CrossRef_AniDB_Providers.Where(a => a.AnimeID == animeId && a.CrossRefType == crossRefType && a.Approved == WebCache_RoleType.None).GroupBy(a => new { a.CrossRefID, a.EpisodesOverrideData }).Select(a => new { Count = a.Count(), Result = a.First() }).OrderByDescending(a => a.Count).Take(5).ToListAsync();

            foreach (var n in res)
            {
                results.Add(n.Result.ToWebCache(WebCache_ReliabilityType.Popular, n.Count));
            }

            if (results.Count > 0)
            {
                return(new JsonResult(results));
            }
            return(StatusCode(404, "CrossRef Not Found"));
        }
示例#4
0
        private async Task AddProviderInternal(SessionInfoWithError s, WebCache_CrossRef_AniDB_Provider cross, bool?approve)
        {
            Models.Database.WebCache_CrossRef_AniDB_Provider r = await _db.CrossRef_AniDB_Providers.FirstOrDefaultAsync(a => a.AniDBUserId == s.AniDBUserId && a.AnimeID == cross.AnimeID && a.CrossRefType == cross.CrossRefType);

            if (r == null)
            {
                r = new Models.Database.WebCache_CrossRef_AniDB_Provider();
                _db.Add(r);
            }

            WebCache_RoleType rt = GetRole(s.AniDBUserId);

            r.FillWith(cross);
            //If user is Admin, and this come with approve flag, let approve it, and clean any other approval from the db
            if ((rt & WebCache_RoleType.Admin) > 0 && approve.HasValue && approve.Value)
            {
                r.Approved = WebCache_RoleType.Admin;
                List <Models.Database.WebCache_CrossRef_AniDB_Provider> reset_admins = await _db.CrossRef_AniDB_Providers.Where(a => a.AnimeID == cross.AnimeID && a.CrossRefType == cross.CrossRefType && a.AniDBUserId != s.AniDBUserId && a.Approved == WebCache_RoleType.Admin).ToListAsync();

                foreach (Models.Database.WebCache_CrossRef_AniDB_Provider w in reset_admins)
                {
                    w.Approved = WebCache_RoleType.None;
                }
            }
            //If moderator, simple tag it.
            else if ((rt & WebCache_RoleType.Moderator) > 0)
            {
                r.Approved = WebCache_RoleType.Moderator;
            }
            else
            {
                r.Approved = WebCache_RoleType.None;
            }

            r.AniDBUserId = s.AniDBUserId;
        }