public virtual ActionResult Create(UrlCreateViewModel model)
        {
            try
            {
                using (var session = _documentStore.OpenSession())
                {
                    // Does a shortened url already exist with the specified key?
                    //var results = from urls in session.Query<UrlModel>()
                    //              where urls.Key == urlModel.Key
                    //              select urls;
                    var results = session.Query <ShortLink>().Where(url => url.Key == model.Key);

                    var existingUrlModel = results.FirstOrDefault();

                    if (existingUrlModel != null)
                    {
                        // TODO: Error page and try again.

                        return(View());
                    }

                    var shortLink = Mapper.Map <ShortLink>(model);
                    shortLink.Created = DateTimeOffset.UtcNow;

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

                return(RedirectToAction(Actions.Index()));
            }
            catch
            {
                return(View());
            }
        }
        public async Task <IActionResult> Index([Bind("TargetUrl,Name")] UrlCreateViewModel urlVM)
        {
            var createdName = urlVM.Name ?? Helper.GenerateRandomUrlName();

            if (await _context.Urls.AnyAsync(u => u.Name == createdName))
            {
                ModelState.AddModelError("", $"{createdName} name is already taken. Try different one.");
                return(View());
            }


            Url url = new Url
            {
                Name      = createdName,
                TargetUrl = urlVM.TargetUrl,
                User      = await _userManager.GetUserAsync(User)
            };

            try
            {
                if (ModelState.IsValid)
                {
                    // domain blocked validation placed here, cause urlVM.TargetUrl can't be null
                    // in order to use Helper.GetUrlDomain (ModelState.IsValid has to be true)
                    string domain = Helper.GetUrlDomain(urlVM.TargetUrl);
                    if ((await _context.BlockedDomains.FirstOrDefaultAsync(d => d.Address == domain)) != null)
                    {
                        ModelState.AddModelError("", $"{domain} domain has been BLOCKED.");
                        return(View());
                    }

                    _context.Add(url);
                    await _context.SaveChangesAsync();

                    TempData["shortenedUrl"] = createdName;

                    return(RedirectToAction(nameof(Index)));
                }
            }
            catch (DbUpdateException)
            {
                ModelState.AddModelError("", "Jakis przypal z baza :/");
            }

            return(View());
        }
Beispiel #3
0
        public async Task <KeyValuePair <string, string> > Post([FromBody] UrlCreateViewModel url)
        {
            var ret = await _tableContext.CreateUrl(url.Value);

            return(new KeyValuePair <string, string>(ret, url.Value));
        }