Compare commits
5 Commits
64eee4ebc5
...
v1.0.3
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d0b70acf39 | ||
|
|
ffd9327e3e | ||
|
|
40b81a5dc8 | ||
|
|
dc5582aa04 | ||
|
|
643ced23e9 |
2
.github/workflows/docker.yml
vendored
2
.github/workflows/docker.yml
vendored
@@ -7,10 +7,12 @@ on:
|
|||||||
|
|
||||||
env:
|
env:
|
||||||
IMAGE_NAME: xmrpay
|
IMAGE_NAME: xmrpay
|
||||||
|
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
environment: DOCKER
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
packages: write
|
packages: write
|
||||||
|
|||||||
@@ -145,7 +145,7 @@ xmrpay.link/
|
|||||||
## Self-Hosting
|
## Self-Hosting
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://gitea.schmidt.eco/schmidt1024/xmrpay.link.git
|
git clone https://github.com/schmidt1024/xmrpay.git
|
||||||
cd xmrpay.link
|
cd xmrpay.link
|
||||||
# Serve with any web server that supports PHP
|
# Serve with any web server that supports PHP
|
||||||
# No build tools, no npm, no database required
|
# No build tools, no npm, no database required
|
||||||
|
|||||||
@@ -14,13 +14,19 @@ function send_security_headers(): void {
|
|||||||
|
|
||||||
// ── Origin verification ───────────────────────────────────────────────────────
|
// ── Origin verification ───────────────────────────────────────────────────────
|
||||||
function verify_origin(): void {
|
function verify_origin(): void {
|
||||||
$allowed = [
|
|
||||||
'https://xmrpay.link',
|
|
||||||
'http://mc6wfeaqc7oijgdcudrr5zsotmwok3jzk3tu2uezzyjisn7nzzjjizyd.onion',
|
|
||||||
];
|
|
||||||
$origin = $_SERVER['HTTP_ORIGIN'] ?? '';
|
$origin = $_SERVER['HTTP_ORIGIN'] ?? '';
|
||||||
// Allow same-origin (no Origin header from direct same-origin requests)
|
// Allow same-origin (no Origin header from direct same-origin requests)
|
||||||
if ($origin === '') return;
|
if ($origin === '') return;
|
||||||
|
|
||||||
|
// Dynamically allow the host this instance runs on
|
||||||
|
$scheme = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https' : 'http';
|
||||||
|
$self_origin = $scheme . '://' . ($_SERVER['HTTP_HOST'] ?? '');
|
||||||
|
|
||||||
|
$allowed = [
|
||||||
|
$self_origin,
|
||||||
|
'https://xmrpay.link',
|
||||||
|
'http://mc6wfeaqc7oijgdcudrr5zsotmwok3jzk3tu2uezzyjisn7nzzjjizyd.onion',
|
||||||
|
];
|
||||||
if (!in_array($origin, $allowed, true)) {
|
if (!in_array($origin, $allowed, true)) {
|
||||||
http_response_code(403);
|
http_response_code(403);
|
||||||
echo json_encode(['error' => 'Origin not allowed']);
|
echo json_encode(['error' => 'Origin not allowed']);
|
||||||
|
|||||||
2
i18n.js
2
i18n.js
@@ -13,7 +13,7 @@ var I18n = (function () {
|
|||||||
|
|
||||||
var VERSION = '1.0.0';
|
var VERSION = '1.0.0';
|
||||||
|
|
||||||
var footer = 'Open Source · No Tracking · No KYC<br /><a href="https://gitea.schmidt.eco/schmidt1024/xmrpay.link" target="_blank" rel="noopener noreferrer">Source</a> · <a href="http://mc6wfeaqc7oijgdcudrr5zsotmwok3jzk3tu2uezzyjisn7nzzjjizyd.onion" title="Tor Hidden Service">Onion</a> · <a href="/privacy.html">Privacy & Terms</a><br /><span class="version">v' + VERSION + '</span>';
|
var footer = 'Open Source · No Tracking · No KYC<br /><a href="https://github.com/schmidt1024/xmrpay" target="_blank" rel="noopener noreferrer">Source</a> · <a href="http://mc6wfeaqc7oijgdcudrr5zsotmwok3jzk3tu2uezzyjisn7nzzjjizyd.onion" title="Tor Hidden Service">Onion</a> · <a href="/privacy.html">Privacy & Terms</a><br /><span class="version">v' + VERSION + '</span>';
|
||||||
|
|
||||||
var translations = {
|
var translations = {
|
||||||
en: {
|
en: {
|
||||||
|
|||||||
@@ -115,7 +115,7 @@
|
|||||||
</main>
|
</main>
|
||||||
|
|
||||||
<footer>
|
<footer>
|
||||||
<p data-i18n-html="footer">Open Source · No Tracking · No KYC<br /><a href="https://gitea.schmidt.eco/schmidt1024/xmrpay.link" target="_blank" rel="noopener noreferrer">Source</a> · <a href="http://mc6wfeaqc7oijgdcudrr5zsotmwok3jzk3tu2uezzyjisn7nzzjjizyd.onion" title="Tor Hidden Service">Onion</a> · <a href="/privacy.html">Privacy & Terms</a><br /><span class="version">v1.0.0</span></p>
|
<p data-i18n-html="footer">Open Source · No Tracking · No KYC<br /><a href="https://github.com/schmidt1024/xmrpay" target="_blank" rel="noopener noreferrer">Source</a> · <a href="http://mc6wfeaqc7oijgdcudrr5zsotmwok3jzk3tu2uezzyjisn7nzzjjizyd.onion" title="Tor Hidden Service">Onion</a> · <a href="/privacy.html">Privacy & Terms</a><br /><span class="version">v1.0.0</span></p>
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
<div class="lang-picker" id="langPicker">
|
<div class="lang-picker" id="langPicker">
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ set -e
|
|||||||
DOMAIN="${1:-}"
|
DOMAIN="${1:-}"
|
||||||
INSTALL_DIR="/opt/xmrpay"
|
INSTALL_DIR="/opt/xmrpay"
|
||||||
IMAGE="schmidt1024/xmrpay:latest"
|
IMAGE="schmidt1024/xmrpay:latest"
|
||||||
COMPOSE_URL="https://raw.githubusercontent.com/schmidt1024/xmrpay.link/master/docker-compose.yml"
|
COMPOSE_URL="https://raw.githubusercontent.com/schmidt1024/xmrpay/master/docker-compose.yml"
|
||||||
|
|
||||||
# ── Helpers ───────────────────────────────────────────────────────────────────
|
# ── Helpers ───────────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
|||||||
@@ -198,7 +198,7 @@
|
|||||||
</main>
|
</main>
|
||||||
|
|
||||||
<footer>
|
<footer>
|
||||||
<p data-i18n-html="footer">Open Source · No Tracking · No KYC · <a href="https://gitea.schmidt.eco/schmidt1024/xmrpay.link" target="_blank" rel="noopener noreferrer">Source</a> · <a href="http://mc6wfeaqc7oijgdcudrr5zsotmwok3jzk3tu2uezzyjisn7nzzjjizyd.onion" title="Tor Hidden Service">Onion</a> · <a href="/privacy.html">Privacy & Terms</a></p>
|
<p data-i18n-html="footer">Open Source · No Tracking · No KYC · <a href="https://github.com/schmidt1024/xmrpay" target="_blank" rel="noopener noreferrer">Source</a> · <a href="http://mc6wfeaqc7oijgdcudrr5zsotmwok3jzk3tu2uezzyjisn7nzzjjizyd.onion" title="Tor Hidden Service">Onion</a> · <a href="/privacy.html">Privacy & Terms</a></p>
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
<div class="lang-picker" id="langPicker">
|
<div class="lang-picker" id="langPicker">
|
||||||
|
|||||||
2
s.php
2
s.php
@@ -1,5 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
$pathInfo = isset($_SERVER['PATH_INFO']) && is_string($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : null;
|
$pathInfo = isset($_SERVER['PATH_INFO']) && is_string($_SERVER['PATH_INFO']) && $_SERVER['PATH_INFO'] !== '' ? $_SERVER['PATH_INFO'] : null;
|
||||||
$queryCode = isset($_GET['c']) && is_string($_GET['c']) ? $_GET['c'] : '';
|
$queryCode = isset($_GET['c']) && is_string($_GET['c']) ? $_GET['c'] : '';
|
||||||
$code = trim($pathInfo ?? $queryCode, '/');
|
$code = trim($pathInfo ?? $queryCode, '/');
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user