Compare commits

..
Author SHA1 Message Date
Abdullah Atta 5b1de7cc62 monograph: fix typo 2026-02-25 15:42:58 +05:00
Abdullah Atta 3f2ba697bc monograph: fix monograph content sanitization 2026-02-25 15:39:25 +05:00
6 changed files with 30 additions and 35 deletions
+19 -19
View File
@@ -210,25 +210,25 @@ namespace Notesnook.API.Controllers
} }
} }
// [HttpPost("bulk-delete")] [HttpPost("bulk-delete")]
// public async Task<IActionResult> DeleteBulkAsync([FromBody] DeleteBulkObjectsRequest request) public async Task<IActionResult> DeleteBulkAsync([FromBody] DeleteBulkObjectsRequest request)
// { {
// try try
// { {
// if (request.Names == null || request.Names.Length == 0) if (request.Names == null || request.Names.Length == 0)
// { {
// return BadRequest(new { error = "No files specified for deletion." }); return BadRequest(new { error = "No files specified for deletion." });
// } }
// var userId = this.User.GetUserId(); var userId = this.User.GetUserId();
// await s3Service.DeleteObjectsAsync(userId, request.Names); await s3Service.DeleteObjectsAsync(userId, request.Names);
// return Ok(); return Ok();
// } }
// catch (Exception ex) catch (Exception ex)
// { {
// logger.LogError(ex, "Error deleting objects for user."); logger.LogError(ex, "Error deleting objects for user.");
// return BadRequest(new { error = "Failed to delete attachments." }); return BadRequest(new { error = "Failed to delete attachments." });
// } }
// } }
} }
} }
-1
View File
@@ -17,7 +17,6 @@
<PackageReference Include="AspNetCore.HealthChecks.MongoDb" Version="6.0.1-rc2.2" /> <PackageReference Include="AspNetCore.HealthChecks.MongoDb" Version="6.0.1-rc2.2" />
<PackageReference Include="AWSSDK.S3" Version="3.7.310.8" /> <PackageReference Include="AWSSDK.S3" Version="3.7.310.8" />
<PackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.MessagePack" Version="6.0.3" /> <PackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.MessagePack" Version="6.0.3" />
<PackageReference Include="Microsoft.AspNetCore.SignalR.StackExchangeRedis" Version="9.0.13" />
<PackageReference Include="Microsoft.AspNetCore.Server.Kestrel.Https" Version="2.2.0" /> <PackageReference Include="Microsoft.AspNetCore.Server.Kestrel.Https" Version="2.2.0" />
<PackageReference Include="Nanoid" Version="3.1.0" /> <PackageReference Include="Nanoid" Version="3.1.0" />
<PackageReference Include="OpenTelemetry.Exporter.Prometheus.AspNetCore" Version="1.9.0-alpha.2" /> <PackageReference Include="OpenTelemetry.Exporter.Prometheus.AspNetCore" Version="1.9.0-alpha.2" />
+4 -4
View File
@@ -82,7 +82,7 @@ namespace Notesnook.API.Services
if (chunk != null) if (chunk != null)
{ {
var update = Builders<DeviceIdsChunk>.Update.AddToSetEach(x => x.Ids, ids.Select(i => i.ToString())); var update = Builders<DeviceIdsChunk>.Update.AddToSetEach(x => x.Ids, ids.Select(i => i.ToString()));
await repositories.DeviceIdsChunks.Collection.WithWriteConcern(WriteConcern.W1).UpdateOneAsync( await repositories.DeviceIdsChunks.Collection.UpdateOneAsync(
Builders<DeviceIdsChunk>.Filter.Eq(x => x.Id, chunk.Id), Builders<DeviceIdsChunk>.Filter.Eq(x => x.Id, chunk.Id),
update update
); );
@@ -96,11 +96,11 @@ namespace Notesnook.API.Services
Key = key, Key = key,
Ids = [.. ids.Select(i => i.ToString())] Ids = [.. ids.Select(i => i.ToString())]
}; };
await repositories.DeviceIdsChunks.Collection.WithWriteConcern(WriteConcern.W1).InsertOneAsync(newChunk); await repositories.DeviceIdsChunks.Collection.InsertOneAsync(newChunk);
} }
var emptyChunksFilter = DeviceIdsChunkFilter(userId, deviceId, key) & Builders<DeviceIdsChunk>.Filter.Size(x => x.Ids, 0); var emptyChunksFilter = DeviceIdsChunkFilter(userId, deviceId, key) & Builders<DeviceIdsChunk>.Filter.Size(x => x.Ids, 0);
await repositories.DeviceIdsChunks.Collection.WithWriteConcern(WriteConcern.W1).DeleteManyAsync(emptyChunksFilter); await repositories.DeviceIdsChunks.Collection.DeleteManyAsync(emptyChunksFilter);
} }
public async Task WriteIdsAsync(string userId, string deviceId, string key, IEnumerable<ItemKey> ids) public async Task WriteIdsAsync(string userId, string deviceId, string key, IEnumerable<ItemKey> ids)
@@ -121,7 +121,7 @@ namespace Notesnook.API.Services
}; };
writes.Add(new InsertOneModel<DeviceIdsChunk>(newChunk)); writes.Add(new InsertOneModel<DeviceIdsChunk>(newChunk));
} }
await repositories.DeviceIdsChunks.Collection.WithWriteConcern(WriteConcern.W1).BulkWriteAsync(writes); await repositories.DeviceIdsChunks.Collection.BulkWriteAsync(writes);
} }
public async Task<HashSet<ItemKey>> FetchUnsyncedIdsAsync(string userId, string deviceId) public async Task<HashSet<ItemKey>> FetchUnsyncedIdsAsync(string userId, string deviceId)
+1 -4
View File
@@ -210,16 +210,13 @@ namespace Notesnook.API
services.AddHealthChecks(); services.AddHealthChecks();
var signalR = services.AddSignalR((hub) => services.AddSignalR((hub) =>
{ {
hub.MaximumReceiveMessageSize = 100 * 1024 * 1024; hub.MaximumReceiveMessageSize = 100 * 1024 * 1024;
hub.ClientTimeoutInterval = TimeSpan.FromMinutes(10); hub.ClientTimeoutInterval = TimeSpan.FromMinutes(10);
hub.EnableDetailedErrors = true; hub.EnableDetailedErrors = true;
}).AddMessagePackProtocol().AddJsonProtocol(); }).AddMessagePackProtocol().AddJsonProtocol();
if (!string.IsNullOrEmpty(Constants.SIGNALR_REDIS_CONNECTION_STRING))
signalR.AddStackExchangeRedis(Constants.SIGNALR_REDIS_CONNECTION_STRING);
services.AddResponseCompression(options => services.AddResponseCompression(options =>
{ {
options.EnableForHttps = true; options.EnableForHttps = true;
-1
View File
@@ -79,7 +79,6 @@ namespace Streetwriters.Common
public static string? SUBSCRIPTIONS_CERT_PATH => ReadSecret("SUBSCRIPTIONS_CERT_PATH"); public static string? SUBSCRIPTIONS_CERT_PATH => ReadSecret("SUBSCRIPTIONS_CERT_PATH");
public static string? SUBSCRIPTIONS_CERT_KEY_PATH => ReadSecret("SUBSCRIPTIONS_CERT_KEY_PATH"); public static string? SUBSCRIPTIONS_CERT_KEY_PATH => ReadSecret("SUBSCRIPTIONS_CERT_KEY_PATH");
public static string[] NOTESNOOK_CORS_ORIGINS => ReadSecret("NOTESNOOK_CORS")?.Split(",") ?? []; public static string[] NOTESNOOK_CORS_ORIGINS => ReadSecret("NOTESNOOK_CORS")?.Split(",") ?? [];
public static string? SIGNALR_REDIS_CONNECTION_STRING => ReadSecret("SIGNALR_REDIS_CONNECTION_STRING");
public static string? ReadSecret(string name) public static string? ReadSecret(string name)
{ {
+6 -6
View File
@@ -39,7 +39,7 @@ function isValidUrl(urlString: string): boolean {
// Handle proxied request with redirect support // Handle proxied request with redirect support
async function proxyRequest( async function proxyRequest(
targetUrl: string, targetUrl: string,
redirectCount = 0, redirectCount = 0
): Promise<Response> { ): Promise<Response> {
if (redirectCount >= MAX_REDIRECTS) { if (redirectCount >= MAX_REDIRECTS) {
return new Response("Too many redirects", { return new Response("Too many redirects", {
@@ -147,7 +147,7 @@ const server = Bun.serve({
method2: "GET /?url=<encoded-url>", method2: "GET /?url=<encoded-url>",
example1: `${url.origin}/https://example.com/image.jpg`, example1: `${url.origin}/https://example.com/image.jpg`,
example2: `${url.origin}/?url=${encodeURIComponent( example2: `${url.origin}/?url=${encodeURIComponent(
"https://example.com/image.jpg", "https://example.com/image.jpg"
)}`, )}`,
}, },
endpoints: { endpoints: {
@@ -190,7 +190,7 @@ const server = Bun.serve({
{ {
status: 400, status: 400,
headers: corsHeaders, headers: corsHeaders,
}, }
); );
} }
@@ -218,7 +218,7 @@ const server = Bun.serve({
status: 200, status: 200,
headers: { headers: {
"Content-Type": "text/html; charset=utf-8", "Content-Type": "text/html; charset=utf-8",
// "Content-Security-Policy": "frame-ancestors *", "Content-Security-Policy": "frame-ancestors *",
"X-Frame-Options": "ALLOWALL", "X-Frame-Options": "ALLOWALL",
}, },
}); });
@@ -239,7 +239,7 @@ const server = Bun.serve({
}); });
console.log( console.log(
`🚀 CORS Proxy Server running on http://${server.hostname}:${server.port}`, `🚀 CORS Proxy Server running on http://${server.hostname}:${server.port}`
); );
console.log(`📋 Health check: http://${server.hostname}:${server.port}/health`); console.log(`📋 Health check: http://${server.hostname}:${server.port}/health`);
console.log(`🌍 Environment: ${Bun.env.NODE_ENV || "development"}`); console.log(`🌍 Environment: ${Bun.env.NODE_ENV || "development"}`);
@@ -280,7 +280,7 @@ function serveYouTubeEmbed(url: string) {
</head> </head>
<body> <body>
<iframe src="${transformYouTubeUrl( <iframe src="${transformYouTubeUrl(
url, url
)}" allow="accelerometer;autoplay;clipboard-write;encrypted-media;gyroscope;picture-in-picture;web-share" allowfullscreen referrerpolicy="strict-origin-when-cross-origin" title="Video player"></iframe> )}" allow="accelerometer;autoplay;clipboard-write;encrypted-media;gyroscope;picture-in-picture;web-share" allowfullscreen referrerpolicy="strict-origin-when-cross-origin" title="Video player"></iframe>
</body> </body>
</html>`; </html>`;