lampac/Shared/AppInit.cs
lampac-talks f843f04fd4 chore: initial commit 154.3
Signed-off-by: lampac-talks <lampac-talks@users.noreply.github.com>
2026-01-30 16:23:09 +03:00

1333 lines
55 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.ResponseCompression;
using Newtonsoft.Json;
using Shared.Engine;
using Shared.Engine.Utilities;
using Shared.Models;
using Shared.Models.AppConf;
using Shared.Models.Base;
using Shared.Models.Browser;
using Shared.Models.DLNA;
using Shared.Models.Merchant;
using Shared.Models.Module;
using Shared.Models.Online.Settings;
using Shared.Models.ServerProxy;
using Shared.Models.SISI.Base;
using System.Reflection;
using System.Text.RegularExpressions;
using System.Threading;
using YamlDotNet.Serialization;
namespace Shared
{
public class AppInit
{
#region static
public static string rootPasswd;
public static readonly HashSet<string> CompressionMimeTypes = ResponseCompressionDefaults.MimeTypes.Concat(["image/svg+xml"]).ToHashSet();
public static bool Win32NT => Environment.OSVersion.Platform == PlatformID.Win32NT;
public static bool IsDefaultApnOrCors(string apn) => apn != null && Regex.IsMatch(apn, "(apn.monster|apn.watch|cfhttp.top|lampac.workers.dev)");
static FileSystemWatcher fileWatcher;
static AppInit()
{
updateConf();
if (File.Exists("init.conf"))
lastUpdateConf = File.GetLastWriteTime("init.conf");
updateYamlConf();
if (File.Exists("init.yaml") && File.GetLastWriteTime("init.yaml") > lastUpdateConf)
lastUpdateConf = File.GetLastWriteTime("init.yaml");
LoadModules();
#region watcherInit
if (conf.watcherInit == "system")
{
fileWatcher = new FileSystemWatcher
{
Path = Directory.GetCurrentDirectory(),
Filter = "init.conf",
NotifyFilter = NotifyFilters.FileName | NotifyFilters.LastWrite,
EnableRaisingEvents = true
};
fileWatcher.Changed += async (s, e) =>
{
fileWatcher.EnableRaisingEvents = false;
try
{
await Task.Delay(200);
updateConf();
updateYamlConf();
}
catch { }
finally
{
fileWatcher.EnableRaisingEvents = true;
}
};
}
else
{
ThreadPool.QueueUserWorkItem(async _ =>
{
while (true)
{
await Task.Delay(TimeSpan.FromSeconds(1));
try
{
if (File.Exists("init.conf"))
{
var lwtConf = File.GetLastWriteTime("init.conf");
var lwtYaml = File.GetLastWriteTime("init.yaml");
if (lwtConf > lastUpdateConf || lwtYaml > lastUpdateConf)
{
updateConf();
updateYamlConf();
lastUpdateConf = lwtConf > lwtYaml ? lwtConf : lwtYaml;
try
{
string init = JsonConvert.SerializeObject(conf, Formatting.Indented, new JsonSerializerSettings()
{
NullValueHandling = NullValueHandling.Ignore,
DefaultValueHandling = DefaultValueHandling.Ignore
});
Directory.CreateDirectory("database/backup/init");
File.WriteAllText($"database/backup/init/{DateTime.Now.ToString("dd-MM-yyyy.HH")}.conf", init);
}
catch { }
}
}
}
catch { }
}
});
}
#endregion
}
#endregion
public readonly string guid = Guid.NewGuid().ToString();
#region conf
static DateTime lastUpdateConf = default;
public static AppInit conf = null;
static void updateConf()
{
if (!File.Exists("init.conf"))
{
conf = new AppInit();
return;
}
string initfile = File.ReadAllText("init.conf").Trim();
initfile = Regex.Replace(initfile, "\"weblog\":([ \t]+)?(true|false)([ \t]+)?,", "", RegexOptions.IgnoreCase);
if (!initfile.StartsWith("{"))
initfile = "{" + initfile + "}";
try
{
conf = JsonConvert.DeserializeObject<AppInit>(initfile, new JsonSerializerSettings
{
Error = (se, ev) =>
{
ev.ErrorContext.Handled = true;
Console.WriteLine($"DeserializeObject Exception init.conf:\n{ev.ErrorContext.Error}\n\n");
}
});
}
catch { }
if (conf == null)
conf = new AppInit();
PosterApi.Initialization(conf.omdbapi_key, conf.posterApi, new ProxyLink());
#region accounts
if (conf.accsdb.accounts != null)
{
foreach (var u in conf.accsdb.accounts)
{
if (conf.accsdb.findUser(u.Key) is AccsUser user)
{
if (u.Value > user.expires)
user.expires = u.Value;
}
else
{
conf.accsdb.users.Add(new AccsUser()
{
id = u.Key.ToLowerAndTrim(),
expires = u.Value
});
}
}
}
#endregion
#region users.txt
if (File.Exists("merchant/users.txt"))
{
long utc = DateTime.UtcNow.ToFileTimeUtc();
foreach (string line in File.ReadAllLines("merchant/users.txt"))
{
if (string.IsNullOrWhiteSpace(line) && !line.Contains("@"))
continue;
var data = line.Split(',');
if (data.Length > 1)
{
if (long.TryParse(data[1], out long ex) && ex > utc)
{
try
{
DateTime e = DateTime.FromFileTimeUtc(ex);
string email = data[0].ToLowerAndTrim();
if (conf.accsdb.findUser(email) is AccsUser user)
{
if (e > user.expires)
user.expires = e;
user.group = conf.Merchant.defaultGroup;
}
else
{
conf.accsdb.users.Add(new AccsUser()
{
id = email,
expires = e,
group = conf.Merchant.defaultGroup
});
}
}
catch { }
}
}
}
}
#endregion
try
{
File.WriteAllText("current.conf", JsonConvert.SerializeObject(conf, Formatting.Indented));
}
catch { }
}
static void updateYamlConf()
{
if (conf == null)
return;
try
{
if (File.Exists("init.yaml"))
{
string yaml = File.ReadAllText("init.yaml");
if (!string.IsNullOrWhiteSpace(yaml))
{
var deserializer = new DeserializerBuilder().IgnoreUnmatchedProperties().Build();
var yamlObject = deserializer.Deserialize(new StringReader(yaml));
if (yamlObject != null)
{
string json = JsonConvertPool.SerializeObject(yamlObject);
JsonConvert.PopulateObject(json, conf, new JsonSerializerSettings
{
Error = (se, ev) =>
{
ev.ErrorContext.Handled = true;
Console.WriteLine($"DeserializeObject Exception init.yaml:\n{ev.ErrorContext.Error}\n\n");
}
});
try
{
File.WriteAllText("current.conf", JsonConvert.SerializeObject(conf, Formatting.Indented));
}
catch { }
}
}
}
}
catch (Exception ex)
{
Console.WriteLine($"DeserializeObject Exception init.yaml:\n{ex}\n\n");
}
}
#endregion
#region Host
public static string Host(HttpContext httpContext)
{
string scheme = string.IsNullOrEmpty(conf.listen.scheme) ? httpContext.Request.Scheme : conf.listen.scheme;
if (httpContext.Request.Headers.TryGetValue("xscheme", out var xscheme) && !string.IsNullOrEmpty(xscheme))
scheme = xscheme;
if (!string.IsNullOrEmpty(conf.listen.host))
return $"{scheme}://{conf.listen.host}";
if (httpContext.Request.Headers.TryGetValue("xhost", out var xhost))
return $"{scheme}://{Regex.Replace(xhost, "^https?://", "")}";
return $"{scheme}://{httpContext.Request.Host.Value}";
}
#endregion
#region modules
public static List<RootModule> modules;
public static void LoadModules()
{
if (modules != null)
return;
if (File.Exists("module/manifest.json"))
{
var jss = new JsonSerializerSettings { Error = (se, ev) =>
{
ev.ErrorContext.Handled = true;
Console.WriteLine("module/manifest.json - " + ev.ErrorContext.Error + "\n\n");
}};
var mods = JsonConvert.DeserializeObject<List<RootModule>>(File.ReadAllText("module/manifest.json"), jss);
if (mods == null)
return;
modules = new List<RootModule>();
foreach (var mod in mods)
{
if (!mod.enable || mod.dll == "Jackett.dll")
continue;
string path = File.Exists(mod.dll) ? mod.dll : $"{Environment.CurrentDirectory}/module/{mod.dll}";
if (File.Exists(path))
{
try
{
mod.assembly = Assembly.LoadFile(path);
mod.index = mod.index != 0 ? mod.index : (100 + modules.Count);
modules.Add(mod);
}
catch { }
}
}
}
}
#endregion
#region server
public ListenConf listen = new ListenConf()
{
localhost = "127.0.0.1",
ip = "any", port = 9118,
compression = true,
frontend = null // cloudflare|nginx
};
public bool multiaccess = false;
public bool useDeveloperExceptionPage = false;
public bool mikrotik = false;
public string watcherInit = "cron";// system
public string imagelibrary = "NetVips"; // NetVips|ImageMagick|none
public bool pirate_store = true;
public string apikey = null;
public bool litejac = true;
public bool filelog = false;
public bool disableEng = false;
public bool always_rjson = false;
public string anticaptchakey;
public string omdbapi_key;
public string playerInner;
public string defaultOn = "enable";
public string corsehost { get; set; } = "https://cors.apn.monster";
public BaseModule BaseModule { get; set; } = new BaseModule()
{
nws = true,
ws = true,
kurwaCron = true,
allowExternalIpAccessToLocalRequest = false,
EnableControllers = ["Admin", "Bookmark", "Chromium", "Cmd", "PlayerInner", "Corseu", "Media", "ErrorDoc", "Cub", "LampaWeb", "RchApi", "Storage", "SyncApi", "Timecode", "Tmdb", "WebLog"],
Middlewares = new BaseModuleMiddlewares()
{
proxy = true,
proxyimg = true,
proxytmdb = true,
proxycub = true,
staticFiles = true,
unknownStaticFiles = true,
statistics = true,
staticache = true,
module = true
},
Sql = new BaseModuleSql()
{
externalids = true,
sisi = true,
syncUser = true
}
};
public CorseuConf corseu { get; set; } = new CorseuConf();
public MediaApiConf media { get; set; } = new MediaApiConf();
public ApnConf apn { get; set; } = new ApnConf() { secure = "none" };
public Dictionary<string, CmdConf> cmd = new Dictionary<string, CmdConf>();
public PosterApiConf posterApi = new PosterApiConf()
{
rsize = true, width = 210,
bypass = "statichdrezka\\."
};
public WsConf WebSocket = new WsConf()
{
type = "nws", // signalr|nws
inactiveAfterMinutes = 120
};
public KitConf kit = new KitConf()
{
cacheToSeconds = 60 * 60 * 3, // 3h
configCheckIntervalSeconds = 20
};
public SyncConf sync = new SyncConf();
public HybridCacheConf cache = new HybridCacheConf()
{
type = "fdb", // mem|fdb|sql|hybrid
extend = -1, // seconds
reqIPs = 5
};
public StaticacheConf Staticache { get; set; } = new StaticacheConf();
public WafConf WAF = new WafConf()
{
enable = true,
bypassLocalIP = true,
bruteForceProtection = true,
limit_map = new Dictionary<string, WafLimitMap>()
{
["^/(proxy|tmdb|cub|transcoding|dlna|ts)"] = new WafLimitMap() { limit = 50, second = 1 },
["^/nexthub"] = new WafLimitMap() { limit = 5, second = 1, queryIds = ["plugin"] },
["^/(sisi|bgs|chu|runetki|elo|epr|hqr|phub|ptx|sbg|tizam|xmr|xnx|xds)"] = new WafLimitMap() { limit = 5, second = 1, pathId = true },
["^/lite/"] = new WafLimitMap() { limit = 10, second = 1 },
["^/(rch|timecode|storage|bookmark)/"] = new WafLimitMap() { limit = 10, second = 1, pathId = true },
[".*"] = new WafLimitMap() { limit = 10, second = 1 }
}
};
public WebLogConf weblog = new WebLogConf();
public OpenStatConf openstat = new OpenStatConf();
public RchConf rch = new RchConf()
{
enable = true
};
public SyncUserConf sync_user = new SyncUserConf() { enable = true, version = 2 };
public StorageConf storage = new StorageConf() { enable = true, max_size = 7_000000, brotli = false, md5name = true };
public GCConf GC { get; set; } = new GCConf()
{
enable = true,
// false - GC старается возвращать высвобождённую виртуальную память ОС
// true - GC сохраняет адресное пространство/сегменты, чтобы быстрее переиспользовать
RetainVM = false,
// false — только Stop-the-World сборки
// true — фоновые (concurrent) сборки
Concurrent = null,
// 1 — минимальная экономия памяти, крупные поколения
// 9 — максимальная экономия, маленькие поколения, частые GC
ConserveMemory = null,
// Процент доступной памяти, после которого GC считает систему под давлением
// Ниже значение — раньше и агрессивнее запускаются сборки
HighMemoryPercent = 90
};
public PuppeteerConf chromium = new PuppeteerConf()
{
enable = true, Headless = true,
Args = ["--disable-blink-features=AutomationControlled"], // , "--window-position=-2000,100"
context = new KeepopenContext() { keepopen = true, keepalive = 20, min = 0, max = 4 }
};
public PuppeteerConf firefox = new PuppeteerConf()
{
enable = false, Headless = true,
context = new KeepopenContext() { keepopen = true, keepalive = 20, min = 1, max = 2 }
};
public FfprobeSettings ffprobe = new FfprobeSettings() { enable = true };
public TranscodingConf transcoding { get; set; } = new TranscodingConf()
{
tempRoot = Path.Combine("cache", "transcoding"),
idleTimeoutSec = 60 * 5, idleTimeoutSec_live = 120,
maxConcurrentJobs = 5
};
public CubConf cub { get; set; } = new CubConf()
{
enable = false, viewru = true,
responseContentLength = true,
domain = CrypTo.DecodeBase64("Y3ViLnJlZA=="), scheme = "http",
mirror = "mirror-kurwa.men",
cache_api = 180, cache_img = 120,
};
public TmdbConf tmdb { get; set; } = new TmdbConf()
{
enable = true,
responseContentLength = true,
httpversion = 2, DNS_TTL = 20,
cache_api = 240, cache_img = 60,
api_key = "4ef0d7355d9ffb5151e987764708ce96"
};
public ServerproxyConf serverproxy = new ServerproxyConf()
{
enable = true, verifyip = true,
encrypt = true, encrypt_aes = true,
responseContentLength = true,
buffering = new ServerproxyBufferingConf()
{
enable = true,
rent = 64 * 1024, // 64кб
length = 256 // rent * 256 = ~16 MB
},
image = new ServerproxyImageConf()
{
cache = true,
cache_rsize = true,
cache_time = 60, // minute
noSqlDb = true // не хранить ProxyLink в sql
},
maxlength_m3u = 5000000, // 5mb
maxlength_ts = 40000000 // 40mb
};
public FileCacheConf fileCacheInactive = new FileCacheConf()
{
hls = 90, html = 5, torrent = 2880 // minute
};
public DLNASettings dlna = new DLNASettings()
{
enable = true, path = "dlna",
uploadSpeed = 125000 * 10,
autoupdatetrackers = true, intervalUpdateTrackers = 90, addTrackersToMagnet = true,
mediaPattern = "^\\.(aac|flac|mpga|mpega|mp2|mp3|m4a|oga|ogg|opus|spx|opus|weba|wav|dif|dv|fli|mp4|mpeg|mpg|mpe|mpv|mkv|ts|m4s|m2ts|mts|ogv|webm|avi|qt|mov)$",
cover = new CoverSettings()
{
enable = true, preview = true,
timeout = 20, skipModificationTime = 60,
priorityClass = System.Diagnostics.ProcessPriorityClass.Idle,
extension = "(mp4|mkv|avi|mpg|mpe|mpv)",
coverComand = "-n -ss 3:00 -i \"{file}\" -vf \"thumbnail=150,scale=400:-2\" -frames:v 1 \"{thumb}\"",
// фрэмрэйт -r : больше - больше файл , плавнее движения
// качество -crf : больше - меньше файл , появляются артефакты
previewComand = "-n -ss 00:03:00 -to 00:03:07 -i \"{file}\" -ss 00:04:37 -to 00:04:44 -i \"{file}\" -ss 00:06:41 -to 00:06:48 -i \"{file}\" -ss 00:09:20 -to 00:09:27 -i \"{file}\" -ss 00:12:45 -to 00:12:52 -i \"{file}\" -ss 00:17:09 -to 00:17:16 -i \"{file}\" -ss 00:22:50 -to 00:22:57 -i \"{file}\" -ss 00:29:51 -to 00:29:58 -i \"{file}\" -ss 00:39:23 -to 00:39:30 -i \"{file}\" -ss 00:51:44 -to 00:51:51 -i \"{file}\" -ss 01:07:45 -to 01:07:52 -i \"{file}\" -ss 01:20:33 -to 01:20:40 -i \"{file}\" -filter_complex \"[0:v]setpts=0.5*PTS,scale=-2:240[v0];[1:v]setpts=0.5*PTS,scale=-2:240[v1];[2:v]setpts=0.5*PTS,scale=-2:240[v2];[3:v]setpts=0.5*PTS,scale=-2:240[v3];[4:v]setpts=0.5*PTS,scale=-2:240[v4];[5:v]setpts=0.5*PTS,scale=-2:240[v5];[6:v]setpts=0.5*PTS,scale=-2:240[v6];[7:v]setpts=0.5*PTS,scale=-2:240[v7];[8:v]setpts=0.5*PTS,scale=-2:240[v8];[9:v]setpts=0.5*PTS,scale=-2:240[v9];[10:v]setpts=0.5*PTS,scale=-2:240[v10];[11:v]setpts=0.5*PTS,scale=-2:240[v11];[v0][v1][v2][v3][v4][v5][v6][v7][v8][v9][v10][v11]concat=n=12:v=1:a=0\" -an -r 20 -c:v libx264 -crf 28 -preset veryslow \"{preview}\""
}
};
public WebConf LampaWeb = new WebConf()
{
autoupdate = true,
intervalupdate = 90, // minute
basetag = true, index = "lampa-main/index.html",
git = "yumata/lampa",
tree = "978b95a8f808cca7f24add2337d55ebf1effc411"
};
public OnlineConf online = new OnlineConf()
{
findkp = "all", checkOnlineSearch = true,
spider = true, spiderName = "Spider",
component = "lampac", name = "Lampac", description = "Плагин для просмотра онлайн сериалов и фильмов",
version = true, btn_priority_forced = true, showquality = true,
with_search = new List<string>() { "kinotochka", "kinobase", "kinopub", "lumex", "filmix", "filmixtv", "fxapi", "redheadsound", "animevost", "animego", "animedia", "animebesst", "anilibria", "aniliberty", "rezka", "rhsprem", "kodik", "remux", "animelib", "kinoukr", "rc/filmix", "rc/fxapi", "rc/rhs", "vcdn", "videocdn", "lumex", "collaps", "collaps-dash", "vdbmovies", "hdvb", "alloha", "veoveo", "rutubemovie", "vkmovie" }
};
public SisiConf sisi { get; set; } = new SisiConf()
{
NextHUB = true, spider = true, lgbt = true,
component = "sisi", iconame = "", push_all = true,
heightPicture = 240, rsize = true, rsize_disable = ["Chaturbate", "PornHub", "PornHubPremium", "HQporner", "Spankbang", "Eporner", "Porntrex", "Xnxx", "Porndig", "Youjizz", "Veporn", "Pornk"],
bookmarks = new BookmarksConf() { saveimage = true, savepreview = true },
history = new HistoryConf() { enable = true, days = 30 }
};
public AccsConf accsdb = new AccsConf()
{
authMesage = "Войдите в аккаунт - настройки, синхронизация",
denyMesage = "Добавьте {account_email} в init.conf или через {host}/admin",
denyGroupMesage = "У вас нет прав для просмотра этой страницы",
expiresMesage = "Время доступа для {account_email} истекло в {expires}",
maxip_hour = 10, maxrequest_hour = 400, maxlock_day = 3, blocked_hour = 36,
shared_daytime = 366*10, // 10 years
};
public MerchantsModel Merchant = new MerchantsModel();
public VastConf vast = new VastConf();
/// <summary>
/// https://infocisco.ru/prefix_network_mask.html
/// </summary>
public HashSet<Known> KnownProxies { get; set; } = new HashSet<Known>()
{
new Known() { ip = "10.2.0.0", prefixLength = 16 },
new Known() { ip = "192.168.0.0", prefixLength = 16 }
};
public bool real_ip_cf { get; set; }
public ProxySettings proxy = new ProxySettings();
public ProxySettings[] globalproxy = new ProxySettings[]
{
//new ProxySettings()
//{
// pattern = "\\.onion",
// list = ["socks5://127.0.0.1:9050"]
//}
};
public IReadOnlyCollection<OverrideResponse> overrideResponse { get; set; }
//{
// new OverrideResponse()
// {
// pattern = "/over/text",
// action = "html",
// type = "text/plain; charset=utf-8",
// val = "text"
// },
// new OverrideResponse()
// {
// pattern = "/over/online.js",
// action = "file",
// type = "application/javascript; charset=utf-8",
// val = "plugins/online.js"
// },
// new OverrideResponse()
// {
// pattern = "/over/gogoole",
// action = "redirect",
// val = "https://www.google.com/"
// }
//};
#endregion
#region SISI
public SisiSettings BongaCams { get; set; } = new SisiSettings("BongaCams", "kwwsv=22hh1erqjdfdpv1frp", rch_access: "apk", stream_access: "apk,cors,web")
{
spider = false,
httpversion = 2,
headers = HeadersModel.Init(
("referer", "{host}/"),
("x-requested-with", "XMLHttpRequest")
).ToDictionary()
};
public SisiSettings Runetki { get; set; } = new SisiSettings("Runetki", "kwwsv=22uxv1uxqhwnl81frp", rch_access: "apk", stream_access: "apk,cors,web")
{
spider = false,
httpversion = 2,
headers = HeadersModel.Init(
("referer", "{host}/"),
("x-requested-with", "XMLHttpRequest")
).ToDictionary()
};
public SisiSettings Chaturbate { get; set; } = new SisiSettings("Chaturbate", "kwwsv=22fkdwxuedwh1frp", rch_access: "apk,cors", stream_access: "apk,cors,web")
{
spider = false,
};
public SisiSettings Ebalovo { get; set; } = new SisiSettings("Ebalovo", "kwwsv=22zzz1hedoryr1sur", rch_access: "apk", stream_access: "apk,cors")
{
rchstreamproxy = "web",
headers = Http.defaultFullHeaders,
headers_stream = HeadersModel.Init(Http.defaultFullHeaders,
("sec-fetch-dest", "video"),
("sec-fetch-mode", "no-cors"),
("sec-fetch-site", "same-origin")
).ToDictionary()
};
public SisiSettings Eporner { get; set; } = new SisiSettings("Eporner", "kwwsv=22zzz1hsruqhu1frp", rch_access: "apk,cors", stream_access: "apk,cors")
{
rchstreamproxy = "web",
headers_image = HeadersModel.Init(
("Accept", "image/jpeg,image/png,image/*;q=0.8,*/*;q=0.5"),
("User-Agent", "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2"),
("Cache-Control", "max-age=0")
).ToDictionary()
};
public SisiSettings HQporner { get; set; } = new SisiSettings("HQporner", "kwwsv=22p1ktsruqhu1frp", rch_access: "apk,cors", stream_access: "apk,cors,web")
{
geostreamproxy = ["ALL"],
headers = HeadersModel.Init("referer", "{host}").ToDictionary()
};
public SisiSettings Porntrex { get; set; } = new SisiSettings("Porntrex", "kwwsv=22zzz1sruqwuh{1frp", streamproxy: true, rch_access: "apk", stream_access: "apk")
{
headers_stream = HeadersModel.Init(
("referer", "{host}/")
).ToDictionary(),
headers_image = HeadersModel.Init(
("referer", "{host}/")
).ToDictionary()
};
public SisiSettings Spankbang { get; set; } = new SisiSettings("Spankbang", "kwwsv=22ux1vsdqnedqj1frp", rch_access: "apk,cors,web", stream_access: "apk,cors,web")
{
httpversion = 2
};
public SisiSettings Xhamster { get; set; } = new SisiSettings("Xhamster", "kwwsv=22ux1{kdpvwhu1frp", rch_access: "apk,cors", stream_access: "apk,cors,web")
{
httpversion = 2,
headers = HeadersModel.Init(Http.defaultFullHeaders,
("sec-fetch-dest", "empty"),
("sec-fetch-mode", "cors"),
("sec-fetch-site", "cross-site")
).ToDictionary(),
headers_image = HeadersModel.Init(
("Accept", "image/jpeg,image/png,image/*;q=0.8,*/*;q=0.5"),
("User-Agent", "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2"),
("Cache-Control", "max-age=0")
).ToDictionary()
};
public SisiSettings Xnxx { get; set; } = new SisiSettings("Xnxx", "kwwsv=22zzz1{q{{1frp", rch_access: "apk,cors", stream_access: "apk,cors,web");
public SisiSettings Tizam { get; set; } = new SisiSettings("Tizam", "kwwsv=22lq1wl}dp1lqir", rch_access: "apk,cors", stream_access: "apk,cors")
{
rchstreamproxy = "web"
};
public SisiSettings Xvideos { get; set; } = new SisiSettings("Xvideos", "kwwsv=22zzz1{ylghrv1frp", rch_access: "apk,cors", stream_access: "apk,cors,web");
public SisiSettings XvideosRED { get; set; } = new SisiSettings("XvideosRED", "kwwsv=22zzz1{ylghrv1uhg", enable: false);
public SisiSettings PornHub { get; set; } = new SisiSettings("PornHub", "kwwsv=22uw1sruqkxe1frp", rch_access: "apk,cors", stream_access: "apk,cors")
{
httpversion = 2,
rchstreamproxy = "web",
headers = HeadersModel.Init(
Http.defaultFullHeaders,
("cookie", "platform=pc; accessAgeDisclaimerPH=1"),
("sec-fetch-dest", "document"),
("sec-fetch-site", "same-origin"),
("sec-fetch-mode", "navigate")
).ToDictionary(),
headers_image = HeadersModel.Init(
("Accept", "image/jpeg,image/png,image/*;q=0.8,*/*;q=0.5"),
("User-Agent", "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2"),
("Cache-Control", "max-age=0")
).ToDictionary()
};
public SisiSettings PornHubPremium { get; set; } = new SisiSettings("PornHubPremium", "kwwsv=22uw1sruqkxesuhplxp1frp", enable: false, stream_access: "apk,cors")
{
httpversion = 2,
rchstreamproxy = "web",
headers = HeadersModel.Init(
("sec-fetch-dest", "document"),
("sec-fetch-site", "none"),
("sec-fetch-user", "?1"),
("upgrade-insecure-requests", "1")
).ToDictionary(),
headers_image = HeadersModel.Init(
("Accept", "image/jpeg,image/png,image/*;q=0.8,*/*;q=0.5"),
("User-Agent", "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2"),
("Cache-Control", "max-age=0")
).ToDictionary()
};
#endregion
#region Online
/// <summary>
/// https://iptv.online/ru/dealers/api
/// </summary>
public OnlinesSettings IptvOnline { get; set; } = new OnlinesSettings("IptvOnline", "https://iptv.online", enable: false)
{
rhub_safety = false
};
/// <summary>
/// aHR0cHM6Ly92ZW92ZW8uaW8=
/// </summary>
public OnlinesSettings VeoVeo { get; set; } = new OnlinesSettings("VeoVeo", "kwwsv=22dsl1uvwsujdslsw1frp", stream_access: "apk,cors,web");
public RezkaSettings Rezka { get; set; } = new RezkaSettings("Rezka", "kwwsv=22kguh}nd1ph", true)
{
stream_access = "apk,cors,web",
ajax = true, reserve = true,
hls = true, scheme = "http",
headers = Http.defaultUaHeaders
};
public RezkaSettings RezkaPrem { get; set; } = new RezkaSettings("RezkaPrem", null)
{
enable = false,
rhub_safety = false,
stream_access = "apk,cors,web",
reserve = true, hls = true, scheme = "http"
};
public CollapsSettings Collaps { get; set; } = new CollapsSettings("Collaps", "kwwsv=22dsl1ox{hpeg1zv", streamproxy: true, two: false)
{
rch_access = "apk",
stream_access = "apk,cors,web",
two = true,
apihost = "https://api.bhcesh.me",
token = "eedefb541aeba871dcfc756e6b31c02e",
headers = HeadersModel.Init(Http.defaultFullHeaders,
("Origin", "https://kinokrad.my")
).ToDictionary(),
headers_stream = HeadersModel.Init(Http.defaultFullHeaders,
("Origin", "https://kinokrad.my"),
("sec-fetch-dest", "empty"),
("sec-fetch-mode", "cors"),
("sec-fetch-site", "cross-site"),
("accept", "*/*")
).ToDictionary()
};
public OnlinesSettings Ashdi { get; set; } = new OnlinesSettings("Ashdi", "kwwsv=22edvh1dvkgl1yls", rch_access: "apk,cors", stream_access: "apk,cors")
{
enable = false,
rchstreamproxy = "web",
geo_hide = ["RU", "BY"]
};
public OnlinesSettings Kinoukr { get; set; } = new OnlinesSettings("Kinoukr", "kwwsv=22nlqrxnu1frp", rch_access: "apk,cors", stream_access: "apk,cors,web")
{
geo_hide = ["RU", "BY"],
headers = HeadersModel.Init(Http.defaultFullHeaders,
("cookie", "legit_user=1;"),
("origin", "{host}"),
("referer", "{host}/"),
("sec-fetch-dest", "document"),
("sec-fetch-mode", "navigate"),
("sec-fetch-site", "same-origin"),
("sec-fetch-user", "?1"),
("upgrade-insecure-requests", "1")
).ToDictionary()
};
public OnlinesSettings Eneyida { get; set; } = new OnlinesSettings("Eneyida", "kwwsv=22hqh|lgd1wy", rch_access: "apk,cors", stream_access: "apk,cors,web");
public OnlinesSettings Kinotochka { get; set; } = new OnlinesSettings("Kinotochka", "kwwsv=22nlqryleh1yls", rch_access: "apk,cors", stream_access: "apk,cors")
{
rchstreamproxy = "web"
};
public OnlinesSettings RutubeMovie { get; set; } = new OnlinesSettings("RutubeMovie", "kwwsv=22uxwxeh1ux", streamproxy: true, rch_access: "apk,cors");
public OnlinesSettings VkMovie { get; set; } = new OnlinesSettings("VkMovie", "kwwsv=22dsl1ynylghr1ux", streamproxy: true, rch_access: "apk,cors", stream_access: "apk,cors")
{
headers = HeadersModel.Init(Http.defaultFullHeaders,
("origin", "encrypt:kwwsv=22ynylghr1ux"),
("referer", "encrypt:kwwsv=22ynylghr1ux2")
).ToDictionary()
};
public OnlinesSettings Plvideo { get; set; } = new OnlinesSettings("Plvideo", "kwwsv=22dsl1j41soylghr1ux", streamproxy: true, enable: false, rch_access: "apk,cors");
public OnlinesSettings CDNvideohub { get; set; } = new OnlinesSettings("CDNvideohub", "kwwsv=22sodsl1fgqylghrkxe1frp", streamproxy: true, rch_access: "apk,cors", stream_access: "apk,cors")
{
httpversion = 2,
headers = HeadersModel.Init(Http.defaultFullHeaders,
("referer", "encrypt:kwwsv=22kgnlqr1sxe2"),
("sec-fetch-dest", "empty"),
("sec-fetch-mode", "cors"),
("sec-fetch-site", "cross-site")
).ToDictionary()
};
public OnlinesSettings Redheadsound { get; set; } = new OnlinesSettings("Redheadsound", "kwwsv=22uhgkhdgvrxqg1vwxglr", enable: false, rch_access: "apk")
{
headers = HeadersModel.Init("referer", "{host}/").ToDictionary()
};
public OnlinesSettings iRemux { get; set; } = new OnlinesSettings("iRemux", "kwwsv=22phjdreodnr1frp")
{
rchstreamproxy = "web",
geostreamproxy = ["UA"],
corseu = true
};
public PidTorSettings PidTor { get; set; } = new PidTorSettings()
{
enable = true, redapi = "http://redapi.cfhttp.top",
min_sid = 15, emptyVoice = true
};
/// <summary>
/// http://filmixapp.cyou
/// http://filmixapp.vip
/// http://fxapp.biz
/// </summary>
public FilmixSettings Filmix { get; set; } = new FilmixSettings("Filmix", "http://filmixapp.cyou")
{
rhub_safety = false,
rch_access = "apk",
stream_access = "apk,cors,web",
reserve = false,
headers = HeadersModel.Init(
("Accept-Encoding", "gzip")
).ToDictionary()
};
public FilmixSettings FilmixTV { get; set; } = new FilmixSettings("FilmixTV", "kwwsv=22dsl1ilopl{1wy", enable: false)
{
rhub_safety = false,
pro = true,
stream_access = "apk,cors,web",
headers = HeadersModel.Init(
("user-agent", "Mozilla/5.0 (SMART-TV; LINUX; Tizen 6.0) AppleWebKit/537.36 (KHTML, like Gecko) 76.0.3809.146/6.0 TV Safari/537.36")
).ToDictionary()
};
public FilmixSettings FilmixPartner { get; set; } = new FilmixSettings("FilmixPartner", "kwws=22819418914;2sduwqhubdsl", enable: false)
{
stream_access = "apk,cors,web"
};
/// <summary>
/// aHR0cHM6Ly9nby56ZXQtZmxpeC5vbmxpbmU=
/// aHR0cHM6Ly9nby56ZXRmbGl4LW9ubGluZS5sb2w=
/// </summary>
public ZetflixSettings Zetflix { get; set; } = new ZetflixSettings("Zetflix", "kwwsv=22jr1}hw0iol{1rqolqh", enable: false)
{
browser_keepopen = true,
geostreamproxy = ["ALL"],
hls = true
};
/// <summary>
/// aHR0cHM6Ly9raW5vcGxheTIuc2l0ZS8=
/// a2lub2dvLm1lZGlh
/// aHR0cHM6Ly9maWxtLTIwMjQub3JnLw==
/// </summary>
public OnlinesSettings VideoDB { get; set; } = new OnlinesSettings("VideoDB", "kwwsv=22nlqrjr1phgld", "kwwsv=2263ei6:<31reuxw1vkrz", streamproxy: true, rch_access: "apk", stream_access: "apk,cors,web")
{
httpversion = 2,
priorityBrowser = "http",
imitationHuman = true,
headers = HeadersModel.Init(Http.defaultFullHeaders,
("sec-fetch-storage-access", "active"),
("upgrade-insecure-requests", "1")
).ToDictionary(),
headers_stream = HeadersModel.Init(Http.defaultFullHeaders,
("accept", "*/*"),
("origin", "{host}"),
("referer", "{host}/"),
("sec-fetch-dest", "empty"),
("sec-fetch-mode", "cors"),
("sec-fetch-site", "same-site")
).ToDictionary()
};
/// <summary>
/// aHR0cHM6Ly9jb2xkZmlsbS5pbmsv
/// </summary>
public OnlinesSettings CDNmovies { get; set; } = new OnlinesSettings("CDNmovies", "kwwsv=22frogfgq1{|}", enable: false, rch_access: "apk,cors")
{
rchstreamproxy = "web",
headers = HeadersModel.Init(
("DNT", "1"),
("Upgrade-Insecure-Requests", "1")
).ToDictionary()
};
public OnlinesSettings VDBmovies { get; set; } = new OnlinesSettings("VDBmovies", "kwwsv=22fgqprylhv0vwuhdp1rqolqh", streamproxy: true, rch_access: "apk", stream_access: "apk")
{
enable = false,
httpversion = 2,
headers = HeadersModel.Init(Http.defaultFullHeaders,
("sec-fetch-storage-access", "active"),
("upgrade-insecure-requests", "1")
).ToDictionary(),
headers_stream = HeadersModel.Init(Http.defaultFullHeaders,
("accept", "*/*"),
("referer", "{host}"),
("origin", "{host}/"),
("sec-fetch-dest", "empty"),
("sec-fetch-mode", "cors"),
("sec-fetch-site", "cross-site")
).ToDictionary()
};
public OnlinesSettings FanCDN { get; set; } = new OnlinesSettings("FanCDN", "kwwsv=224idqvhuldov1qhw", streamproxy: true, rch_access: "apk")
{
enable = true,
rhub_safety = false,
httpversion = 2,
imitationHuman = true,
headers = HeadersModel.Init(Http.defaultFullHeaders,
("sec-fetch-storage-access", "active"),
("upgrade-insecure-requests", "1")
).ToDictionary(),
headers_stream = HeadersModel.Init(Http.defaultFullHeaders,
("origin", "{host}"),
("referer", "{host}/"),
("sec-fetch-dest", "empty"),
("sec-fetch-mode", "cors"),
("sec-fetch-site", "same-site")
).ToDictionary()
};
public KinobaseSettings Kinobase { get; set; } = new KinobaseSettings("Kinobase", "kwwsv=22nlqredvh1ruj", true, hdr: true)
{
httpversion = 2,
stream_access = "apk,cors,web",
geostreamproxy = ["ALL"]
};
/// <summary>
/// aHR0cHM6Ly91YWtpbm9nby5lYw==
/// aHR0cHM6Ly91YWtpbm9nby5vbmxpbmU=
/// </summary>
public OnlinesSettings Kinogo { get; set; } = new OnlinesSettings("Kinogo", "kwwsv=22nlqrjr1ox{xu|", rch_access: "apk", stream_access: "apk,cors")
{
rchstreamproxy = "web"
};
/// <summary>
/// Получение учетной записи
///
/// tg: @monk_in_a_hat
/// email: helpdesk@lumex.ink
/// </summary>
public LumexSettings VideoCDN { get; set; } = new LumexSettings("VideoCDN", "https://api.lumex.space", "API-токен", "https://portal.lumex.host", "ID клиент")
{
enable = false,
stream_access = "apk,cors,web",
log = false,
verifyip = true, // ссылки привязаны к ip пользователя
scheme = "http",
//geostreamproxy = ["UA"],
hls = false, // false - mp4 / true - m3u8
disable_protection = false, // true - отключить проверку на парсер
disable_ads = false, // отключить рекламу
vast = new VastConf() { msg = "Реклама от VideoCDN" }
};
public LumexSettings Lumex { get; set; } = new LumexSettings("Lumex", "kwwsv=22sruwdo1oxph{1krvw", null, "lumex.space", "tl6h28Hn1rL5")
{
enable = true,
stream_access = "apk,cors,web",
hls = true, scheme = "http",
priorityBrowser = "http",
geostreamproxy = ["ALL"]
};
/// <summary>
/// api.vokino.org
/// api.vokino.pro
/// </summary>
public VokinoSettings VoKino { get; set; } = new VokinoSettings("VoKino", "http://api.vokino.org", streamproxy: false)
{
rchstreamproxy = "web",
rhub_safety = false
};
public IframeVideoSettings IframeVideo { get; set; } = new IframeVideoSettings("IframeVideo", "kwwsv=22liudph1ylghr", "kwwsv=22ylghriudph1vsdfh", enable: false);
/// <summary>
/// aHR0cHM6Ly9tb3ZpZWxhYi5vbmU=
/// aHR0cHM6Ly92aWQxNzMwODAxMzcwLmZvdHBybzEzNWFsdG8uY29tL2FwaS9pZGtwP2twX2lkPTEzOTI1NTAmZD1raW5vZ28uaW5j
/// </summary>
public OnlinesSettings HDVB { get; set; } = new OnlinesSettings("HDVB", "kwwsv=22ylg4:667649;41hqwrxdhgrq1frp", "kwwsv=22dslye1frp", token: "8h5ih7f:3edig<d:747f7i4:3hh4e4<5", rch_access: "apk", stream_access: "apk,cors,web")
{
streamproxy = true,
headers = HeadersModel.Init(Http.defaultFullHeaders,
("referer", "encrypt:kwwsv=22prylhode1rqh2")
).ToDictionary(),
headers_stream = HeadersModel.Init(Http.defaultFullHeaders,
("origin", "{host}"),
("referer", "{host}/"),
("sec-fetch-dest", "empty"),
("sec-fetch-mode", "cors"),
("sec-fetch-site", "same-site")
).ToDictionary()
};
/// <summary>
/// api: aHR0cHM6Ly92aWJpeC5vcmcvYXBpL2V4dGVybmFsL2RvY3VtZW50YXRpb24=
/// iframe: aHR0cHM6Ly9jb2xkZmlsbS5pbmsv
/// </summary>
public OnlinesSettings Vibix { get; set; } = new OnlinesSettings("Vibix", "kwwsv=22ylel{1ruj", enable: false, rch_access: "apk", stream_access: "apk,cors,web")
{
httpversion = 2,
headers = Http.defaultFullHeaders
};
/// <summary>
/// aHR0cHM6Ly92aWRlb3NlZWQudHYvZmFxLnBocA==
/// </summary>
public OnlinesSettings Videoseed { get; set; } = new OnlinesSettings("Videoseed", "kwwsv=22ylghrvhhg1wy", streamproxy: true, enable: false, stream_access: "apk,cors,web")
{
headers = HeadersModel.Init(Http.defaultFullHeaders,
("sec-fetch-storage-access", "active"),
("upgrade-insecure-requests", "1")
).ToDictionary(),
headers_stream = HeadersModel.Init(Http.defaultFullHeaders,
("sec-fetch-dest", "empty"),
("sec-fetch-mode", "cors"),
("sec-fetch-site", "cross-site")
).ToDictionary()
};
/// <summary>
/// https://api.srvkp.com - стандартный
/// https://cdn32.lol/api- apk
/// https://cdn4t.store/api - apk
/// https://kpapp.link/api - smart tv
/// https://api.service-kp.com - старый
/// </summary>
public KinoPubSettings KinoPub { get; set; } = new KinoPubSettings("KinoPub", "https://api.srvkp.com")
{
httpversion = 2,
rhub_safety = false,
filetype = "hls", // hls | hls4 | mp4
stream_access = "apk,cors,web",
headers = HeadersModel.Init(Http.defaultFullHeaders,
("sec-fetch-dest", "document"),
("sec-fetch-mode", "navigate"),
("sec-fetch-site", "none"),
("sec-fetch-user", "?1"),
("upgrade-insecure-requests", "1")
).ToDictionary()
};
public AllohaSettings Alloha { get; set; } = new AllohaSettings("Alloha", "kwwsv=22dsl1dsexjdoo1ruj", "kwwsv=22wruvr0dv1vwordgl1olyh", "", "", true, true)
{
rch_access = "apk,cors,web",
stream_access = "apk,cors,web",
reserve = true
};
public AllohaSettings Mirage { get; set; } = new AllohaSettings("Mirage", "kwwsv=22dsl1dsexjdoo1ruj", "kwwsv=22txdguloolrq0dv1doodunqrz1rqolqh", "6892d506bbdd5790e0ca047ff39462", "", true, true)
{
enable = true,
streamproxy = true,
httpversion = 2,
headers = Http.defaultFullHeaders
};
public OnlinesSettings GetsTV { get; set; } = new OnlinesSettings("GetsTV", "https://getstv.com", enable: false, stream_access: "apk,cors,web")
{
rhub_safety = false,
headers = HeadersModel.Init(
("user-agent", "Mozilla/5.0 (Web0S; Linux/SmartTV) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.34 Safari/537.36 WebAppManager")
).ToDictionary()
};
#endregion
#region ENG
/// <summary>
/// aHR0cHM6Ly93d3cuaHlkcmFmbGl4LnZpcA==
/// </summary>
public OnlinesSettings Hydraflix { get; set; } = new OnlinesSettings("Hydraflix", "kwwsv=22ylgidvw1sur", streamproxy: true)
{
priorityBrowser = "scraping"
};
/// <summary>
/// aHR0cHM6Ly92aWRzcmMueHl6
/// aHR0cHM6Ly92aWRzcmMucHJv
/// aHR0cHM6Ly92aWRzcmMudG8=
/// </summary>
public OnlinesSettings Vidsrc { get; set; } = new OnlinesSettings("Vidsrc", "kwwsv=22ylgvuf1ff", streamproxy: true);
public OnlinesSettings MovPI { get; set; } = new OnlinesSettings("MovPI", "kwwsv=22prylhvdsl1foxe", streamproxy: true);
/// <summary>
/// aHR0cHM6Ly9kYXkyc29hcC54eXov
/// </summary>
public OnlinesSettings VidLink { get; set; } = new OnlinesSettings("VidLink", "kwwsv=22ylgolqn1sur", streamproxy: true);
public OnlinesSettings Videasy { get; set; } = new OnlinesSettings("Videasy", "kwwsv=22sod|hu1ylghdv|1qhw", streamproxy: true);
/// <summary>
/// aHR0cHM6Ly9zbWFzaHlzdHJlYW0ueHl6
/// </summary>
public OnlinesSettings Smashystream { get; set; } = new OnlinesSettings("Smashystream", "kwwsv=22sod|hu1vpdvk|vwuhdp1frp", streamproxy: true);
public OnlinesSettings Autoembed { get; set; } = new OnlinesSettings("Autoembed", "kwwsv=22sod|hu1dxwrhpehg1ff", streamproxy: true, enable: false);
/// <summary>
/// Omega
/// </summary>
public OnlinesSettings Playembed { get; set; } = new OnlinesSettings("Playembed", "https://vidora.su", streamproxy: true, enable: false);
/// <summary>
/// EmbedSu
/// </summary>
public OnlinesSettings Twoembed { get; set; } = new OnlinesSettings("Twoembed", "https://embed.su", streamproxy: true, enable: false)
{
headers_stream = HeadersModel.Init(
("accept", "*/*"),
("accept-language", "en-US,en;q=0.5"),
("referer", "{host}/"),
("origin", "{host}"),
("sec-fetch-dest", "empty"),
("sec-fetch-mode", "cors"),
("sec-fetch-site", "cross-site")
).ToDictionary()
};
public OnlinesSettings Rgshows { get; set; } = new OnlinesSettings("Rgshows", "kwwsv=22dsl1ujvkrzv1ph", streamproxy: true, enable: false)
{
headers = HeadersModel.Init(
("accept", "*/*"),
("user-agent", "Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Mobile/15E148 Safari/604.1"),
("accept-language", "en-US,en;q=0.5"),
("referer", "encrypt:kwwsv=22zzz1ujvkrzv1ph2"),
("origin", "encrypt:kwwsv=22zzz1ujvkrzv1ph"),
("sec-fetch-dest", "empty"),
("sec-fetch-mode", "cors"),
("sec-fetch-site", "same-site")
).ToDictionary(),
headers_stream = HeadersModel.Init(
("accept", "*/*"),
("user-agent", "Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Mobile/15E148 Safari/604.1"),
("accept-language", "en-US,en;q=0.5"),
("referer", "encrypt:kwwsv=22zzz1ujvkrzv1ph2"),
("origin", "encrypt:kwwsv=22zzz1ujvkrzv1ph"),
("sec-fetch-dest", "empty"),
("sec-fetch-mode", "cors"),
("sec-fetch-site", "cross-site")
).ToDictionary()
};
#endregion
#region Anime
public KodikSettings Kodik { get; set; } = new KodikSettings("Kodik", "kwwsv=22nrglndsl1frp", "kwwsv=22nrgln1lqir", "74gg<8i;7f54:4<e3<g9f:44;556:d58", "", true)
{
rch_access = "apk",
stream_access = "apk,cors,web",
auto_proxy = true, // прокси UA в api
cdn_is_working = true, // прокси UA в обычном
//geostreamproxy = ["UA"],
headers = HeadersModel.Init(
("referer", "encrypt:kwwsv=22dqlole1ph2")
).ToDictionary()
};
/// <summary>
/// move to AniLiberty
/// </summary>
public OnlinesSettings AnilibriaOnline { get; set; } = new OnlinesSettings("AnilibriaOnline", "kwwsv=22dsl1dqloleuld1wy", enable: false);
public OnlinesSettings AniLiberty { get; set; } = new OnlinesSettings("AniLiberty", "kwwsv=22dsl1dqloleuld1dss", stream_access: "apk,cors,web")
{
httpversion = 2
};
/// <summary>
/// aHR0cHM6Ly9hbmlsaWIubWU=
/// </summary>
public OnlinesSettings AnimeLib { get; set; } = new OnlinesSettings("AnimeLib", "kwwsv=22dsl1fgqolev1ruj", streamproxy: true, stream_access: "apk")
{
enable = false,
rhub_safety = false,
httpversion = 2,
headers = HeadersModel.Init(Http.defaultFullHeaders,
("origin", "encrypt:kwwsv=22dqlphole1ruj"),
("referer", "encrypt:kwwsv=22dqlphole1ruj2"),
("sec-fetch-dest", "empty"),
("sec-fetch-mode", "cors"),
("sec-fetch-site", "cross-site")
).ToDictionary(),
headers_stream = HeadersModel.Init(Http.defaultFullHeaders,
("accept-encoding", "identity;q=1, *;q=0"),
("origin", "encrypt:kwwsv=22dqlphole1ruj"),
("referer", "encrypt:kwwsv=22dqlphole1ruj2"),
("sec-fetch-dest", "video"),
("sec-fetch-mode", "cors"),
("sec-fetch-site", "same-site")
).ToDictionary()
};
public OnlinesSettings AniMedia { get; set; } = new OnlinesSettings("AniMedia", "kwwsv=22dpg1rqolqh");
public OnlinesSettings Animevost { get; set; } = new OnlinesSettings("Animevost", "kwwsv=22dqlphyrvw1ruj", rch_access: "apk,cors", stream_access: "apk,cors")
{
rchstreamproxy = "web",
httptimeout = 10
};
public OnlinesSettings MoonAnime { get; set; } = new OnlinesSettings("MoonAnime", "kwwsv=22dsl1prrqdqlph1duw", token: ";98iHI0H5h4Ef05fd7640h9D4830:;3GIG0:6:F9E", rch_access: "apk", stream_access: "apk,cors")
{
rchstreamproxy = "web",
geo_hide = ["RU", "BY"]
};
public OnlinesSettings Animebesst { get; set; } = new OnlinesSettings("Animebesst", "kwwsv=22dqlph41ehvw", rch_access: "apk", stream_access: "apk,cors,web")
{
httpversion = 2
};
public OnlinesSettings AnimeGo { get; set; } = new OnlinesSettings("AnimeGo", "kwwsv=22dqlphjr1ph", streamproxy: true, enable: false)
{
httpversion = 2,
headers_stream = HeadersModel.Init(
("origin", "https://aniboom.one"),
("referer", "https://aniboom.one/")
).ToDictionary()
};
#endregion
}
}