Exemplo n.º 1
0
        public async Task UpdateUrlUsers(URLContext urlContext, HttpRequest request, URL url)
        {
            string userIpAddress = request.HttpContext.Connection.RemoteIpAddress.MapToIPv4().ToString();
            User   retrievedUser;

            //Get user object for this url and this IP address - if it doesn't exist, create it
            try
            {
                retrievedUser = urlContext.UrlUsersSet.Where(x => x.UrlId == url.Id).Select(x => x.User).Where(x => x.IpAddress == request.HttpContext.Connection.RemoteIpAddress.MapToIPv4().ToString()).Single();
            }
            catch (InvalidOperationException)
            {
                User newUser = CreateUser(urlContext, userIpAddress, url, false);

                await urlContext.SaveChangesAsync();

                return;
            }

            //If retrieved user exists Update it
            retrievedUser.LastUsedTime = DateTime.Now;
            retrievedUser.UseCount    += 1;

            await urlContext.SaveChangesAsync();
        }
Exemplo n.º 2
0
        private async Task <URL> AddURLToDatabase(string shortUrlId, string normalizedLongUrl)
        {
            var newUrl = new URL
            {
                Created    = DateTime.Now,
                Identifier = shortUrlId,
                LongURL    = normalizedLongUrl,
                ShortURL   = $"shortify.link/{shortUrlId}"
            };

            await Context.AddAsync(newUrl);

            await Context.SaveChangesAsync();

            return(newUrl);
        }
        public async Task AddCounter(string linkCode)
        {
            var entity = await _context.UrlVisitorsCounters.Where(l => l.LinkCode == linkCode).FirstOrDefaultAsync();

            entity.CountUp();

            _context.Update(entity);
            await _context.SaveChangesAsync();
        }
Exemplo n.º 4
0
        public async Task RemoveURL(URLContext urlContext, string shortenedID)
        {
            URL removeURL = urlContext.UrlSet.Single(x => x.ShortenedIdentifier == shortenedID);

            List <int> removeUserIds = urlContext.UrlUsersSet.Where(x => x.UrlId == removeURL.Id).Select(x => x.UserId).ToList();

            urlContext.UrlSet.Remove(removeURL);
            await urlContext.SaveChangesAsync();

            await RemoveUrlUsers(urlContext, removeUserIds); //Remove every user associated with the URL
        }
Exemplo n.º 5
0
        private async Task RemoveUrlUsers(URLContext urlContext, List <int> removeUserIds)
        {
            List <User> removeUsers = new List <User>();

            foreach (var i in removeUserIds)
            {
                User currentUser = urlContext.UserSet.Single(x => x.Id == i);
                urlContext.UserSet.Remove(currentUser);
            }

            await urlContext.SaveChangesAsync();
        }
Exemplo n.º 6
0
        private User CreateUser(URLContext urlContext, string ipAddress, URL parentUrl, bool isAdmin)
        {
            User returnUser = new User()
            {
                IpAddress          = ipAddress,
                DateInitialised    = DateTime.Now,
                LastUsedTime       = DateTime.Now,
                UseCount           = 1,
                HasAdminPrivileges = isAdmin,
                CountryCode        = GetCountryCode(ipAddress)
            };

            urlContext.UserSet.AddAsync(returnUser);
            urlContext.SaveChangesAsync();

            urlContext.UrlUsersSet.AddAsync(new UrlUsers()
            {
                UrlId = parentUrl.Id, User = returnUser
            });
            urlContext.SaveChangesAsync();

            return(returnUser);
        }
Exemplo n.º 7
0
        private async Task AppendUrlToDB(URLContext urlContext, URL urlToAdd, HttpRequest request) //Called from AddUrl method
        {
            urlToAdd.ShortenedIdentifier = GenerateUrlID(urlContext, urlToAdd);

            Console.WriteLine($"Adding ID: {urlToAdd.ShortenedIdentifier} for website: {urlToAdd.BaseURL} for User (IP): {urlToAdd.ExternalIP} at {DateTime.Now}");

            await urlContext.UrlSet.AddAsync(urlToAdd);

            await urlContext.SaveChangesAsync();

            if (request != null)
            {
                CreateUser(urlContext, request.HttpContext.Connection.RemoteIpAddress.MapToIPv4().ToString(), urlToAdd, true);
            }
        }
Exemplo n.º 8
0
        public string[] Create(string linkUrl)
        {
            string[] url;
            Regex    regex;
            string   pattern2 = @"(http:\/\/|https:\/\/)";

            regex = new Regex(pattern2);
            if (!regex.IsMatch(linkUrl))
            {
                linkUrl = "http://" + linkUrl + "/";
            }
            string pattern = @"(http:\/\/|https:\/\/|www.|\b).{2,}\.\w{2,}(\/|\b)";

            regex = new Regex(pattern);
            if (regex.IsMatch(linkUrl))
            {
                if (FindLongURL(linkUrl) == null)
                {
                    Link link = new Link();
                    link.LongUrl             = linkUrl;
                    link.ShortUrl            = GetShortURL();
                    link.DateCreate          = DateTime.Now;
                    link.NumberOfTransitions = 0;
                    _context.Add(link);
                    _context.SaveChangesAsync();
                    url = new string[2] {
                        "https://" + HttpContext.Request.Host + "/" + link.ShortUrl, "true"
                    };
                    return(url);
                }
                else
                {
                    string shortLink;
                    shortLink = _context.Link.Where(o => o.LongUrl == linkUrl).Select(p => p.ShortUrl).First();
                    url       = new string[2] {
                        "https://" + HttpContext.Request.Host + "/" + shortLink, "false"
                    };
                    return(url);
                }
            }
            else
            {
                url = new string[2] {
                    "Неправильный формат ссылки", "false"
                };
                return(url);
            }
        }
        public async Task <Url> AddUrl(string link)
        {
            var exitEntity = await GetUrl(link);

            BuildEntity(link, exitEntity, out Url entity);

            _context.Add(entity);

            if (!CheckIsExistsInUrlVisitorsCounters(entity.LinkCode))
            {
                var urlVisitorsCounter = new UrlVisitorsCounter(entity.LinkCode);
                _context.Add(urlVisitorsCounter);
            }



            await _context.SaveChangesAsync();

            return(entity);
        }