• Как можно реализовать ограничение на одновременное скачивание файлов?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Проблема с методом File - он возвращает ленивый ответ. Т.е. он не читает весь поток сразу, а ждет пока будет вызван метод от IActionResult, поэтому семафор берется и сразу же отпускается.
    Чтобы эту проблему решить надо знать, когда файл точно отправлен.
    Предлагаю сделать декоратор специальный. Например:

    [ApiController]
    [Route("[controller]")]
    public class SampleController : ControllerBase
    {
        private readonly IRateLimiter _rateLimiter;
    
        public SampleController(IRateLimiter rateLimiter)
        {
            _rateLimiter = rateLimiter;
        }
    
        [HttpGet("connection")]
        public async Task<IActionResult> DownLoadFile(Guid file)
        {
            var stream = await GetFileStream(file);
            return new RateLimiterFileActionResult(File(stream, "content/type", "sample.txt"), _rateLimiter);
        }
    }
    
    class RateLimiterFileActionResult : IActionResult
    {
        private readonly IActionResult _actionResultImplementation;
        private readonly IRateLimiter _rateLimiter;
    
        public RateLimiterFileActionResult(IActionResult actionResultImplementation, IRateLimiter rateLimiter)
        {
            _actionResultImplementation = actionResultImplementation;
            _rateLimiter = rateLimiter;
        }
    
        public async Task ExecuteResultAsync(ActionContext context)
        {
            try
            {
                await _rateLimiter.ObtainAsync(context.HttpContext.RequestAborted);
                await _actionResultImplementation.ExecuteResultAsync(context);
            }
            finally
            {
                await _rateLimiter.ReleaseAsync(context.HttpContext.RequestAborted);
            }
        }
    }
    
    public interface IRateLimiter
    {
        public Task ObtainAsync(CancellationToken token);
        public Task ReleaseAsync(CancellationToken token);
    }


    Здесь используется не семафор, а специальный интерфейс, хотя разницы особо нет.
    Также, стоит заметить, что блокировка берется внутри метода декоратора, а не в методе контроллера - например, пользователь отменит запрос и тогда надо будет думать как семафор отпустить - в этой реализации думать не надо.
    Ответ написан
    1 комментарий
  • Как можно осуществить шифрование трафика?

    mindtester
    @mindtester
    http://iczin.su/hexagram_48
    Подскажите, каким образом это можно сделать
    очень просто - там где отправляете данные*, там их и шифруете. где принимаете - там и расшифровываете. как безопасно обмениваться ключами, если они сеансовые - это уже надо все таки поднимать планку эрудиции повыше, книги, статьи, практика

    upd * данные это строка, массив байтов, или любые другие. где отправляете блок данных в канал передачи - там и шифруете перед отправкой. потом уже будете совершенствоваться по мере необходимости
    Ответ написан
    6 комментариев
  • Как можно осуществить шифрование трафика?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    1. Читайте и создавайте свой openssl-модуль.
    Отрывок из доки

    ENGINE
    ======

    With OpenSSL 0.9.6, a new component was added to support alternative
    cryptography implementations, most commonly for interfacing with external
    crypto devices (eg. accelerator cards). This component is called ENGINE,
    and its presence in OpenSSL 0.9.6 (and subsequent bug-fix releases)
    caused a little confusion as 0.9.6** releases were rolled in two
    versions, a "standard" and an "engine" version. In development for 0.9.7,
    the ENGINE code has been merged into the main branch and will be present
    in the standard releases from 0.9.7 forwards.

    There are currently built-in ENGINE implementations for the following
    crypto devices:

    o Microsoft CryptoAPI
    o VIA Padlock
    o nCipher CHIL

    In addition, dynamic binding to external ENGINE implementations is now
    provided by a special ENGINE called "dynamic". See the "DYNAMIC ENGINE"
    section below for details.

    2. Можно сразу SSL-Tunnel подправить.

    По первому и второму методу можно будет создавать шифрование в таком виде:
    68747470733a2f2f692e696d6775722e636f6d2f

    Где можно будет применять либу?
    Варианты линков сходу:
    1. https://www.opennet.ru/base/net/openvpn_x509.txt.html
    2. https://httpd.apache.org/docs/2.4/ssl/
    3. https://kb.justhost.ru/article/1952
    Ответ написан
    32 комментария
  • Как можно осуществить шифрование трафика?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Вам нужно реализовать наследовать CryptoStream и после уже его использовать для передачи с вашей реализацией.
    Правда единственное что приходит в голову, вам нужно реализовать что то сертифицированное для ФСТЕК.
    Но тогда почему вы тут спрашиваете?
    https://docs.microsoft.com/ru-ru/dotnet/api/system...
    Ответ написан
    2 комментария
  • С чего начать изучать game dev?

    @GreatRash
    Лично я начинал с написания Арканоида, столкнулся с миллиардом проблем, которые в итоге привели меня к изучению линейной алгебры (векторы, матрицы и действия над ними), ну а дальше уже движками стал баловаться Unity там... Как юнити от UnityScript отказались пришлось начать C# изучать. Потом на работе запретили ставить Unity, пришлось искать что-то опенсорсное, таким макаром я наткнулся на Godot и как-то сразу в него залип...

    Что-то меня понесло, короче, начните с Арканоида.
    Ответ написан
    2 комментария