Пример #1
0
        public async Task <IActionResult> Edit(LinkEditModel model)
        {
            if (ModelState.IsValid)
            {
                var verifyResult = _linkVerifier.Verify(model.OriginUrl, Url, Request);
                switch (verifyResult)
                {
                case LinkVerifyResult.InvalidFormat:
                    return(BadRequest("Not a valid URL."));

                case LinkVerifyResult.InvalidLocal:
                    return(BadRequest("Can not use local URL."));

                case LinkVerifyResult.InvalidSelfReference:
                    return(BadRequest("Can not use url pointing to this site."));
                }

                var editRequest = new EditLinkRequest(model.Id)
                {
                    NewUrl    = model.OriginUrl,
                    Note      = model.Note,
                    AkaName   = string.IsNullOrWhiteSpace(model.AkaName) ? null : model.AkaName,
                    IsEnabled = model.IsEnabled
                };

                var response = await _linkForwarderService.EditLinkAsync(editRequest);

                if (response.IsSuccess)
                {
                    _cache.Remove(response.Item);
                }
                return(Json(response));
            }
            return(BadRequest("Invalid ModelState"));
        }
Пример #2
0
        public IActionResult Edit([FromRoute] int id, [FromBody] EditLinkRequest request)
        {
            bool isEdited = _linkManager.EditLink(CurrentUserId.Value,
                                                  id,
                                                  request.Name,
                                                  request.Description,
                                                  request.ShortUrl,
                                                  request.OriginalUrl,
                                                  request.IsActive);

            if (!isEdited)
            {
                return(NotFound());
            }

            return(NoContent());
        }
Пример #3
0
        public async Task <Response <string> > EditLinkAsync(EditLinkRequest editLinkRequest)
        {
            try
            {
                using var conn = DbConnection;
                const string sqlFindLink = @"SELECT TOP 1 
                                                 l.Id,
                                                 l.OriginUrl,
                                                 l.FwToken,
                                                 l.Note,
                                                 l.AkaName,
                                                 l.IsEnabled,
                                                 l.UpdateTimeUtc,
                                                 l.TTL
                                                 FROM Link l WHERE l.Id = @id";
                var          link        = await conn.QueryFirstOrDefaultAsync <Link>(sqlFindLink, new { id = editLinkRequest.Id });

                if (null == link)
                {
                    return(new FailedResponse <string>($"Link with id '{editLinkRequest.Id}' does not exist."));
                }

                link.OriginUrl = editLinkRequest.NewUrl;
                link.Note      = editLinkRequest.Note;
                link.AkaName   = editLinkRequest.AkaName;
                link.IsEnabled = editLinkRequest.IsEnabled;
                link.TTL       = editLinkRequest.TTL;

                const string sqlUpdate = @"UPDATE Link SET 
                                               OriginUrl = @OriginUrl,
                                               Note = @Note,
                                               AkaName = @AkaName,
                                               IsEnabled = @IsEnabled,
                                               TTL = @TTL
                                               WHERE Id = @Id";
                await conn.ExecuteAsync(sqlUpdate, link);

                return(new SuccessResponse <string>(link.FwToken));
            }
            catch (Exception e)
            {
                _logger.LogError(e, e.Message);
                return(new FailedResponse <string>(e.Message));
            }
        }
Пример #4
0
        public async Task <string> EditLinkAsync(EditLinkRequest editLinkRequest)
        {
            var link = await _connection.Link.FirstOrDefaultAsync(p => p.Id == editLinkRequest.Id);

            if (link is null)
            {
                return(null);
            }

            link.OriginUrl = editLinkRequest.NewUrl;
            link.Note      = editLinkRequest.Note;
            link.AkaName   = editLinkRequest.AkaName;
            link.IsEnabled = editLinkRequest.IsEnabled;
            link.TTL       = editLinkRequest.TTL;

            await _connection.UpdateAsync(link);

            return(link.FwToken);
        }
Пример #5
0
        public async Task <IActionResult> Edit(LinkEditModel model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var flag = await _featureManager.IsEnabledAsync(nameof(FeatureFlags.AllowSelfRedirection));

            var verifyResult = _linkVerifier.Verify(model.OriginUrl, Url, Request, flag);

            switch (verifyResult)
            {
            case LinkVerifyResult.InvalidFormat:
                return(BadRequest("Not a valid URL."));

            case LinkVerifyResult.InvalidLocal:
                return(BadRequest("Can not use local URL."));

            case LinkVerifyResult.InvalidSelfReference:
                return(BadRequest("Can not use url pointing to this site."));
            }

            var editRequest = new EditLinkRequest(model.Id)
            {
                NewUrl    = model.OriginUrl,
                Note      = model.Note,
                AkaName   = string.IsNullOrWhiteSpace(model.AkaName) ? null : model.AkaName,
                IsEnabled = model.IsEnabled,
                TTL       = model.TTL
            };

            var token = await _linkForwarderService.EditLinkAsync(editRequest);

            if (token is not null)
            {
                _cache.Remove(token);
            }
            return(Json(token));
        }
Пример #6
0
 public AddLinkCommand(EditLinkRequest payload)
 {
     Payload = payload;
 }
Пример #7
0
    public async Task <IActionResult> Update([NotEmpty] Guid id, EditLinkRequest request)
    {
        await _mediator.Send(new UpdateLinkCommand(id, request));

        return(NoContent());
    }
Пример #8
0
    public async Task <IActionResult> Create(EditLinkRequest request)
    {
        await _mediator.Send(new AddLinkCommand(request));

        return(Created(new Uri(request.LinkUrl), request));
    }
Пример #9
0
 public UpdateLinkCommand(Guid id, EditLinkRequest model)
 {
     Id    = id;
     Model = model;
 }