using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json.Linq; using Shared.Models.Online.Settings; namespace Online.Controllers { public class VoKino : BaseOnlineController { public VoKino() : base(AppInit.conf.VoKino) { loadKitInitialization = (j, i, c) => { if (j.ContainsKey("online")) i.online = c.online; return i; }; } #region vokinotk [HttpGet] [AllowAnonymous] [Route("lite/vokinotk")] async public Task Token(string login, string pass) { string html = string.Empty; if (string.IsNullOrWhiteSpace(login) || string.IsNullOrWhiteSpace(pass)) { html = "Введите данные аккаунта vokino.pro

   

"; } else { string deviceid = new string(DateTime.Now.ToBinary().ToString().Reverse().ToArray()).Substring(0, 8); string uri = $"{init.corsHost()}/v2/auth?email={HttpUtility.UrlEncode(login)}&passwd={HttpUtility.UrlEncode(pass)}&deviceid={deviceid}"; var head = HeadersModel.Init( ("user-agent", "lampac"), ("X-Lampac-Version", $"{appversion}.{minorversion}") ); var token_request = await Http.Get(uri, proxy: proxy, headers: head); if (token_request == null) return ContentTo($"нет доступа к {init.corsHost()}"); string authToken = token_request.Value("authToken"); if (string.IsNullOrEmpty(authToken)) return ContentTo(token_request.Value("error") ?? "Не удалось получить токен"); html = "Добавьте в init.conf

\"VoKino\": {
  \"enable\": true,
  \"token\": \"" + authToken + "\"
}"; } return ContentTo(html); } #endregion [HttpGet] [Route("lite/vokino")] async public Task Index(bool checksearch, string origid, long kinopoisk_id, string title, string original_title, string balancer, string t, int s = -1, bool rjson = false, string source = null, string id = null) { if (string.IsNullOrEmpty(origid) && !string.IsNullOrEmpty(source) && !string.IsNullOrEmpty(id)) { if (source.Contains("vokino", StringComparison.OrdinalIgnoreCase)) origid = id; } if (kinopoisk_id == 0 && string.IsNullOrEmpty(origid)) return OnError(); if (await IsRequestBlocked(rch: true)) return badInitMsg; if (string.IsNullOrEmpty(init.token)) return OnError("token", statusCode: 401, gbcache: false); if (balancer is "filmix" or "monframe") init.streamproxy = false; if (checksearch /*&& balancer != "vokino"*/) return Content("data-json="); // заглушка от 429 и от +1 к просмотру var oninvk = new VoKinoInvoke ( host, init.corsHost(), init.token, ongettourl => httpHydra.Get(ongettourl, safety: true), streamfile => HostStreamProxy(streamfile), requesterror: () => proxyManager?.Refresh() ); rhubFallback: var cache = await InvokeCacheResult(ipkey($"vokino:{kinopoisk_id}:{origid}:{balancer}:{t}:{init.token}"), 20, () => oninvk.Embed(origid, kinopoisk_id, balancer, t) ); if (IsRhubFallback(cache, safety: true)) goto rhubFallback; return await ContentTpl(cache, () => oninvk.Tpl(cache.Value, origid, kinopoisk_id, title, original_title, balancer, t, s, init.vast, rjson)); } } }