Skip to content

Commit 9c2cefe

Browse files
committed
feat: add reverse proxy support over https
feat: download sync file and return to front
1 parent 2c294a1 commit 9c2cefe

3 files changed

Lines changed: 53 additions & 13 deletions

File tree

TelegramDownloader/Controllers/FileController.cs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,36 @@ public async Task<IActionResult> GetFile(string id, string? idChannel, string? i
262262
};
263263
}
264264

265+
[Route("GetFileByTfmIdNow/{id}")]
266+
public async Task<IActionResult> GetFileByTfmIdNow(string id, [FromQuery] string idChannel, [FromQuery] string idFile)
267+
{
268+
var fileName = id;
269+
var mimeType = FileService.getMimeType(id.Split(".").Last());
270+
var dbFile = await _fs.getItemById(idChannel, idFile);
271+
if (dbFile == null)
272+
{
273+
return new ObjectResult("") { StatusCode = (int)HttpStatusCode.NotFound };
274+
}
275+
var file = _fs.ExistFileIntempFolder($"{idChannel}-{dbFile.MessageId}-{id}");
276+
if (file == null)
277+
{
278+
TL.Message idM = await _ts.getMessageFile(idChannel, Convert.ToInt32(dbFile.MessageId));
279+
ChatMessages cm = new ChatMessages();
280+
cm.message = idM;
281+
file = new FileStream(System.IO.Path.Combine(FileService.TEMPDIR, "_temp", $"{idChannel}-{idFile}-{id}"), FileMode.Create, FileAccess.ReadWrite);
282+
DownloadModel dm = new DownloadModel();
283+
dm.tis = _tis;
284+
dm.channelName = _ts.getChatName(Convert.ToInt64(idChannel));
285+
_tis.addToDownloadList(dm);
286+
await _ts.DownloadFileAndReturn(cm, file, model: dm);
287+
file.Position = 0;
288+
}
289+
290+
Response.Headers["Content-Disposition"] = $"inline; filename=\"{HttpUtility.UrlEncode(fileName)}\"";
291+
292+
return new FileStreamResult(file, mimeType);
293+
}
294+
265295
[Route("GetFileByTfmId/{id}")]
266296
public async Task<IActionResult> GetFileByTfmId(string id, [FromQuery] string idChannel, [FromQuery] string idFile)
267297
{

TelegramDownloader/Pages/Partials/impl/FileManagerImpl.razor

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,12 @@
1717
@inject NavigationManager MyNavigationManager;
1818

1919

20-
<SfFileManager ID="remotefm" @ref="fm" TValue="FileManagerDirectoryContent" ShowThumbnail="false" SelectedItemsChanged="itemsChanged" AllowDragAndDrop="false" EnablePersistence="false" EnableVirtualization="@hasVirtualScroll">
20+
<SfFileManager ID="remotefm" @ref="fm" TValue="FileManagerDirectoryContent"
21+
ShowThumbnail="false"
22+
SelectedItemsChanged="itemsChanged"
23+
AllowDragAndDrop="false"
24+
EnablePersistence="false"
25+
EnableVirtualization="@hasVirtualScroll">
2126

2227

2328
<FileManagerEvents TValue="FileManagerDirectoryContent"
@@ -155,6 +160,7 @@
155160
{
156161
if (args.FileDetails == null || !args.FileDetails.IsFile)
157162
return;
163+
args.Cancel = true;
158164
if (args != null && args.FileDetails != null && args.FileDetails.IsFile && isAudioFile(args.FileDetails.Type.ToLower()))
159165
{
160166
await playAudio(args);
@@ -259,7 +265,7 @@
259265
private string getTempFileMediaUrl(string idFile, String name)
260266
{
261267
string localdir = MyNavigationManager.BaseUri;
262-
return new System.Uri(Path.Combine(localdir, "api/file/GetFileByTfmId", name).Replace("\\", "/") + $"?idChannel={(isShared ? bsi.ChannelId : id)}&idFile={idFile}").AbsoluteUri;
268+
return new System.Uri(Path.Combine(localdir, "api/file/GetFileByTfmIdNow", name).Replace("\\", "/") + $"?idChannel={(isShared ? bsi.ChannelId : id)}&idFile={idFile}").AbsoluteUri;
263269
}
264270

265271
public async Task toolBarClicked(ToolbarClickEventArgs<FileManagerDirectoryContent> args)

TelegramDownloader/Program.cs

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,19 @@
1+
using Microsoft.AspNetCore;
12
using Microsoft.AspNetCore.Components;
23
using Microsoft.AspNetCore.Components.Web;
3-
using TelegramDownloader.Data;
4-
5-
using TelegramDownloader.Data.db;
6-
using TelegramDownloader.Services;
7-
4+
using Microsoft.AspNetCore.Hosting;
5+
using Microsoft.AspNetCore.HttpOverrides;
6+
using Microsoft.AspNetCore.StaticFiles;
87
using Microsoft.Extensions.FileProviders;
98
using Syncfusion.Blazor;
10-
using TL;
11-
using Microsoft.AspNetCore.StaticFiles;
12-
using Microsoft.AspNetCore.Hosting;
13-
using Microsoft.AspNetCore;
9+
using System.Net;
10+
using System.Net.Http;
11+
using TelegramDownloader.Data;
12+
using TelegramDownloader.Data.db;
1413
using TelegramDownloader.Models;
14+
using TelegramDownloader.Services;
1515
using TelegramDownloader.Services.GitHub;
16-
using System.Net.Http;
17-
using System.Net;
16+
using TL;
1817

1918
var extensionProvider = new FileExtensionContentTypeProvider();
2019
foreach(var mime in FileService.MIMETypesDictionary)
@@ -83,6 +82,11 @@
8382

8483
var app = builder.Build();
8584

85+
app.UseForwardedHeaders(new ForwardedHeadersOptions
86+
{
87+
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
88+
});
89+
8690
using (var scope = app.Services.CreateScope())
8791
{
8892
var db = scope.ServiceProvider.GetRequiredService<IDbService>();

0 commit comments

Comments
 (0)