forked from Kieran/void.cat
Add trackers
This commit is contained in:
parent
ef3ebb867d
commit
0a827651a2
@ -54,7 +54,7 @@ public class DownloadController : Controller
|
|||||||
{
|
{
|
||||||
var t = await voidFile.Metadata!.MakeTorrent(
|
var t = await voidFile.Metadata!.MakeTorrent(
|
||||||
await _storage.Open(new(gid, Enumerable.Empty<RangeRequest>()), CancellationToken.None),
|
await _storage.Open(new(gid, Enumerable.Empty<RangeRequest>()), CancellationToken.None),
|
||||||
_settings.SiteUrl);
|
_settings.SiteUrl, _settings.TorrentTrackers);
|
||||||
|
|
||||||
Response.Headers.ContentDisposition = $"inline; filename=\"{id}\"";
|
Response.Headers.ContentDisposition = $"inline; filename=\"{id}\"";
|
||||||
Response.ContentType = "application/x-bittorent";
|
Response.ContentType = "application/x-bittorent";
|
||||||
|
@ -49,6 +49,7 @@ public static class Extensions
|
|||||||
base58 = Path.GetFileNameWithoutExtension(base58);
|
base58 = Path.GetFileNameWithoutExtension(base58);
|
||||||
var guidBytes = enc.DecodeData(base58);
|
var guidBytes = enc.DecodeData(base58);
|
||||||
if (guidBytes.Length != 16) throw new VoidInvalidIdException(base58);
|
if (guidBytes.Length != 16) throw new VoidInvalidIdException(base58);
|
||||||
|
|
||||||
return new Guid(guidBytes);
|
return new Guid(guidBytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -275,7 +276,7 @@ public static class Extensions
|
|||||||
public static bool HasGoogle(this VoidSettings settings)
|
public static bool HasGoogle(this VoidSettings settings)
|
||||||
=> settings.Google != null;
|
=> settings.Google != null;
|
||||||
|
|
||||||
public static async Task<Torrent> MakeTorrent(this FileMeta meta, Stream fileStream, Uri baseAddress)
|
public static async Task<Torrent> MakeTorrent(this FileMeta meta, Stream fileStream, Uri baseAddress, List<string> trackers)
|
||||||
{
|
{
|
||||||
const int pieceSize = 262_144;
|
const int pieceSize = 262_144;
|
||||||
const int pieceHashLen = 20;
|
const int pieceHashLen = 20;
|
||||||
@ -313,6 +314,8 @@ public static class Extensions
|
|||||||
IsPrivate = false,
|
IsPrivate = false,
|
||||||
PieceSize = pieceSize,
|
PieceSize = pieceSize,
|
||||||
Pieces = await BuildPieces(),
|
Pieces = await BuildPieces(),
|
||||||
|
// ReSharper disable once CoVariantArrayConversion
|
||||||
|
Trackers = trackers.Select(a => new[] {a}).ToArray(),
|
||||||
ExtraFields = new BDictionary
|
ExtraFields = new BDictionary
|
||||||
{
|
{
|
||||||
{"url-list", webSeed.ToString()}
|
{"url-list", webSeed.ToString()}
|
||||||
|
@ -105,11 +105,23 @@ namespace VoidCat.Model
|
|||||||
/// Discord application settings
|
/// Discord application settings
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public OAuthDetails? Discord { get; init; }
|
public OAuthDetails? Discord { get; init; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Google application settings
|
/// Google application settings
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public OAuthDetails? Google { get; init; }
|
public OAuthDetails? Google { get; init; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// A list of trackers to attach to torrent files
|
||||||
|
/// </summary>
|
||||||
|
public List<string> TorrentTrackers { get; init; } = new()
|
||||||
|
{
|
||||||
|
"wss://tracker.btorrent.xyz",
|
||||||
|
"wss://tracker.openwebtorrent.com",
|
||||||
|
"udp://tracker.opentrackr.org:1337/announce",
|
||||||
|
"udp://tracker.openbittorrent.com:6969/announce",
|
||||||
|
"http://tracker.openbittorrent.com:80/announce"
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public sealed class TorSettings
|
public sealed class TorSettings
|
||||||
@ -190,4 +202,4 @@ namespace VoidCat.Model
|
|||||||
public string? ClientId { get; init; }
|
public string? ClientId { get; init; }
|
||||||
public string? ClientSecret { get; init; }
|
public string? ClientSecret { get; init; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -86,8 +86,15 @@ public class LocalDiskFileStore : StreamFileStore, IFileStore
|
|||||||
|
|
||||||
if (payload.Segment == payload.TotalSegments)
|
if (payload.Segment == payload.TotalSegments)
|
||||||
{
|
{
|
||||||
var t = await vf.Metadata!.MakeTorrent(new FileStream(finalPath, FileMode.Open), _settings.SiteUrl);
|
var t = await vf.Metadata!.MakeTorrent(
|
||||||
vf.Metadata!.MagnetLink = t.GetMagnetLink();
|
new FileStream(finalPath, FileMode.Open),
|
||||||
|
_settings.SiteUrl,
|
||||||
|
_settings.TorrentTrackers);
|
||||||
|
|
||||||
|
var ub = new UriBuilder(_settings.SiteUrl);
|
||||||
|
ub.Path = $"/d/{vf.Id.ToBase58()}.torrent";
|
||||||
|
|
||||||
|
vf.Metadata!.MagnetLink = $"{t.GetMagnetLink()}&xs={Uri.EscapeDataString(ub.ToString())}";
|
||||||
}
|
}
|
||||||
|
|
||||||
return vf;
|
return vf;
|
||||||
|
Loading…
Reference in New Issue
Block a user