mirror of
https://github.com/SinTan1729/privtracker.git
synced 2024-12-27 07:48:36 -06:00
Merge pull request #9 from ulnasensei/master
Change hardcoded domain to use environment variables.
This commit is contained in:
commit
f1d535e863
3 changed files with 73 additions and 22 deletions
22
README.md
22
README.md
|
@ -3,3 +3,25 @@
|
||||||
PrivTracker allows to share torrent files just with your friends, nobody else.
|
PrivTracker allows to share torrent files just with your friends, nobody else.
|
||||||
Unlike public trackers, it shares peers only within a group which is using the same Announce URL.
|
Unlike public trackers, it shares peers only within a group which is using the same Announce URL.
|
||||||
It really works like a private tracker, but can be generated with one click of a button.
|
It really works like a private tracker, but can be generated with one click of a button.
|
||||||
|
|
||||||
|
---
|
||||||
|
### Build
|
||||||
|
```bash
|
||||||
|
# Clone this repository.
|
||||||
|
$ git clone https://github.com/meehow/privtracker.git
|
||||||
|
|
||||||
|
# cd into the directory
|
||||||
|
$ cd privtracker
|
||||||
|
|
||||||
|
# Run go build
|
||||||
|
$ go build
|
||||||
|
```
|
||||||
|
### Usage
|
||||||
|
```bash
|
||||||
|
# Runs on port 1337 and redirects to privtracker.com by default.
|
||||||
|
$ ./privtracker
|
||||||
|
```
|
||||||
|
```bash
|
||||||
|
# Export PORT and DOMAIN variables to use custom values.
|
||||||
|
$ export PORT=12345 DOMAIN=customprivtracker.com; ./privtracker
|
||||||
|
```
|
|
@ -7,22 +7,26 @@
|
||||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/water.css@2/out/water.css">
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/water.css@2/out/water.css">
|
||||||
<title>PrivTracker - Private BitTorrent tracker for everyone</title>
|
<title>PrivTracker - Private BitTorrent tracker for everyone</title>
|
||||||
<script>
|
<script>
|
||||||
|
document.addEventListener("DOMContentLoaded", () => {
|
||||||
|
document.querySelectorAll(".url").forEach(url => {
|
||||||
|
url.innerText = url.innerText.replace('{{hostname}}', window.location.hostname);
|
||||||
|
})
|
||||||
|
})
|
||||||
function makeRoom(length) {
|
function makeRoom(length) {
|
||||||
var roomID = '';
|
let roomID = '';
|
||||||
var characters = 'abcdefghijklmnopqrstuvwxyz0123456789';
|
const characters = 'abcdefghijklmnopqrstuvwxyz0123456789';
|
||||||
var charactersLength = characters.length;
|
const charactersLength = characters.length;
|
||||||
for (var i = 0; i < length; i++) {
|
for (let i = 0; i < length; i++) {
|
||||||
roomID += characters.charAt(Math.floor(Math.random() * charactersLength));
|
roomID += characters.charAt(Math.floor(Math.random() * charactersLength));
|
||||||
}
|
}
|
||||||
var urls = document.getElementsByClassName('url');
|
document.querySelectorAll(".url").forEach(url => {
|
||||||
for (var i = 0; i < urls.length; i++) {
|
url.innerText = url.innerText.replace('{{room}}', roomID);
|
||||||
urls[i].innerText = urls[i].innerText.replace('{{room}}', roomID);
|
})
|
||||||
}
|
|
||||||
|
|
||||||
document.getElementById('hidden').style.display = 'block';
|
document.querySelector('#hidden').style.display = 'block';
|
||||||
}
|
}
|
||||||
function copyToClipboard() {
|
function copyToClipboard() {
|
||||||
navigator.clipboard.writeText(document.getElementsByClassName('url')[0].innerText);
|
navigator.clipboard.writeText(document.querySelector('.url').innerText);
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
</head>
|
</head>
|
||||||
|
@ -44,7 +48,7 @@
|
||||||
|
|
||||||
<div id="hidden" style="display:none">
|
<div id="hidden" style="display:none">
|
||||||
<h3>Your announce URL:</h3>
|
<h3>Your announce URL:</h3>
|
||||||
<code class="url">https://privtracker.com/{{room}}/announce</code>
|
<code class="url">https://{{hostname}}/{{room}}/announce</code>
|
||||||
<button onclick="copyToClipboard()">Copy to clipboard</button>
|
<button onclick="copyToClipboard()">Copy to clipboard</button>
|
||||||
<p>(You can also use any random string as the Room ID. We don't store it anywhere.)</p>
|
<p>(You can also use any random string as the Room ID. We don't store it anywhere.)</p>
|
||||||
</div>
|
</div>
|
||||||
|
@ -56,7 +60,7 @@
|
||||||
<ul>
|
<ul>
|
||||||
<li>File <b>→</b> New…</li>
|
<li>File <b>→</b> New…</li>
|
||||||
<li>Select file to share</li>
|
<li>Select file to share</li>
|
||||||
<li>In <b>Trackers</b> field enter <code class="url">https://privtracker.com/{{room}}/announce</code></li>
|
<li>In <b>Trackers</b> field enter <code class="url">https://{{hostname}}/{{room}}/announce</code></li>
|
||||||
<li>Select <b>Private torrent</b></li>
|
<li>Select <b>Private torrent</b></li>
|
||||||
<li>Click <b>New</b></li>
|
<li>Click <b>New</b></li>
|
||||||
<li>Click <b>Add</b> in next window</li>
|
<li>Click <b>Add</b> in next window</li>
|
||||||
|
@ -68,7 +72,8 @@
|
||||||
<ul>
|
<ul>
|
||||||
<li>File <b>→</b> Create Torrent File…</li>
|
<li>File <b>→</b> Create Torrent File…</li>
|
||||||
<li>Select file to share</li>
|
<li>Select file to share</li>
|
||||||
<li>Click <b>+</b> under <b>Trackers</b> field and enter <code class="url">https://privtracker.com/{{room}}/announce</code></li>
|
<li>Click <b>+</b> under <b>Trackers</b> field and enter <code
|
||||||
|
class="url">https://{{hostname}}/{{room}}/announce</code></li>
|
||||||
<li>Select <b>Private</b>
|
<li>Select <b>Private</b>
|
||||||
<li>Select <b>Open when created</b></li>
|
<li>Select <b>Open when created</b></li>
|
||||||
<li>Click <b>Create</b></li>
|
<li>Click <b>Create</b></li>
|
||||||
|
@ -80,4 +85,4 @@
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
40
main.go
40
main.go
|
@ -2,6 +2,7 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"crypto/tls"
|
"crypto/tls"
|
||||||
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"net"
|
"net"
|
||||||
"os"
|
"os"
|
||||||
|
@ -16,6 +17,8 @@ import (
|
||||||
"golang.org/x/crypto/acme/autocert"
|
"golang.org/x/crypto/acme/autocert"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var envConfig = getEnvConfig()
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
go Cleanup()
|
go Cleanup()
|
||||||
config := fiber.Config{
|
config := fiber.Config{
|
||||||
|
@ -30,6 +33,7 @@ func main() {
|
||||||
config.TrustedProxies = []string{"127.0.0.1"}
|
config.TrustedProxies = []string{"127.0.0.1"}
|
||||||
config.ProxyHeader = fiber.HeaderXForwardedFor
|
config.ProxyHeader = fiber.HeaderXForwardedFor
|
||||||
}
|
}
|
||||||
|
|
||||||
app := fiber.New(config)
|
app := fiber.New(config)
|
||||||
app.Use(recover.New())
|
app.Use(recover.New())
|
||||||
// app.Use(pprof.New())
|
// app.Use(pprof.New())
|
||||||
|
@ -50,14 +54,34 @@ func main() {
|
||||||
split := strings.Split(domains, ",")
|
split := strings.Split(domains, ",")
|
||||||
log.Fatal(app.Listener(myListener(split...)))
|
log.Fatal(app.Listener(myListener(split...)))
|
||||||
} else {
|
} else {
|
||||||
port := os.Getenv("PORT")
|
log.Fatal(app.Listen(":" + envConfig.port))
|
||||||
if port == "" {
|
|
||||||
port = "1337"
|
|
||||||
}
|
|
||||||
log.Fatal(app.Listen(":" + port))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type EnvConfig struct {
|
||||||
|
domain string
|
||||||
|
port string
|
||||||
|
}
|
||||||
|
|
||||||
|
func getEnvConfig() EnvConfig {
|
||||||
|
|
||||||
|
config := EnvConfig{
|
||||||
|
domain: "privtracker.com",
|
||||||
|
port: "1337",
|
||||||
|
}
|
||||||
|
|
||||||
|
port := os.Getenv("PORT")
|
||||||
|
domain := os.Getenv("DOMAIN")
|
||||||
|
if domain != "" {
|
||||||
|
config.domain = domain
|
||||||
|
}
|
||||||
|
if port != "" {
|
||||||
|
config.port = port
|
||||||
|
}
|
||||||
|
|
||||||
|
return config
|
||||||
|
}
|
||||||
|
|
||||||
func myListener(domains ...string) net.Listener {
|
func myListener(domains ...string) net.Listener {
|
||||||
homeDir, err := os.UserHomeDir()
|
homeDir, err := os.UserHomeDir()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -98,7 +122,7 @@ func redirect80(config fiber.Config) {
|
||||||
config.DisableStartupMessage = true
|
config.DisableStartupMessage = true
|
||||||
app := fiber.New(config)
|
app := fiber.New(config)
|
||||||
app.Use(func(c *fiber.Ctx) error {
|
app.Use(func(c *fiber.Ctx) error {
|
||||||
return c.Redirect("https://privtracker.com/", fiber.StatusMovedPermanently)
|
return c.Redirect(fmt.Sprintf("https://%s/", envConfig.domain), fiber.StatusMovedPermanently)
|
||||||
})
|
})
|
||||||
log.Print(app.Listen(":80"))
|
log.Print(app.Listen(":80"))
|
||||||
}
|
}
|
||||||
|
@ -115,8 +139,8 @@ func hsts(c *fiber.Ctx) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func docs(c *fiber.Ctx) error {
|
func docs(c *fiber.Ctx) error {
|
||||||
if c.Hostname() != "privtracker.com" {
|
if c.Hostname() != envConfig.domain {
|
||||||
return c.Redirect("https://privtracker.com/", fiber.StatusMovedPermanently)
|
return c.Redirect(fmt.Sprintf("https://%s/", envConfig.domain), fiber.StatusMovedPermanently)
|
||||||
}
|
}
|
||||||
return c.Next()
|
return c.Next()
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue