Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file.
Empty file.
Empty file.
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
False
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ed9f5ea2a66b781f44c6b7ab8e9fb92affb5463d671bdeeb62f10925c1330d4c
1 change: 1 addition & 0 deletions .dotnet_home/.dotnet/MachineId.v1.dotnetUserLevelCache
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ed9f5ea2a66b781f44c6b7ab8e9fb92affb5463d671bdeeb62f10925c1330d4c
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip

H4sIAAAAAAAACqxUW2vdOBD+K2aeLUc3y5e3kmxpSEtCU7pl30bSqEfUkQ+2nLaE89+LfFKy6dvCvokRM/PdpCdI+EAwwpvj8a9HSnmFGnLcS5JLw7hkUn3icuR81Loxyght2n+ghnhDP2GETjsn3EBMkSGmPW+ZVcEx72kQXHguW11m4tcVxifA2Hh6jI6aef1MyxrnBCP8HZOfv5fdGBs3zZtvlnmi67RmTK6AuX9/c75daS1NTfQwwqAMotDIrNeB6cFy1muLTAXVD8Y4tE6d22LKtCScmtV/e9nr55wou1E2UjWcyQFONXjMWKBaXOnTz2PZvktzVer1Xt6P4xM80gKjrH+LeB534aZ44eaHB0z+IsQU1wPUcFzmIy050i7DzmyaMMc5Vc9LLqdIKUMNt/fV3YQ5zMvDK23uz9Sv/wPzD+gOMVF1fQUjkB9CSyjRGNv1ImjtjO3Q9jQEO0gMwbbaKG86YT2RNTIIPsjWCaW41w5quJxTjmmbt7W6Tpm+LjsDGOEtTiudsb9Z3CFmcnlbCq0vpvhPP2K+nH0pcKjhbpn95nL1YoXgDW8EL6Bvt3zccvWRfFzIZfKv5//RI43gZeTltiyUcnWH+VC9w/UAIxhhhiCCoy5YCr0erJVaSUeql0G2ynCBHFuOKFs9dFJhH4JqSVsMLZItwIv11Z62jhPJzlnmW5RM9x2yQdmO+Ta0SvtedX0JyIvm1e1U+v4H3X/r9RwV3UMNnh7PT2kHp7XppG4FU9gKppUjNgjUrG8NF8YqRFv0u6El0fQvDT9Et8zrHHL1HLTqlaoft1S+g2oP3feY2I/dzqvZfaOlKnHAmMoreHbodDqdfgEAAP//AwAOrvKiVQQAAA==
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip

H4sIAAAAAAAACqyUXWvcOBSG/4rRteXoy/LHXZi0bEhLQxK2Ze+OpKNGxJEHSU47hPnvxZ5Z2vSmLOyNEEc+H3reV34lEZ6RjORyv3/3grFkUpMStpBgQlMmqJAPTIyMjUo1WvK2b4d/SE3CDR7ISDplLbcDUokaqXKspUZ6S53DgTPumGjVWhO+ZjK+EgiNw5dgsZnz35hymCMZyecQ3fxt7Q2hsdO8uCbNE17HXCDadZj7Dzen04x5TWqCIyMZpAbgCqhxylM1GEZ7ZYBKL/tBawvGylNaiAVThKnJ7ulnXzeXiMWOohGyYVQM5FgTBwXWUQ1kfDjs1+4bmqs1Xm/hbTu+khdMZBT1vxBP5S7sFC6es1nC5C5Oa4H8lLfVgy1zOpCa7NO8x1QCblwuc8ZnMx0eID+9P32zbvO772iXgm43L7GQkfCeMVKTjcw0QQlzrM5D7qaAsWyHJYWYg/1jMb7S+XRf3U5Q/Jye30hxfyJ9/R9AfwT7GCJW11dkJOgG3yII0Np0PfdKWW06MD0O3gwCvDet0tLpjhuHaLTwnA2itVxK5pQlNdnNsYS4zEuurmPBr2m7MBnJe5gynma/TPYxFLRlSSuFL3q1222a3WJL9VNqzhrWcLZdeCn7pVR36EJCW9C9LfhbjtB8Q75bUsJYqlsoj9VfkB/JSDTXg+feYucN+l4NxgglhUXZCy9aqRkHBi0DEK0aOiGh9162qAz4FtCQmuBqrWpzs+WIBkFT6BCpgk7RARijums1tAq0ZfwN5OrT5P4f0LdnXmcrqZ7UxOHL6aluwymlO6FaTiW0nCppkQ4cFO1bzbg2EsCs/O7mPB3ibnb4J/OtStxgijj9QvxjsGnOsy/V2YfVGw3ulrj+nKrNk99CpN83ta9m+4SpWt0CIa5v8qzn8Xg8/gAAAP//AwAdEexq4wQAAA==
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip

H4sIAAAAAAAACqxUy27dNhD9FYHbSjLfErVLbQcxUsdGrpEW3Q3Joc1api4oym5g+N8L6TqJ7aCLAt0QxJDzOufMPJIEd0gG8m6/P73HVGZSkxI3E6dcN5Q3XFxRPlA6SNlqoblQ8k9Sk/gRv5KBdNI55gw2AjU20lPVWBFc4z0aRpmnXMk1JlzPZHgkEFuP99FhO81fMM9xSmQgv8fkp4c1N8TWjdPi2zyNeJbmAsmtxex++3h4nXFendroyUCM0ABMQmO9DI00lja9tNCIIHqjtQPrxMEtpoI5wdjO/vZHXj+VhMUNvOWipQ035KkmHgqspVqY8errfs2+QXOy2uvNvF2HR3KPmQy8/gbiIdyRG+PR3WyXOPqj7SQ12edpj7lE3FDYGhtHKHFK1XOO4zFiKqQmv64uu8U5nGcykKu84DfrabqOCd9nuMOHKd9+OqRtP51ekZpc5ukvdOUSyg0ZiEVD0XAQggXogUvhPThlvPHO90BV31GF0goBpoOOapAMup6zYDgL1pKaXOyqyxFKmPLdK452BwrO/gMDu3fHpwnsiKvPexjn7y1dQb7GQgaitLIoQs+11eDBiD4wQGG8s0Ir7G3ne+w6wQU45WjPHOuYAtMp1WnBGanJObibmLA6OyEDQW+CQuCgte16FqR02nZgezTBGg4hWCW18Lpj1iNazQOjhivHhKBeOlKT4ymVmJZpmauzVPA6b4S96OBiV73L7iYWdGXJKxd/6FXtl3nyiyvVD6Ux2tKW0RWLi6Xsl1J9Rh8zuvIKkovdWx+uGaVrLUvOmEq10lt9gHnlWDNtAgsOu2Ax9NJYy6XgDkXPA1dCUwYUFAXgSpqOC+hDECvrEBTgyjGuyq62YbI8GMGCaXjX+0aChMaYnjbMdJxLY6RH+Qrk6mL0/w/QL8T9ov1+hYy1nd5g+4bp87jIntTE4/1hm2wNSKk7LhVrBCjWSOGwMQxk0ytNmbYCwL6ZpA/TvErvy+548uvTR8wJxxcUnEeXp3kKpXqWf/WKlBehTuK8H+HrT+X/4rgUygn8/v/4Bt3tz9PweUnr4q22sXqIqfl7k9LJ5G4xV6sUIaZ133z3OF/GEq9uMoJHfz55fBv0qSZ3CPOS8W5b7dvmSZi3Mk6Wg5zP0nkcxzijm5KfycCNlrLlRj6X++//OqFapox6enp6+gcAAP//AwDmOMFVSQYAAA==
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip

H4sIAAAAAAAACqyUy27dNhCGX0WYtSjzJh5Ru8BOUcMNbMRGW3Q3JIcxYZk6kCgngXHevaCOg9TdFeiGEEaYy//NT75CxmeCET4cjx9fKJcVWihpD0kuDeOSSfXA5cj5qHVnlFJGq7+ghXRD32GEg/ZeeEtMkSGmA++ZU9GzEMgKLgKXva418csK4ytg6gK9JE/dvP5Oy5rmDCP8kXKYv9bemDo/zVvolnmi67wWzL4Oc//bzfnvSmtN6lKAEawyiEIjc0FHpq3jbNAOmYpqsMZ4dF6d01IutGScujU8/ewb5pKp+FF2UnWcSQunFgIWrKM6XOnh+7F239Fc1Xi7h/fP8RVeaIFRtj8gnstd+CldPK9uS1O4OJ8F16eq7rjMR1pKop3FLm+asKQ5N2+dLqdEuUALt/fN3YQlzsvzO0D3Z/3X/0H+Q+3+8Rv5rVC4nLdcYARhhYEWPqF/TJma6ysYgYKNPaFEY9xhEFFrb9wB3UA2OisxRtdro4I5CBeInJFRcCt7L5TiQXto4XLOJeVt3tbmOhf6suzqYIRfcFrprOvD4h9TIV+2pUr+01SD3C1z2Hxpfi5H8I53glcFt1s5bqX5TCEt5AuF9wX/lSON4LzOsi0L5dLcYXlsfsX1EUYwwtgooqdDdBQHbZ2TWklPapBR9spwgRx7jih7bQ9S4RCj6kk7jD2SgxaomqHZ/Rekj4Q2MK0EMi0DMhstsSA4RquM596+g9zcTjXvfwD9g9ebb/QALQR6OV+ufTitzUHqXjCFvWBaeWJWoGZDb7gwTiG6yu+GlkzTPxh+Sn6Z1zmW5s11zTuqn7dcH4hmd+DXlNm3fX9Xs3+ipan7x5TrvXjb0Ol0Ov0NAAD//wMAX+M/72cEAAA=
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"Microsoft.NET.Workload.Emscripten.Current": "10.0.103/10.0.100",
"Microsoft.NET.Workload.Emscripten.net6": "10.0.103/10.0.100",
"Microsoft.NET.Workload.Emscripten.net7": "10.0.103/10.0.100",
"Microsoft.NET.Workload.Emscripten.net8": "10.0.103/10.0.100",
"Microsoft.NET.Workload.Emscripten.net9": "10.0.103/10.0.100",
"Microsoft.NET.Sdk.Android": "36.1.30/10.0.100",
"Microsoft.NET.Sdk.iOS": "26.2.10197/10.0.100",
"Microsoft.NET.Sdk.MacCatalyst": "26.2.10197/10.0.100",
"Microsoft.NET.Sdk.macOS": "26.2.10197/10.0.100",
"Microsoft.NET.Sdk.Maui": "10.0.20/10.0.100",
"Microsoft.NET.Sdk.tvOS": "26.2.10197/10.0.100",
"Microsoft.NET.Workload.Mono.ToolChain.Current": "10.0.103/10.0.100",
"Microsoft.NET.Workload.Mono.ToolChain.net6": "10.0.103/10.0.100",
"Microsoft.NET.Workload.Mono.ToolChain.net7": "10.0.103/10.0.100",
"Microsoft.NET.Workload.Mono.ToolChain.net8": "10.0.103/10.0.100",
"Microsoft.NET.Workload.Mono.ToolChain.net9": "10.0.103/10.0.100"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
10.0.100
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
10.0.103
17 changes: 9 additions & 8 deletions OpenBullet2.Native/OpenBullet2.Native.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -101,21 +101,22 @@

