Ejemplo n.º 1
0
        public ActionResult Edit(ShortLink _shortLink)
        {
            var validator = new ShortURLValidator();

            if (!validator.Validate(_shortLink, out Uri resultURI, out List <string> errMessages))
            {
                foreach (string errMessage in errMessages)
                {
                    ModelState.AddModelError("", errMessage);
                }

                return(View());
            }

            var db = new DataContext();

            var shortLink = db.ShortLinks.Find(_shortLink.ShortLinkID);

            shortLink.LongUrl  = _shortLink.LongUrl;
            shortLink.ShortUrl = _shortLink.ShortUrl;

            db.Entry(shortLink).State = EntityState.Modified;
            db.SaveChanges();

            return(RedirectToAction("Index"));
        }
Ejemplo n.º 2
0
        public ShortLinkModel SaveShortLink(ShortLink shortLink, string url)
        {
            ShortLinkModel shortLinkModel = ShortLinkModel.FromEntity(shortLink, url);

            _shortLinks.Add(shortLinkModel);
            return(shortLinkModel);
        }
Ejemplo n.º 3
0
        public async Task <Response> Handle(Command message)
        {
            if (!Uri.IsWellFormedUriString(message.SourceUrl, UriKind.Absolute))
            {
                throw new InvalidOperationException("URL is not valid");
            }

            var existing = await _db.ShortLinks
                           .Where(x => x.SourceUrl == message.SourceUrl)
                           .ToListAsync()
                           // CaseSensitive search; It would be more efficient then making column case sensitive
                           .ContinueWith(t => t.Result.FirstOrDefault(x => x.SourceUrl == message.SourceUrl))
                           .ConfigureAwait(false);

            if (existing != null)
            {
                return(_mapper.Map <Response>(existing));
            }

            var shortLink = new ShortLink(message.SourceUrl);

            _db.ShortLinks.Add(shortLink);

            await _db.SaveChangesAsync().ConfigureAwait(false);

            return(_mapper.Map <Response>(shortLink));
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Метод проверяет ссылку на корректность
        /// </summary>
        /// <param name="shortLink">Объект сокращенного URL-а</param>
        /// <param name="resultURI">Возвращает Uri</param>
        /// <param name="errMessages">Возврвщается список сообщений об ошибке если Validate = false</param>
        public bool Validate(ShortLink shortLink, out Uri resultURI, out List <string> errMessages)
        {
            errMessages = new List <string>();

            var validator = new HttpURLValidator();

            if (!validator.Validate(shortLink.LongUrl, out resultURI, out string errMessage))
            {
                errMessages.Add(errMessage);
            }

            if (string.IsNullOrWhiteSpace(shortLink.ShortUrl))
            {
                errMessages.Add("2107. Введите сокращенную ссылку!");
            }
            else if (shortLink.ShortUrl.Length != 6)
            {
                errMessages.Add("2110. Сокращенная ссылка должна состоит из 6 символов!");
            }

            if (errMessages.Count > 0)
            {
                return(false);
            }

            return(true);
        }
Ejemplo n.º 5
0
        //
        // GET: /Url/Details/5
        public virtual ActionResult Details(string id)
        {
            try
            {
                ShortLink shortLink = null;

                using (var session = _documentStore.OpenSession())
                {
                    shortLink = session.Load <ShortLink>(id);
                }

                if (shortLink == null)
                {
                    return(View(Views.NotFound));
                }

                var model = Mapper.Map <UrlDetailsViewModel>(shortLink);

                return(View(Views.Details, model));
            }
            catch (Exception)
            {
                throw;
            }
        }
Ejemplo n.º 6
0
        //
        // GET: /Go/key
        public virtual ActionResult Index(string key)
        {
            try
            {
                ShortLink shortLink = null;

                using (var session = _documentStore.OpenSession())
                {
                    var results = from urls in session.Query <ShortLink>()
                                  where urls.Key == key
                                  select urls;

                    shortLink = results.FirstOrDefault();

                    if (shortLink != null)
                    {
                        shortLink.Request();

                        session.Store(shortLink);
                        session.SaveChanges();
                    }
                }

                if (shortLink == null)
                {
                    return(View());
                }

                return(Redirect(shortLink.Url.ToString()));
            }
            catch (Exception)
            {
                return(View());
            }
        }
Ejemplo n.º 7
0
 public void WriteLinkInformation(ShortLink link)
 {
     using (_connection)
     {
         _connection.ExecuteAsync(Queries.InsertLink, link);
     }
 }
Ejemplo n.º 8
0
        public async Task <ShortLink> CreateShortLinkAsync(ShortLink shortLink)
        {
            await _context.ShortLinks.AddAsync(shortLink);

            await _context.SaveChangesAsync();

            return(shortLink);
        }
Ejemplo n.º 9
0
        public async Task <Result> Handle(Query message)
        {
            int id = ShortLink.Decode(message.ShortenedUrl);

            return(await _db.ShortLinks
                   .Where(x => x.Id == id)
                   .ProjectTo <Result>()
                   .FirstOrDefaultAsync()
                   .ConfigureAwait(false));
        }
Ejemplo n.º 10
0
 public static ShortLinkModel FromEntity(ShortLink model, string hostPrefix) =>
 new ShortLinkModel
 {
     _hostPrefix    = hostPrefix,
     Id             = model.Id,
     LongUrl        = model.LongUrl,
     UrlKey         = model.UrlKey,
     InsertionDate  = model.InsertionDate,
     RedirectsCount = model.RedirectsCount
 };
Ejemplo n.º 11
0
        /// <summary>
        /// Generate a short url with an random unique token
        /// </summary>
        /// <param name="relatedTo">the related url to be short</param>
        /// <returns>The generate shorted link</returns>
        public async Task <ShortLink> GenerateAsync(string relatedTo)
        {
            var tokenEntry = new ShortLink()
            {
                Token      = await GenerateTokenAsync(),
                RelatedUrl = relatedTo
            };

            return(tokenEntry);
        }
Ejemplo n.º 12
0
        public async Task InsertAsync(ShortLink entity)
        {
            if (entity == null)
            {
                throw new ArgumentNullException(nameof(entity));
            }

            await _entities.AddAsync(entity);

            await _context.SaveChangesAsync();
        }
Ejemplo n.º 13
0
        public ShortLinkModel UpdateShortLink(ShortLink shortLink, string url)
        {
            bool success = DeleteShortLink(shortLink.Id);

            if (!success)
            {
                return(null);
            }
            SaveShortLink(shortLink, url);
            return(ShortLinkModel.FromEntity(shortLink, url));
        }
Ejemplo n.º 14
0
        public ActionResult Delete(ShortLink _shortLink)
        {
            var db = new DataContext();

            var shortLink = db.ShortLinks.Find(_shortLink.ShortLinkID);

            db.ShortLinks.Remove(shortLink);
            db.SaveChanges();

            return(RedirectToAction("Index"));
        }
Ejemplo n.º 15
0
        public async Task <ShortLink> CreateAsync(string link)
        {
            var shortLink = new ShortLink
            {
                Link    = link,
                ShortId = _shorten.Create(link)
            };

            var item = await _shortLinksStorage.CreateAsync(shortLink);

            return(item);
        }
Ejemplo n.º 16
0
        public IActionResponse <int> Insert(ShortLink model)
        {
            model.Code = Randomizer.RandomString(8);
            _shortLink.Add(model);
            var dbRes = _uow.SaveChanges();

            return(new ActionResponse <int>()
            {
                IsSuccessful = dbRes.ToSaveChangeResult(),
                Result = model.ShortLinkId
            });
        }
Ejemplo n.º 17
0
        public async Task CreateShortLink(string shortLink, string fullLink, string userName)
        {
            var user     = string.IsNullOrEmpty(userName) ? null : new User(userName);
            var expected = new ShortLink("QWERTY", "https://yahoo.com", user);

            _shortLinksRepository.Setup(r => r.InsertAsync(It.IsAny <ShortLink>()))
            .Returns(() => Task.Factory.StartNew(() => _shortLinks.Add(expected)));

            await _service.CreateShortLinkAsync("https://yahoo.com", It.IsAny <User>());

            (await _shortLinksRepository.Object.GetAllAsync()).Should().Contain(expected);
        }
Ejemplo n.º 18
0
        public ShortLinkDto(ShortLink shortLink)
        {
            if (shortLink == null)
            {
                return;
            }

            Key         = shortLink.Key;
            FullLink    = shortLink.FullLink;
            DateCreated = shortLink.DateCreated;
            CallsCount  = shortLink.CallsCount;
        }
Ejemplo n.º 19
0
        public async Task ReceiveCountIncrementShouldBeApplied()
        {
            const string shortUrl  = "fh84ea";
            var          shortLing = new ShortLink {
                ShortUrl = "fh84ea", SourceUrl = "https://google.com/"
            };

            DatabaseContextStub.ShortLinks.Add(shortLing);

            await ShortenerService.GetSourceUrlByShortenUrlAsync(shortUrl);

            Assert.That(shortLing.ReceiveCounter, Is.EqualTo(1));
        }
Ejemplo n.º 20
0
        public ShortLinkModel SaveShortLink(ShortLink shortLink, string url)
        {
            shortLink.Id            = 0;
            shortLink.InsertionDate = DateTimeOffset.Now;
            if (string.IsNullOrWhiteSpace(shortLink.UrlKey))
            {
                shortLink.UrlKey = StringUtils.GenRandomString(6);
            }
            var result = _context.ShortLinks.Add(shortLink);

            _context.SaveChanges();
            return(ShortLinkModel.FromEntity(result.Entity, url));
        }
Ejemplo n.º 21
0
        /// <summary>
        /// Удаляет ссылку из БД.
        /// </summary>
        /// <returns>true, если ссылка удалена и false, если такой ссылки нет в БД.</returns>
        public bool DeleteShortLink(long linkId)
        {
            ShortLink shortLink = _context.ShortLinks.FirstOrDefault(link => link.Id == linkId);

            if (shortLink == null)
            {
                return(false);
            }

            _context.ShortLinks.Remove(shortLink);
            _context.SaveChanges();
            return(true);
        }
Ejemplo n.º 22
0
        public ViewResult GetShortLink(string url)
        {
            var           link          = new ShortLink();
            ICodeGenrator codeGenerator = new CodeGenerator(db.Links.ToList());

            link.Url      = url;
            link.ShortUrl = codeGenerator.GetUniqueRandomCode();
            link.Date     = DateTime.Now;
            link.Counter  = 0;
            db.Add(link);
            db.SaveChanges();
            ViewBag.ShortLink = "/" + link.ShortUrl;
            return(View());
        }
Ejemplo n.º 23
0
        public ShortLinkModel UpdateShortLink(ShortLink shortLink, string url)
        {
            ShortLink result = _context.ShortLinks.FirstOrDefault(x => x.Id == shortLink.Id);

            if (result == null)
            {
                return(null);
            }
            result.LongUrl        = shortLink.LongUrl;
            result.UrlKey         = shortLink.UrlKey;
            result.RedirectsCount = shortLink.RedirectsCount;
            _context.SaveChanges();
            return(ShortLinkModel.FromEntity(result, url));
        }
Ejemplo n.º 24
0
        public ShortLink GenerateShortLink(string fullUrl, IdentityUser user)
        {
            string shortUrl = FreeUrlGenerate();

            var shortLink = new ShortLink()
            {
                ShortUrl         = shortUrl,
                FullUrl          = fullUrl,
                IdentityUser     = user,
                CountTransitions = 0
            };

            return(shortLinkRepository.AddShortLink(shortLink));
        }
Ejemplo n.º 25
0
        public string CutUrl([FromBody] ParamRequest urlPath)
        {
            EncodeTest(urlPath);

            var link = new ShortLink()
            {
                Url = urlPath.UrlPath,
                Id  = urlPath.Id
            };

            var urlChunk = link.GetUrlChunk();

            return(urlChunk);
            // return urlPath;
        }
Ejemplo n.º 26
0
        public async Task <IActionResult> Create([Bind(Prefix = "NewLink")] NewLinkViewModel model)
        {
            // try
            // {
            var link = new ShortLink
            {
                Key            = Guid.NewGuid().ToString().Substring(0, 7),
                DestinationUrl = model.DestinationUrl,
                Created        = DateTime.UtcNow
            };

            await _dbContext.SaveAsync <ShortLink>(link);

            return(RedirectToAction(nameof(Index)));
            // }
            // catch(exce)
        }
Ejemplo n.º 27
0
        public IActionResult To(string url)
        {
            IQueryable <ShortLink> targetLinks = db.Links.Where((link) => link.ShortUrl.Equals(url));

            if (targetLinks.Count() == 0)
            {
                return(View("Error"));
            }
            else
            {
                ShortLink targetLink = targetLinks.First();
                targetLink.Counter++;
                db.Update(targetLink);
                db.SaveChanges();
                return(Redirect(targetLink.Url));
            }
        }
Ejemplo n.º 28
0
        public string ShortenLink(string url)
        {
            var linksCount   = _database.GetLinksCount();
            var id           = linksCount + 1;
            var encodedCount = _encoder.EncodeUrl(linksCount + 1);
            var shorUrl      = new ShortLink
            {
                Id          = id,
                Url         = url,
                ShortUrl    = encodedCount,
                CreatedDate = DateTime.UtcNow
            };

            _database.WriteLinkInformation(shorUrl);

            return(encodedCount);
        }
Ejemplo n.º 29
0
        public static Task HandleShortenUrl(HttpContext context)
        {
            //HttpContext context = null;

            // Perform basic form validation
            if (!context.Request.HasFormContentType || !context.Request.Form.ContainsKey("url"))
            {
                context.Response.StatusCode = StatusCodes.Status400BadRequest;
                return(context.Response.WriteAsync("Cannot process request"));
            }

            context.Request.Form.TryGetValue("url", out var formData);
            var requestedUrl = formData.ToString();

            // Test our URL
            if (!Uri.TryCreate(requestedUrl, UriKind.Absolute, out Uri result))
            {
                context.Response.StatusCode = StatusCodes.Status400BadRequest;
                return(context.Response.WriteAsync("Could not understand URL."));
            }


            var url = result.ToString();
            // Ask for LiteDB and persist a short link
            var liteDB = context.RequestServices.GetService <ILiteDatabase>();
            var links  = liteDB.GetCollection <ShortLink>(BsonAutoId.Int32);

            // Temporary short link
            var entry = new ShortLink
            {
                Url = url
            };

            // Insert our short-link
            links.Insert(entry);

            //var urlChunk = entry.GetUrlChunk();
            //var responseUri = $"{context.Request.Scheme}://{context.Request.Host}/{urlChunk}";
            //return context.Response.WriteAsync(responseUri);

            var urlChunk    = entry.GetUrlChunk();
            var responseUri = $"{context.Request.Scheme}://{context.Request.Host}/{urlChunk}";

            context.Response.Redirect($"/#{responseUri}");
            return(Task.CompletedTask);
        }
Ejemplo n.º 30
0
        public async Task <IActionResult> CutLink(string longUrl)
        {
            // Фабрика сокращённых ссылок.
            var manager = new ShortLink();
            // Новая ссылка.
            var link = manager.Cut(longUrl);

            // Проверка на соответствие ссылки формату.
            if (link == null)
            {
                ViewBag.Message = "Ошибка: Введённая строка не соответствует формату URL";
                return(View("Index"));
            }
            await db.Links.AddAsync(link);

            await db.SaveChangesAsync();

            return(View(link));
        }