<ItemGroup>
<PackageReference Include="AvalonEdit" Version="6.3.0.90" />
<PackageReference Include="HtmlSanitizer" Version="8.1.866-beta" />
<PackageReference Include="HtmlSanitizer" Version="9.0.835" />
<PackageReference Include="MahApps.Metro" Version="2.4.10" />
<PackageReference Include="MahApps.Metro.IconPacks" Version="4.8.0" />
<PackageReference Include="MahApps.Metro.IconPacks" Version="5.1.0" />
<PackageReference Include="MahApps.Metro.SimpleChildWindow" Version="2.2.1" />
<PackageReference Include="Markdig" Version="0.37.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.6"/>
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.6">
<PackageReference Include="Markdig" Version="0.40.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.12"/>
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.12">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="8.0.6"/>
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="8.0.1"/>
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.0"/>
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="8.0.12"/>
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="8.0.2"/>
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.1"/>
<PackageReference Include="nulastudio.NetBeauty" Version="2.1.4.5"/>
<PackageReference Include="WpfAnimatedGif" Version="2.0.2"/>
<PackageReference Include="AngleSharp" Version="1.1.2" />
</ItemGroup>

<ItemGroup>
Expand Down
12 changes: 6 additions & 6 deletions OpenBullet2.Web/OpenBullet2.Web.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -45,15 +45,15 @@

<ItemGroup>
<PackageReference Include="AutoMapper" Version="13.0.1" />
<PackageReference Include="FluentValidation" Version="11.9.2" />
<PackageReference Include="FluentValidation.DependencyInjectionExtensions" Version="11.9.2" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.6" />
<PackageReference Include="FluentValidation" Version="11.11.0" />
<PackageReference Include="FluentValidation.DependencyInjectionExtensions" Version="11.11.0" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.12" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Versioning" Version="5.1.0" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer" Version="5.1.0" />
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="8.0.6"/>
<PackageReference Include="Microsoft.Diagnostics.Tracing.TraceEvent" Version="3.1.11" />
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="8.0.12"/>
<PackageReference Include="Microsoft.Diagnostics.Tracing.TraceEvent" Version="3.1.18" />
<PackageReference Include="nulastudio.NetBeauty" Version="2.1.4.5"/>
<PackageReference Include="Serilog.AspNetCore" Version="8.0.1" />
<PackageReference Include="Serilog.AspNetCore" Version="9.0.0" />
<PackageReference Include="Serilog.Exceptions" Version="8.4.0" />
<PackageReference Include="SonarAnalyzer.CSharp" Version="9.27.0.93347">
<PrivateAssets>all</PrivateAssets>
Expand Down
125 changes: 125 additions & 0 deletions RuriLib/Functions/Captchas/CapMonsterCloudAmazonWafService.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
using CaptchaSharp.Models;
using CaptchaSharp.Models.CaptchaResponses;
using CaptchaSharp.Services;
using System.Threading;
using System.Threading.Tasks;
using System.Net.Http;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;

namespace RuriLib.Functions.Captchas;

public class CapMonsterCloudAmazonWafService : CapMonsterCloudService
{
public CapMonsterCloudAmazonWafService(string apiKey) : base(apiKey)
{
}

public override async Task<StringResponse> SolveAmazonWafAsync(
string siteKey, string iv, string context, string siteUrl,
string? challengeScript = null, string? captchaScript = null,
SessionParams? sessionParams = null, CancellationToken cancellationToken = default)
{
var requestBody = new JObject
{
{ "clientKey", ApiKey },
{
"task", new JObject
{
{ "type", "AmazonTaskProxyless" },
{ "websiteURL", siteUrl },
{ "websiteKey", siteKey },
{ "iv", iv },
{ "context", context }
}
}
};

if (!string.IsNullOrEmpty(challengeScript))
{
requestBody["task"]!["challengeScript"] = challengeScript;
}

if (!string.IsNullOrEmpty(captchaScript))
{
requestBody["task"]!["captchaScript"] = captchaScript;
}

var response = await HttpClient.PostAsync(
"https://api.capmonster.cloud/createTask",
new StringContent(requestBody.ToString(), System.Text.Encoding.UTF8, "application/json"),
cancellationToken).ConfigureAwait(false);

var responseContent = await response.Content.ReadAsStringAsync(cancellationToken).ConfigureAwait(false);
var jsonResponse = JObject.Parse(responseContent);

if (jsonResponse["errorId"]?.Value<int>() != 0)
{
throw new Exception($"CapMonsterCloud Error: {jsonResponse["errorCode"]} - {jsonResponse["errorDescription"]}");
}

var taskId = jsonResponse["taskId"]?.Value<string>();

if (string.IsNullOrEmpty(taskId))
{
throw new Exception("CapMonsterCloud did not return a taskId.");
}

// Poll for result
return await PollForResultAsync(taskId, cancellationToken).ConfigureAwait(false);
}

private async Task<StringResponse> PollForResultAsync(string taskId, CancellationToken cancellationToken)
{
var requestBody = new JObject
{
{ "clientKey", ApiKey },
{ "taskId", taskId }
};

while (!cancellationToken.IsCancellationRequested)
{
await Task.Delay(PollingInterval, cancellationToken).ConfigureAwait(false);

var response = await HttpClient.PostAsync(
"https://api.capmonster.cloud/getTaskResult",
new StringContent(requestBody.ToString(), System.Text.Encoding.UTF8, "application/json"),
cancellationToken).ConfigureAwait(false);

var responseContent = await response.Content.ReadAsStringAsync(cancellationToken).ConfigureAwait(false);
var jsonResponse = JObject.Parse(responseContent);

if (jsonResponse["errorId"]?.Value<int>() != 0)
{
throw new Exception($"CapMonsterCloud Error: {jsonResponse["errorCode"]} - {jsonResponse["errorDescription"]}");
}

var status = jsonResponse["status"]?.Value<string>();

if (status == "ready")
{
var solution = jsonResponse["solution"];

// For Amazon WAF, solution usually contains cookies or a token
// We'll return the full solution JSON string as the response if it's not a simple string
// But usually OpenBullet expects a single token if it's for a captcha block.
// CapMonster returns an object with "captcha_voucher" and "existing_token" or "aws-waf-token"

if (solution is JObject solutionObj)
{
if (solutionObj.ContainsKey("captcha_voucher"))
{
return new StringResponse { Id = taskId, Response = solutionObj["captcha_voucher"]?.Value<string>() ?? "" };
}

return new StringResponse { Id = taskId, Response = solutionObj.ToString() };
}

return new StringResponse { Id = taskId, Response = solution?.Value<string>() ?? "" };
}
}

throw new TaskCanceledException();
}
}
2 changes: 1 addition & 1 deletion RuriLib/Functions/Captchas/CaptchaServiceFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ public static CaptchaService GetService(CaptchaSettings settings)
GetUri(settings.CustomAntiCaptchaDomain, settings.CustomAntiCaptchaPort)),
CaptchaServiceType.CapSolver => throw new NotSupportedException(
"CapSolver itself explicitly asked to be removed from the software. Please choose another service."),
CaptchaServiceType.CapMonsterCloud => new CapMonsterCloudService(settings.CapMonsterCloudApiKey),
CaptchaServiceType.CapMonsterCloud => new CapMonsterCloudAmazonWafService(settings.CapMonsterCloudApiKey),
CaptchaServiceType.HumanCoder => new HumanCoderService(settings.HumanCoderApiKey),
CaptchaServiceType.Nopecha => new NopechaService(settings.NopechaApiKey),
CaptchaServiceType.NoCaptchaAi => new NoCaptchaAiService(settings.NoCaptchaAiApiKey),
Expand Down
Loading