Initial commit

This commit is contained in:
2022-12-10 20:40:42 +01:00
commit a342968da1
59 changed files with 6887 additions and 0 deletions

4
.github/FUNDING.yml vendored Normal file
View File

@ -0,0 +1,4 @@
# These are supported funding model platforms
github: DanWin
liberapay: DanWin1210

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
*~

9
.well-known/host-meta Normal file
View File

@ -0,0 +1,9 @@
<?xml version='1.0' encoding='utf-8'?>
<XRD xmlns='http://docs.oasis-open.org/ns/xri/xrd-1.0'>
<Link rel="urn:xmpp:alt-connections:xbosh"
href="https://danwin1210.de:5281/http-bind" />
</XRD>
<XRD xmlns='http://docs.oasis-open.org/ns/xri/xrd-1.0'>
<Link rel="urn:xmpp:alt-connections:websocket"
href="wss://danwin1210.de:5281/xmpp-websocket" />
</XRD>

View File

@ -0,0 +1,12 @@
{
"links": [
{
"rel": "urn:xmpp:alt-connections:xbosh",
"href": "https://danwin1210.de:5281/http-bind"
},
{
"rel": "urn:xmpp:alt-connections:websocket",
"href": "wss://danwin1210.de:5281/xmpp-websocket"
}
]
}

View File

11
README.md Normal file
View File

@ -0,0 +1,11 @@
General Information:
--------------------
This is the source code of my website on [danwin1210.de](https://danwin1210.de)
Translation:
--------------------------
The scrip `update-translations.sh` can be used to update the language template and translation files from source.
It will generate the file `locale/main-website.pot` which you can then use as basis to create a new language file in `YOUR_LANG_CODE/LC_MESSAGES/main-website.po` and edit it with a translation program, such as [Poedit](https://poedit.net/).
Once you are done, you can open a pull request, or [email me](mailto:daniel@danwin1210.de), to include the translation.

48
about.php Normal file
View File

@ -0,0 +1,48 @@
<?php
require_once('common.php');
global $language;
?>
<!DOCTYPE html><html lang="<?php echo $language; ?>"><head>
<title><?php echo _('Daniel - About'); ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="author" content="Daniel Winzen">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="<?php echo _('About the web developer, sysadmin and privacy enthusiast Daniel Winzen and this site'); ?>">
<link rel="canonical" href="https://danwin1210.de/about.php">
<?php alt_links(); ?>
</head><body>
<?php menu(_('About')); ?>
<h2><?php echo _('About me'); ?></h2>
<p><?php echo _('Hello, my name is Daniel Winzen, a german web developer and system administrator. In my free time I like reading books, programming on my open-source projects and pole dancing, which I picked up in times of the covid pandemic and resulting home office, because it\'s fun and keeps me fit.'); ?>
<br><?php echo _('Programming languages I use regularly are PHP, SQL and JavaScript, but I also know some basics of Perl, Python, C, C++ and more. With my experience I\'m able to quickly adapt and work with new languages, when necessary.'); ?>
<br><?php echo _('Before I got into coding and server management, I contributed German translation to various open-source projects since the end of 2011.'); ?></p>
<p><?php echo _('Managing servers, email services and developing new web projects is what I thrive on. I like optimizing systems for performance and getting the best out of what I have. Do you need help with managing and optimizing your infrastructure or website? I\'m here to help. <a href="/contact.php">Get in touch</a> and we\'ll discuss details.'); ?></p>
<p><?php echo _('Profiles on other sites that I am active on:'); ?></p>
<ul>
<li><a href="https://github.com/DanWin" target="_blank" rel="noopener noreferrer">GitHub</a></li>
<li><a href="https://www.malt.de/profile/danielwinzen" target="_blank" rel="noopener noreferrer">Malt</a></li>
<li><a href="https://www.upwork.com/freelancers/~01d4f8ae4e8fb1604c" target="_blank" rel="noopener noreferrer">Upwork</a></li>
<li><a href="https://www.freelance.de/Freiberufler/244201-Backend-Web-Entwickler-und-Systemadministrator" target="_blank" rel="noopener noreferrer">Freelance.de</a></li>
</ul>
<h2><?php echo _('About this site'); ?></h2>
<p><?php echo _('This is my personal site, that I develop in my free time. I started development of this site in August/September 2013 when I wanted to have a platform to host files on, to use at school.'); ?>
<br><?php echo _('Quickly the idea of using a chat at school came up and I came across a simple perl chat script called <a href="https://github.com/virtualghetto/lechat" target="_blank" rel="noopener noreferrer">LE-CHAT</a>. When I deployed that on my Raspberry Pi it was running very slowly and wasn\'t really usable for use with several people. So I decided to port some parts I needed to PHP.'); ?>
<br><?php echo _('This has been the start for me to get deeper into web-development and I have since open-sourced that chat script and several other scripts of this site on my <a href="https://github.com/DanWin/" target="_blank" rel="noopener noreferrer">GitHub account</a>. Since then, I have added many new features and improved reliability and my code a lot.'); ?>
<br><?php echo _('I used to offer free file hosting, an url shortener, a chat and even a free darknet web hosting service. All these projects have taught me a lot about coding, security and server management. As of now, only the anonymous email and XMPP hosting, as well as the onion link list are still actively maintained.'); ?></p>
<h2><?php echo _('About the setup'); ?></h2>
<p><?php echo _('The software I use are Debian sid running Ceph, NginX, MariaDB, Dovecot, Postfix, Rspamd, Squirrelmail, PHP-FPM, cURL, Prosody, Tor, ssh, bind9, acme.sh and Wireguard.'); ?>
<br><?php echo _('The clearnet gateways on <a href="https://danwin1210.de" target="_blank">danwin1210.de</a> are an NginX Proxy that will forward all requests to the raspberry pis at home. Additionally they run a Postfix instance only listening on the VPN network to send out mails to clearnet.'); ?>
<br><?php echo _('All servers are interconnected with a Wireguard VPN.'); ?></p>
<p><?php echo _('Hosting providers I use(ed) and servers hosted there:'); ?></p>
<ul>
<li><?php printf(_('%s - good for short-term and/or low-bandwidth projects'), '<a href="https://www.vultr.com/?ref=7173710" target="_blank" rel="noopener noreferrer">Vultr</a>'); ?></li>
<li><?php printf(_('%s - good for short-term and/or low-bandwidth projects'), '<a href="https://m.do.co/c/c066429f5e95" target="_blank" rel="noopener noreferrer">DigitalOcean</a>'); ?></li>
<li><?php printf(_('%s - good and reliable'), '<a href="https://www.ovh.com/" target="_blank" rel="noopener noreferrer">OVH</a>'); ?></li>
<li><?php printf(_('%s - comparably expensive but good and reliable'), '<a href="https://contabo.com/" target="_blank" rel="noopener noreferrer">Contabo</a>'); ?></li>
<li><?php printf(_('%s - (Used for my clearnet gateway) - good and reliable'), '<a href="https://hetzner.cloud/?ref=OXqb8WQ8yeXu" target="_blank" rel="noopener noreferrer">Hetzner</a>'); ?></li>
<li><?php printf(_('%s - (Used for my clearnet gateway + Domain registration) - good and reliable, hosted in my city'), '<a href="https://hosting.de/?partnerId=JZ0DZSUdrJUVJTKoHq7l" target="_blank" rel="noopener noreferrer">Hosting.de</a>'); ?></li>
<li><?php echo _('Home hosted: 4 Raspberry Pi 4 with the main site and data'); ?></li>
</ul>
<p><?php printf(_('If you like, what I\'ve built here, you can support me by donating via Monero: %1$s or Bitcoin: %2$s . More options available, just <a href="/contact.php">contact me</a>.'), '432Z3PTrRso52GHHpmPRpvLhecsnc7EFsVd2TzsCJaNmK4vivDxghRB5yVCj2nzCEGajeF3rBqJ43PcpxRnvZkMs49fufzD', 'bc1q8jcfxsmcz7lhk7g9urnzxpwhxsje2n2gz34cya'); ?></p>
</main>
</body></html>

21
chat/index.php Normal file
View File

@ -0,0 +1,21 @@
<?php
require_once('../common.php');
global $language;
?>
<!DOCTYPE html><html lang="<?php echo $language; ?>>"><head>
<title><?php echo _('Daniel - Chat'); ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="author" content="Daniel Winzen">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="<?php echo _('Daniel\'s Chat - a former darknet chat community'); ?>">
<link rel="canonical" href="https://danwin1210.de/chat/">
<?php alt_links(); ?>
</head><body>
<?php menu(_('Daniel\'s Chat')); ?>
<p><?php echo _('After 9 years, I\'m shutting down the chat for good.'); ?></p>
<p><?php echo _('You can find alternative chats on <a href="https://onions.danwin1210.de/?cat=2">my onion link list</a>. If you are interested in running a similar chat community, you can download my chat script on <a href="https://github.com/DanWin/le-chat-php" target="_blank" rel="noopener noreferrer">GitHub</a>.'); ?></p>
<p><?php echo _('This chat started as a hobby project for use in school in 2013 and evolved into a very active darknet chat community. I handed over chat administration to various other people since 2017, as I was no longer able to find the time or motivation to administrate the chat. In recent months, the administration that took over, kept the chat very private, made people spend hours waiting to get access and randomly kicked people for no reason. This in turn filled my inbox with messages of people asking for assistance to access the chat and traffic has decreased to a fraction of what it used to be. In this state, it doesn\'t make sense to continue providing the service. Thus I decided to shut down the chat for good in December 2022, after 9 years.'); ?></p>
<p><?php echo _('Since a few people asked me to make them admin and re-enable the chat: No, this decision has been made and was long overdue. The chat had nothing at all to do with me anymore, except that I\'ve programmed it and I maintain the server. Anyone is welcome to create their own chat, but not here on my site.'); ?></p>
<p><?php echo _('If there are any further questions, feel free to <a href="/contact.php">contact me</a>.'); ?></p>
</main>
</body></html>

117
common.php Normal file
View File

@ -0,0 +1,117 @@
<?php
global $global_style, $language;
$global_style = 'body{margin:0;font-size:18px}';
$global_style .= 'header{padding:0 50px;background:#00F;min-height:61px;display:flex;align-items:center}';
//$global_style .= 'header.notice{background:#F00;height:25px;display:flex;align-items:center} header.notice a{width:100%;display:flex} header.notice span{margin:auto}';
$global_style .= 'header h1{font-size:24px;color:#fff;margin:auto}';
$global_style .= 'main{margin-bottom:30px;padding:1em;word-wrap:break-word}';
$global_style .= 'nav{padding:0;margin-top:11px;background-color:#FFF;text-align:left;width:100%;z-index:1;display:block;position:absolute}';
$global_style .= 'nav a{display:block;font-weight:bold;margin:10px;margin-bottom:20px}';
$global_style .= 'nav a:link{color:#000;background-color:#eee}';
$global_style .= 'nav a:visited{color:#666;background-color:#eee}';
$global_style .= 'nav a:hover{color:#000;background-color:#fff}';
$global_style .= 'nav a:active{color:#fff;background-color:#888}';
$global_style .= '#menu{margin-top:-50px}#menu summary,#language summary{display:block;width:50px;cursor:pointer}#menu summary::-webkit-details-marker,#language summary::-webkit-details-marker{display: none}';
$global_style .= '#language{right:0;position:absolute;font-size:2em;margin-top:-40px}#language a{text-decoration:none}';
$global_style .= '.row{display:flex;flex-wrap:wrap}.cell{border: 1px solid #999999;flex:1;padding:3px 3px}.headerrow{display:flex;font-weight:bold}.col{display:flex;flex:1;padding:3px 3px;flex-direction:column;min-width:5em}';
$global_style .= '.form_limit{max-width:1024px}.red{color:red}.green{color:green}';
$global_style .= '.burger_nav .bar1,.burger_nav .bar2,.burger_nav .bar3{display:block;width:35px;height:5px;background-color:#fff;margin:6px 6px}';
$global_style .= '@media (min-width: 769px){nav{width:auto;border-right:1px solid silver;border-bottom:1px solid silver}}';
$global_style .= 'button,input,select,textarea{padding:0.3em;margin:0.3em;font-size:1em}input[type=checkbox],input[type=radio]{width:1.5em;height:1.5em}';
//$global_style .= '.ua_solidarity{background:linear-gradient(to top,#ffd700 0%,#ffd700 50%,#0057b8 50%, #0057b8 100%);position:fixed;top:0;left:0;right:0;bottom:0;opacity:0.4;pointer-events:none}';
$global_style .= '@media (prefers-color-scheme: dark){';
$global_style .= 'body,button,input,select,textarea{background-color:#000;color:#fff}';
$global_style .= 'a:visited{color:#B33CB4} a:link{color:#00A2D4} a:active{color:#55A2D4}';
$global_style .= 'header{background:#008} nav{background-color:#000}';
$global_style .= 'nav a:link{color:#fff;background-color:#333}';
$global_style .= 'nav a:visited{color:#ccc;background-color:#333}';
$global_style .= 'nav a:hover{color:#fff;background-color:#000}';
$global_style .= 'nav a:active{color:#fff;background-color:#555}';
$global_style .= '}';
header("Content-Security-Policy: base-uri 'self'; default-src 'none'; img-src 'self' data:; style-src 'self' 'sha256-DXBEMP36VCfgXuraJi2UnvYIOsGysSts59C82uw58v8=' 'sha256-".base64_encode(hash('sha256', $global_style, true))."'; frame-ancestors 'self'; form-action 'self'; require-trusted-types-for 'script'");
header('X-Content-Type-Options: nosniff');
header('X-Frame-Options: sameorigin');
header('X-XSS-Protection: 0');
header('Content-Type: text/html; charset=UTF-8');
header('Referrer-Policy: no-referrer');
header("Permissions-Policy: accelerometer=(), ambient-light-sensor=(), autoplay=(), battery=(), camera=(), cross-origin-isolated=(), display-capture=(), document-domain=(), encrypted-media=(), geolocation=(), fullscreen=(), execution-while-not-rendered=(), execution-while-out-of-viewport=(), gyroscope=(), magnetometer=(), microphone=(), midi=(), navigation-override=(), payment=(), picture-in-picture=(), publickey-credentials-get=(), screen-wake-lock=(), sync-xhr=(), usb=(), web-share=(), xr-spatial-tracking=(), clipboard-read=(), clipboard-write=(), gamepad=(), speaker-selection=(), conversion-measurement=(), focus-without-user-activation=(), hid=(), idle-detection=(), sync-script=(), vertical-scroll=(), serial=(), trust-token-redemption=(), interest-cohort=(), otp-credentials=()");
header("Cross-Origin-Embedder-Policy: require-corp");
header("Cross-Origin-Opener-Policy: same-origin");
header("Cross-Origin-Resource-Policy: same-origin");
const LANGUAGES = [
'de' => ['name' => 'Deutsch', 'locale' => 'de_DE', 'flag' => '🇩🇪'],
'en' => ['name' => 'English', 'locale' => 'en_GB', 'flag' => '🇬🇧'],
'ru' => ['name' => 'Русский', 'locale' => 'ru_RU', 'flag' => '🇷🇺'],
];
$language = 'en';
$locale = 'en_GB';
if(isset($_REQUEST['lang']) && isset(LANGUAGES[$_REQUEST['lang']])){
$locale = LANGUAGES[$_REQUEST['lang']]['locale'];
$language = $_REQUEST['lang'];
setcookie('language', $_REQUEST['lang'], ['expires' => 0, 'path' => '/', 'domain' => '', 'secure' => ($_SERVER['HTTPS'] ?? '' === 'on'), 'httponly' => true, 'samesite' => 'Strict']);
}elseif(isset($_COOKIE['language']) && isset(LANGUAGES[$_COOKIE['language']])){
$locale = LANGUAGES[$_COOKIE['language']]['locale'];
$language = $_COOKIE['language'];
}
putenv('LC_ALL='.$locale);
setlocale(LC_ALL, $locale);
bindtextdomain('main-website', __DIR__.'/locale');
bind_textdomain_codeset('main-website', 'UTF-8');
textdomain('main-website');
function menu(string $title = ''): void
{
global $global_style, $language;
echo "<style>$global_style</style>";
echo '<input id="burger_check" type="checkbox" hidden>';
echo "<header><h1>$title</h1></header>";
echo '<details id="menu">';
echo '<summary class="burger_nav" for="burger_check" aria-controls="nav" aria-label="Toggle navigation" tabindex="0"><span class="bar1"></span><span class="bar2"></span><span class="bar3"></span></summary>';
echo '<nav>';
if(isset($_SERVER['HTTP_HOST']) && preg_match('/danwin1210\.de$/', $_SERVER['HTTP_HOST'])){
$host='https://danwin1210.de';
$onions='https://onions.danwin1210.de';
}else{
$host='http://danielas3rtn54uwmofdo3x2bsdifr47huasnmbgqzfrec5ubupvtpid.onion';
$onions='http://donionsixbjtiohce24abfgsffo2l4tk26qx464zylumgejukfq2vead.onion';
}
echo "<a href=\"$host/\">"._('Home').'</a>';
echo "<a href=\"$host/chat/\">"._('Chat').'</a>';
echo "<a href=\"$onions/test.php\">"._('Online-Test').'</a>';
echo "<a href=\"$onions/onions.php\">"._('Onion link list').'</a>';
echo "<a href=\"$host/mail/\">"._('E-Mail + XMPP').'</a>';
echo "<a href=\"$host/tutorials/\">"._('Tutorials').'</a>';
echo "<a href=\"$host/github-ipv6-proxy.php\">"._('GitHub IPv6 proxy').'</a>';
echo "<a href=\"$host/faq.php\">"._('FAQ').'</a>';
echo "<a href=\"$host/about.php\">"._('About').'</a>';
echo "<a href=\"$host/privacy.php\">"._('Privacy').'</a>';
echo "<a href=\"$host/contact.php\">"._('Contact').'</a>';
echo '</nav>';
echo '</details>';
echo '<details id="language">';
echo '<summary title="'.LANGUAGES[$language]['name'].'">'.LANGUAGES[$language]['flag'].'</summary>';
foreach(LANGUAGES as $lang => $data) {
if($lang === $language){
continue;
}
echo '<div><a href="?lang='.$lang.'" title="'.$data['name'].'">'.$data['flag'].'</a></div>';
}
echo '<div><a target="_blank" rel="noopener noreferrer" href="https://github.com/DanWin/main-website/#translation" title="'._('Add translation').'">+</a></div>';
echo '</details>';
// echo '<div class="ua_solidarity"></div>';
echo '<main>';
}
function alt_links(): void
{
global $language;
foreach(LANGUAGES as $lang => $data) {
if($lang === $language){
continue;
}
echo '<link rel="alternate" href="?lang='.$lang.'" hreflang="'.$lang.'" />';
}
}

69
contact.php Normal file
View File

@ -0,0 +1,69 @@
<?php
require_once('common.php');
global $language;
?>
<!DOCTYPE html><html lang="<?php echo $language; ?>"><head>
<title><?php echo _('Daniel - Contact'); ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="author" content="Daniel Winzen">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="<?php echo _('Contact Daniel Winzen'); ?>">
<link rel="canonical" href="https://danwin1210.de/contact.php">
<?php alt_links(); ?>
</head><body>
<?php menu(_('Contact')); ?>
<p><?php echo _('You can send me a message here. Don\'t forget to leave a contact option, if you want me to answer.'); ?></p>
<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="POST">
<label><?php echo _('Name:'); ?> <br><input name="name" id="name" size="30" value="<?php
echo htmlspecialchars($_POST['name'] ?? '');
?>" autofocus></label><br>
<div <?php echo empty($_POST['subject']) ? 'hidden' : ''; ?>><label><?php echo _('Honeypot (do not fill anything):'); ?> <input type="text" name="subject" value="<?php echo htmlspecialchars($_POST['subject'] ?? ''); ?>"></label><br></div>
<label><?php echo _('Subject:'); ?> <br><input name="real_subj" size="30" value="<?php
echo htmlspecialchars($_POST['real_subj'] ?? '');
?>"></label><br>
<label><?php echo _('Message:'); ?> <br><textarea name="msg" rows="5" cols="30" required><?php
echo htmlspecialchars($_POST['msg'] ?? '');
?></textarea></label><br>
<label><input type="checkbox" name="accept_privacy" required<?php echo isset($_REQUEST['accept_privacy']) ? ' checked' : ''; ?>>I have read and agreed to the <a href="/privacy.php" target="_blank">Privacy Policy</a></label><br>
<input type="submit" name="action" value="Send"></form><br>
<?php
if($_SERVER['REQUEST_METHOD']==='POST'){
$subject='Formmail';
$name='';
if(!empty($_POST['name'])){
$name.=preg_replace("~[\n\r<>;,]*~", '', $_POST['name']);
}else{
$name.='www-data';
}
$name='=?utf-8?B?'.base64_encode($name).'?=';
$headers="Content-Type: text/plain; charset=utf-8\r\nContent-Transfer-Encoding: base64\r\nMime-Version: 1.0\r\nFrom: $name <www-data@danwin1210.de>\r\n";
$message='';
$ok=true;
if(!empty($_POST['subject'])){
$message .= _('You filled out the honeypot field :( Are you a human?').'<br>';
$ok = false;
}
if(empty($_POST['msg'])){
$message.= _('You haven\'t entered a message yet.').'<br>';
$ok=false;
}
if(!empty($_POST['real_subj'])){
$subject="$_POST[real_subj]";
}
$subject='=?utf-8?B?'.base64_encode($subject).'?=';
if($ok){
mail('daniel@danwin1210.de', $subject, base64_encode($_POST['msg']), $headers);
echo '<p class="green" role="alert">'._('Message successfully sent!').'</p>';
}else{
echo "<p class=\"red\" role=\"alert\">$message</p>";
}
}
?>
<p><?php echo _('If you want to encrypt your message, you can use <a href="/pgp.txt" target="_blank">my public PGP key</a>.'); ?></p>
<p><?php echo _('If you prefer to directly get in contact with me, email me at <a href="mailto:daniel@danwin1210.de">daniel@danwin1210.de</a>.'); ?></p>
<p><b>Daniel Winzen</b><br>Steinkaulstraße 47<br>52070 Aachen<br>Germany<br>E-Mail: daniel@danwin1210.de<br>Tel: +4917698819809</p>
<b><?php echo _('Disclaimer - External links'); ?></b>
<p><?php echo _('This website contains links to third party websites ("external links"). These websites are subject to the liability of the respective operator. When linking first time third-party content, the provider checked whether there are any legal violations. At the time there were none legal violations evident. The provider has no influence on the current and future design and the content of the linked pages. Setting external links does not mean that the provider claims ownership of the content behind the reference or link. Constant control of the external links are not reasonable for the provider without concrete evidence of legal violations. At knowledge of legal violations, however, such external links will be deleted immediately.'); ?></p>
</main>
</body></html>

82
faq.php Normal file
View File

@ -0,0 +1,82 @@
<?php
require_once('common.php');
global $language;
?>
<!DOCTYPE html><html lang="<?php echo $language; ?>"><head>
<title><?php echo _('Daniel - FAQ - Frequently Asked Questions'); ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="<?php echo _('A list of frequently asked questions regarding the services I provide and their answers'); ?>">
<link rel="canonical" href="https://danwin1210.de/faq.php">
<?php alt_links(); ?>
</head><body>
<?php menu(_('FAQ - Frequently Asked Questions')); ?>
<p><?php echo _('Here you have a list of frequently asked questions regarding the services I provide and their answers.'); ?></p>
<div class="table">
<div class="headerrow">
<div class="cell"><?php echo _('Question'); ?></div>
<div class="cell"><?php echo _('Answer'); ?></div>
</div>
<div class="row">
<div class="cell"><?php echo _('I found an illegal link/content on your site, can you remove it?'); ?></div>
<div class="cell"><?php echo _('Yes, please <a href="contact.php">report it</a> and I will remove it as soon as possible.'); ?></div>
</div>
<div class="row">
<div class="cell"><?php echo _('What is PGP?'); ?></div>
<div class="cell"><?php echo _('PGP is an encryption program, that can be used to encrypt or sign emails and files. <a href="https://en.wikipedia.org/wiki/Pretty_Good_Privacy" target="_blank" rel="noopener noreferrer">More info in this Wikipedia article</a>.'); ?></div>
</div>
<div class="row">
<div class="cell"><?php echo _('I have an idea how to make your site better, can you add feature xyz?'); ?></div>
<div class="cell"><?php echo _('Yes, please <a href="contact.php">contact me</a> and I may add it on my ToDo list. It might take a while until your feature gets added though.'); ?></div>
</div>
<div class="row">
<div class="cell"><?php echo _('I want to translate your site and services into another language, how can I do this?'); ?></div>
<div class="cell"><?php echo _('Please see my <a href="https://github.com/DanWin/" target="_blank" rel="noopener noreferrer">GitHub repositories</a> and check out the individual projects you would like to translate.'); ?></div>
</div>
<div class="row">
<div class="cell"><?php echo _('I heard of red rooms, live murder streams or similar. Are they real?'); ?></div>
<div class="cell"><?php echo _('No, they are just horror stories people commonly tell you. Many people make YouTube videos about the "deep web" and claim there were sites like these. However, many scammers jump on the train and create a site where they tell you to pay bitcoins to gain access. Don\'t pay, because they simply do not exist.'); ?></div>
</div>
<div class="row">
<div class="cell"><?php echo _('I heard of the shadow web, marianas web or closed shell network. How can I access them?'); ?></div>
<div class="cell"><?php echo _('You can\'t, because they do not exist. Some scammers want to sell it to you though. Don\'t pay because you won\'t get anything in return for your money.'); ?></div>
</div>
<div class="row">
<div class="cell"><?php echo _('Isn\'t the dark net supposed to be scary and full of creepy shit? Why can\'t I find any interesting sites?'); ?></div>
<div class="cell"><?php echo _('No, the Tor darknet was created to be able to anonymously browse the internet, circumvent censorship and anonymously host websites. Of course, it\'s not only used for a good cause. There are many phishing sites, scammers and child porn sites. But apart from the fact that you are anonymous, there isn\'t that much of a difference to the clearnet (normal internet). So most horror stories you have heard about Tor are just that, stories.'); ?></div>
</div>
<div class="row">
<div class="cell"><?php echo _('What\'s the difference between deep web and darknet?'); ?></div>
<div class="cell"><?php echo _('The deep web is any site that can\'t be indexed by a search engine, so basically any site where you have to log in or be part of a private network. To access a darknet, it requires special software like Tor, I2P or Freenet. The darknet is a small part of the deep web.'); ?></div>
</div>
<div class="row">
<div class="cell"><?php echo _('Can you hold my hands and teach me programming or hacking step by step?'); ?></div>
<div class="cell">
<?php echo _('Yes, marry me and I might actually do that. But only if you teach me something in return. <a href="contact.php">Send me your proposals</a>. Sorry guys, only considering females.'); ?>
<br><br>
<?php echo _('Joking aside, Teaching you programming or hacking is a task that will take a long time (years). I\'ve been learning for 10 years and still learn new things all the time. But for the beginning I would recommend reading a beginners introduction book, which can guide you with some simple programs you build yourself and examples. If you prefer watching videos, there are a lot of tutorials on YouTube too. But most importantly you will have to take your keyboard and start typing some programs. Start with something simple and keep yourself challenged with new tasks.'); ?>
</div>
</div>
<div class="row">
<div class="cell"><?php echo _('- Can you hack my school or university and change my grades, or find someone who would do that?'); ?><br><?php echo _('- Can you give me, or tell me where to reliably get stolen PayPal accounts or credit cards?'); ?><br><?php echo _('- Can you issue fake Covid19 test results?'); ?><br><?php echo _('- Can you do some other illegal things for me?'); ?></div>
<div class="cell"><?php echo _('Yes, I would love to go to prison for you! - Ehm, or rather not. Sorry, can\'t help you with that.'); ?></div>
</div>
<div class="row">
<div class="cell"><?php echo _('Can you hack my girlfriend? I think she\'s cheating.'); ?></div>
<div class="cell"><?php echo _('Yes, I could try, but I won\'t. Don\'t trust the any sites that claim to give you that, because they are all scams. This is ethically just wrong and is more likely going to hurt your relationship than helping you. Talk to her, it\'s the best you can do. If you are at the point of thinking to hire a hacker, you should definitely think about breaking up, because relationships are based on trust, but obviously you can\'t trust anymore.'); ?></div>
</div>
<div class="row">
<div class="cell"><?php echo _('My email doesn\'t get sent. I\'m getting an error about TLS'); ?></div>
<div class="cell"><?php echo _('You\'ve tried sending an email to a mail server that doesn\'t accept emails via encrypted transfer, or is using insecure protocols. This is very unfortunate, because it would leak your email content to anyone on the internet, who can intercept your email before it reaches the destination. You can disable mandatory encryption in your <a href="/mail/manage_account.php">account settings</a>, if you still need to send this email.'); ?></div>
</div>
<div class="row">
<div class="cell"><?php echo _('I can\'t receive email, the sender gets an error about TLS'); ?></div>
<div class="cell"><?php echo _('Someone tried emailing you from a mail server that doesn\'t support sending emails via encrypted transfer, or is using insecure protocols. This is very unfortunate, because it would leak your email content to anyone on the internet, who can intercept your email before it reaches the destination. You can disable mandatory encryption in your <a href="/mail/manage_account.php">account settings</a>, if you still need to receive this email.'); ?></div>
</div>
<div class="row">
<div class="cell"><?php echo _('I have more Questions.'); ?></div>
<div class="cell"><?php echo _('Feel free, to <a href="contact.php">contact me</a>.'); ?></div>
</div>
</div>
</main>
</body></html>

BIN
favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

73
github-ipv6-proxy.php Normal file
View File

@ -0,0 +1,73 @@
<?php
require_once('common.php');
global $language;
?>
<!DOCTYPE html><html lang="<?php echo $language; ?>"><head>
<title><?php echo _('GitHub IPv6 proxy'); ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="author" content="Daniel Winzen">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="<?php echo _('GitHub IPv6 proxy allows downloading GitHub repositories on IPv6 only servers'); ?>">
<link rel="canonical" href="https://danwin1210.de/github-ipv6-proxy.php">
<?php alt_links(); ?>
</head><body>
<?php menu(_('GitHub IPv6 proxy')); ?>
<p><?php printf(_('Recently I had to clone a git repository on GitHub via an IPv6 only server that I rented at my favourite hosting provider %s. Unfortunately I realized that GitHub still <a href="https://github.com/orgs/community/discussions/10539" target="_blank" rel="noopener noreferrer">does not support IPv6</a>.'), '<a href="https://hetzner.cloud/?ref=OXqb8WQ8yeXu" target="_blank" rel="noopener noreferrer">Hetzner</a>'); ?></p>
<p><?php echo _('My workaround was setting up a WireGuard VPN with one of my dual-stack servers. An alternative could have been installing Tor to download anonymously.'); ?></p>
<p><?php echo _('As I\'m by far not the only user with an IPv6 only server looking to download repositories from GitHub, I decided to provide a public proxy server that can be used to access GitHub on an IPv6 network, until GitHub provides native IPv6 support. The proxy is only available on IPv6, to prevent IPv4 users from using unnecessary resources, as they can already clone from GitHub directly.'); ?></p>
<p><?php echo _('Note, that my https proxy is serving a ssl certificate issued for my domain, which means I decrypt and re-encrypt your traffic (and could potentially look into it, but I don\'t). It is necessary as you\'d get an invalid ssl certificate warning otherwise + github would redirect to the default port after accepting it. See below for a more permanent solution, that\'s more privacy-friendly.'); ?></p>
<p><?php printf(_('So how does it work? Let\'s assume we want to clone the PHP Chat script I\'ve published at %s. Normally cloning the repository would look like this:'), '<a href="https://github.com/DanWin/le-chat-php" target="_blank" rel="noopener noreferrer">https://github.com/DanWin/le-chat-php</a>'); ?><br>
<code>git clone https://github.com/DanWin/le-chat-php</code><br>
<?php echo _('On an IPv6 connection, you can use my proxy service like this:'); ?><br>
<code>git clone https://danwin1210.de:1443/DanWin/le-chat-php</code><br>
<?php echo _('And if you would like to clone via ssh you can also do it like this:'); ?><br>
<code>git clone git@github-ipv6-proxy.danwin1210.de:DanWin/le-chat-php</code></p>
<p><?php echo _('Those wanting to use the proxy more permanently and/or talk directly to GitHub, without me re-encrypting your traffic, should add the following to /etc/hosts:'); ?></p>
<pre>2a01:4f8:c010:d56::2 github.com
2a01:4f8:c010:d56::3 api.github.com
2a01:4f8:c010:d56::4 codeload.github.com
2a01:4f8:c010:d56::5 objects.githubusercontent.com</pre>
<p><?php echo _('Once added, you can clone as usual, without any changes:'); ?></p>
<code>git clone https://github.com/DanWin/le-chat-php</code>
<p><?php echo _('All of this is done with the following nginx configuration on a dual stack server:'); ?></p>
<pre>
http {
server {
listen [::]:1443 fastopen=100 backlog=2048 ipv6only=on ssl http2 default_server;
location = /robots.txt {
return 200 'User-agent: *
Disallow:';
}
location / {
proxy_pass https://github.com;
proxy_set_header Host "github.com";
}
}
}
stream {
server {
listen [2a01:4f8:c010:d56::2]:22 fastopen=100 ipv6only=on;
proxy_pass github.com:22;
}
server {
listen [2a01:4f8:c010:d56::2]:443 fastopen=100 ipv6only=on;
proxy_pass github.com:443;
}
server {
listen [2a01:4f8:c010:d56::3]:443 fastopen=100 ipv6only=on;
proxy_pass api.github.com:443;
}
server {
listen [2a01:4f8:c010:d56::4]:443 fastopen=100 ipv6only=on;
proxy_pass codeload.github.com:443;
}
server {
listen [2a01:4f8:c010:d56::5]:443 fastopen=100 ipv6only=on;
proxy_pass objects.githubusercontent.com:443;
}
}
</pre>
<p><?php echo _('If there are any further questions, feel free to <a href="/contact.php">contact me</a>.'); ?></p>
</main>
</body></html>

18
hosting/index.php Normal file
View File

@ -0,0 +1,18 @@
<?php
require_once('../common.php');
global $language;
?>
<!DOCTYPE html><html lang="<?php echo $language; ?>"><head>
<title><?php echo _('Hosting - Info'); ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="author" content="Daniel Winzen">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="<?php echo _('Daniel\'s Hosting - a former darknet web hosting service'); ?>">
<link rel="canonical" href="https://danwin1210.de/hosting/">
<?php alt_links(); ?>
</head><body>
<?php menu(_('Hosting - Info')); ?>
<p><?php echo _('In March 2020 a hacker deleted all databases related to my hosting, thus I was forced to shut down my hosting service. If you want to contribute or setup your own hosting, check out my open source project at <a href="https://github.com/DanWin/hosting" target="_blank" rel="noopener">https://github.com/DanWin/hosting</a>.'); ?></p>
<p><?php echo _('Being a darknet hoster has taught me many things. However, this was a free time project I did next to my full time job and it\'s very time-consuming to try and keep the server clean from illegal and scammy sites. I\'ve spent 10 times more time on deleting accounts than I could find time to continue development. At this time I do not plan on continuing the hosting project, but this doesn\'t have to be the end. There are other hosting providers like <a href="http://hzwjmjimhr7bdmfv2doll4upibt5ojjmpo3pbp5ctwcg37n3hyk7qzid.onion/" target="_blank" rel="noopener">Ablative Hosting</a>, <a href="http://q3lgwxinynjxkor6wghr6hrhlix7fquja3t25phbagqizkpju36fwdyd.onion/" target="_blank" rel="noopener">OneHost</a>, <a href="http://dwebkjkovsjobzrb45dz6prnlifnapiyp2dba33vcmcsaikr2re4d5qd.onion" target="_blank" rel="noopener">OnionLand Hosting</a> or a clearnet proxy service <a href="https://clearnetonion.eu.org/" target="_blank" rel="noopener">Clearnet Onion | Easy clearnet relay</a> and my project is <a href="https://github.com/DanWin/hosting/" target="_blank" rel="noopener">available for download</a>, which should enable anyone willing to become the next darknet shared hosting provider to start where I left of.'); ?></p>
</main>
</body></html>

20
index.php Normal file
View File

@ -0,0 +1,20 @@
<?php
require_once('common.php');
global $language;
?>
<!DOCTYPE html><html lang="<?php echo $language; ?>"><head>
<title><?php echo _('Daniel - Home'); ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="author" content="Daniel Winzen">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="<?php echo _('Personal website of Daniel Winzen, the web developer, sysadmin and privacy enthusiast'); ?>">
<link rel="canonical" href="https://danwin1210.de/">
<?php alt_links(); ?>
</head><body>
<?php menu(_('Home')); ?>
<p><?php echo _('Hello, my name is Daniel Winzen, a german web developer and system administrator. This is my personal website, that I develop in my free time. This site is available as <a href="http://danielas3rtn54uwmofdo3x2bsdifr47huasnmbgqzfrec5ubupvtpid.onion">Tor hidden service</a> or via my clearnet proxy <a href="https://danwin1210.de">danwin1210.de</a>. To learn more about me and this site, check <a href="/about.php">the about page</a>.'); ?></p>
<p><?php echo _('This is just the landing page. You can navigate to the pages that interest you most, such as my free and anonymous <a href="/mail/">mail service</a> or <a href="https://onions.danwin1210.de">Tor darknet link collection</a>, by clicking on the entries in the navigation bar on the left.'); ?></p>
<p><?php echo _('You can download and/or contribute to my various open-source projects on <a href="https://github.com/DanWin/" target="_blank" rel="noopener noreferrer">GitHub</a>.'); ?></p>
<p><?php printf(_('If you like, what I\'ve built here, you can support me by donating via Monero: %1$s or Bitcoin: %2$s . More options available, just <a href="/contact.php">contact me</a>.'), '432Z3PTrRso52GHHpmPRpvLhecsnc7EFsVd2TzsCJaNmK4vivDxghRB5yVCj2nzCEGajeF3rBqJ43PcpxRnvZkMs49fufzD', 'bc1q8jcfxsmcz7lhk7g9urnzxpwhxsje2n2gz34cya'); ?></p>
</main>
</body></html>

Binary file not shown.

File diff suppressed because it is too large Load Diff

1773
locale/main-website.pot Normal file

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

34
new-domain.php Normal file
View File

@ -0,0 +1,34 @@
<?php
require_once('common.php');
global $language;
?>
<!DOCTYPE html><html lang="<?php echo $language; ?>"><head>
<title><?php echo _('Daniel - New domain'); ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="author" content="Daniel Winzen">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="<?php echo _('We moved to a brand new domain - migrate your accounts'); ?>">
<link rel="canonical" href="https://danwin1210.de/new-domain.php">
<?php alt_links(); ?>
</head><body>
<?php menu(_('New domain - DanWin1210.Me is now DanWin1210.De')); ?>
<h2><?php echo _('Why this sudden and drastic change?'); ?></h2>
<p><?php echo _('In mid-October 2021 I noticed that I was locked out of my registrar\'s control panel (Namecheap Inc.) for <q>suspected fraud, a chargeback or some similar violation of our terms of service</q>. After contacting their customer support multiple times, even after more than a year, all I have ever gotten back from them is that I will hear from them soon, as they need more time to investigate, and they appreciate my patience. I was refused renewing the domain or moving to a different registrar.'); ?></p>
<p><?php echo _('Given that I was unable to get a satisfying answer and the old domain was due to expire, I went ahead and bought the new domain danwin1210.de, to switch over to. danwin1210.me went down after expiry, but thankfully I was allowed to pay for extension by creating a new account and depositing the money for renewal there, so it was back up shortly afterwards.'); ?></p>
<p><?php echo _('After a year my domain was due expiry again, so I enquired if I could move to a different registrar now. They offered me again to pay via an alternate account, because: <q>Unfortunately, we need more time to investigate your issue.</q> A year should be more than enough time to solve whatever issue they might have with my account... This time I decided to let it expire for good, since almost everyone should have switched over to the new domain by now.'); ?></p>
<h2><?php echo _('What does it mean for users?'); ?></h2>
<p><?php echo _('You don\'t have an account and just browse the site? Not much will change, just the address in your browsers URL bar.'); ?></p>
<p><?php echo _('You are using the XMPP/E-Mail service? I\'m sorry, but this will likely cause you some struggles, as you now only have a few days left to migrate all your contacts/accounts to the new address. Any service where you registered with your email address will need to be updated to reflect the new domain. You might otherwise get locked out of your accounts, if they require you to e.g. click a link in your email for login. (Still recommended, but no longer necessary. See update above)'); ?></p>
<p><?php echo _('E-Mail users should also update their PGP key <a href="/mail/manage_account.php" target="_blank">in their account settings</a> to reflect the new domain and allow WKD clients to grab your key automatically.'); ?></p>
<p><?php echo _('You can still login with your .me user credentials, but the account is going to be .de. As long as the old domain is still online, you can also receive emails on the .me domain, while sending is switched over to .de.'); ?></p>
<p><?php echo _('XMPP users will most likely notice their account stopped working. Unfortunately there is no easy way to migrate accounts with prosody (the XMPP server), as there is with email. You will need to update your account settings to reflect the new domain in order to login and re-connect with all your buddies.'); ?></p>
<h2><?php echo _('Will the old address still work?'); ?></h2>
<p><?php echo _('After a very brief downtime, it was back online. Now, after a year, it\'s expired once more. I may be able to buy it again after NameCheap returns the domain to the registry.'); ?></p>
<h2><?php echo _('I have a question, something is broken with my account.'); ?></h2>
<p><?php echo _('Make sure you have switched all your settings to the new domain. It should work as before. Stil not working correctly? Feel free to <a href="/contact.php">contact me</a> for help.'); ?></p>
<h2><?php echo _('How do I know you are still the same person? This could be law enforcement taking over the servers.'); ?></h2>
<p><?php echo _('I have taken the opportunity to create a <a href="/pgp.txt" target="_blank">new PGP key</a> and signed it with my <a href="/old_pgp.txt" target="_blank">old PGP key</a>. This can be verified by running a command like this:'); ?></p>
<pre>curl -s https://danwin1210.de/pgp.txt | gpg --import && gpg --list-sigs 222FCC3F35C41077</pre>
<p><?php echo _('It should show proof that it is signed by my old key <code>F8B8CFC35FBDB40D</code>. I have also included signatures of previous keys on my old key, so you can even verify the key, in case you have an older key I was using before.'); ?></p>
</main>
</body></html>

135
privacy.php Normal file
View File

@ -0,0 +1,135 @@
<?php
require_once('common.php');
global $language;
?>
<!DOCTYPE html><html lang="<?php echo $language; ?>"><head>
<title><?php echo _('Daniel - Privacy policy'); ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="author" content="Daniel Winzen">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="<?php echo _('Privacy policy of Daniel Winzen'); ?>'">
<link rel="canonical" href="https://danwin1210.de/privacy.php">
<?php alt_links(); ?>
</head><body>
<?php menu(_('Privacy policy')); ?>
<p><?php echo _('Data protection is of a particularly high priority for Daniel Winzen. The use of the Internet pages of Daniel Winzen is possible without any indication of personal data. However, if a data subject wants to use services via my website, processing of personal data could become necessary. If the processing of personal data is necessary and there is no statutory basis for such processing, I generally obtain consent from the data subject.'); ?></p>
<p><?php echo _('The processing of personal data, such as the name, e-mail address, or telephone number of a data subject shall always be in line with the General Data Protection Regulation (GDPR), and in accordance with Germany\'s data protection regulations. By means of this data protection declaration, I would like to inform the general public of the nature, scope, and purpose of the personal data I collect, use and process. Furthermore, data subjects are informed, by means of this data protection declaration, of the rights to which they are entitled.'); ?></p>
<p><?php echo _('As the controller, Daniel Winzen has implemented numerous technical and organizational measures to ensure the most complete protection of personal data processed through this website. However, Internet-based data transmissions may in principle have security gaps, so absolute protection may not be guaranteed. For this reason, every data subject is free to transfer personal data to me via alternative means, e.g. by mail.'); ?></p>
<h2><?php echo _('1. Definitions'); ?></h2>
<p><?php echo _('The data protection declaration of Daniel Winzen is based on the terms used by the European legislator for the adoption of the General Data Protection Regulation (GDPR). My data protection declaration should be legible and understandable for the general public, as well as my users. To ensure this, I would like to first explain the terminology used.'); ?></p>
<p><?php echo _('In this data protection declaration, I use, among other things, the following terms:'); ?></p>
<h3><?php echo _('a) Personal data'); ?></h3>
<p><?php echo _('Personal data means any information relating to an identified or identifiable natural person ("data subject"). An identifiable natural person is one who can be identified, directly or indirectly, in particular by reference to an identifier such as a name, an identification number, location data, an online identifier or to one or more factors specific to the physical, physiological, genetic, mental, economic, cultural or social identity of that natural person.'); ?></p>
<h3><?php echo _('b) Data subject'); ?></h3>
<p><?php echo _('Data subject is any identified or identifiable natural person, whose personal data is processed by the controller responsible for the processing.'); ?></p>
<h3><?php echo _('c) Processing'); ?></h3>
<p><?php echo _('Processing is any operation or set of operations which is performed on personal data or on sets of personal data, whether by automated means, such as collection, recording, organisation, structuring, storage, adaptation or alteration, retrieval, consultation, use, disclosure by transmission, dissemination or otherwise making available, alignment or combination, restriction, erasure or destruction.'); ?></p>
<h3><?php echo _('d) Restriction of processing'); ?></h3>
<p><?php echo _('Restriction of processing is the marking of stored personal data with the aim of limiting their processing in the future.'); ?></p>
<h3><?php echo _('e) Profiling'); ?></h3>
<p><?php echo _('Profiling means any form of automated processing of personal data consisting of the use of personal data to evaluate certain personal aspects relating to a natural person, in particular to analyse or predict aspects concerning that natural person\'s performance at work, economic situation, health, personal preferences, interests, reliability, behaviour, location or movements.'); ?></p>
<h3><?php echo _('f) Controller or controller responsible for the processing'); ?></h3>
<p><?php echo _('Controller or controller responsible for the processing is the natural or legal person, public authority, agency or other body which, alone or jointly with others, determines the purposes and means of the processing of personal data; where the purposes and means of such processing are determined by Union or Member State law, the controller or the specific criteria for its nomination may be provided for by Union or Member State law.'); ?></p>
<h3><?php echo _('g) Processor'); ?></h3>
<p><?php echo _('Processor is a natural or legal person, public authority, agency or other body which processes personal data on behalf of the controller.'); ?></p>
<h3><?php echo _('h) Recipient'); ?></h3>
<p><?php echo _('Recipient is a natural or legal person, public authority, agency or another body, to which the personal data are disclosed, whether a third party or not. However, public authorities which may receive personal data in the framework of a particular inquiry in accordance with Union or Member State law shall not be regarded as recipients; the processing of those data by those public authorities shall be in compliance with the applicable data protection rules according to the purposes of the processing.'); ?></p>
<h3><?php echo _('i) Third party'); ?></h3>
<p><?php echo _('Third party is a natural or legal person, public authority, agency or body other than the data subject, controller, processor and persons who, under the direct authority of the controller or processor, are authorised to process personal data.'); ?></p>
<h3><?php echo _('j) Consent'); ?></h3>
<p><?php echo _('Consent of the data subject is any freely given, specific, informed and unambiguous indication of the data subject\'s wishes by which they, by a statement or by a clear affirmative action, signifies agreement to the processing of personal data relating to him or her.'); ?></p>
<h2><?php echo _('2. Name and Address of the controller'); ?></h2>
<p><?php echo _('Controller for the purposes of the General Data Protection Regulation (GDPR), other data protection laws applicable in Member states of the European Union and other provisions related to data protection is:'); ?></p>
<p>Daniel Winzen<br>
Steinkaulstraße 47<br>
52070 Aachen<br>
Germany<br>
Phone: +4917698819809<br>
Email: daniel@danwin1210.de<br>
Website: https://danwin1210.de</p>
<h2><?php echo _('3. Cookies'); ?></h2>
<p><?php echo _('The Internet pages of Daniel Winzen use cookies. Cookies are text files that are stored in a computer system via an Internet browser.'); ?></p>
<p><?php echo _('Many Internet sites and servers use cookies. Many cookies contain a so-called cookie ID. A cookie ID is a unique identifier of the cookie. It consists of a character string through which Internet pages and servers can be assigned to the specific Internet browser in which the cookie was stored. This allows visited Internet sites and servers to differentiate the individual browser of the data subject from other Internet browsers that contain other cookies. A specific Internet browser can be recognized and identified using the unique cookie ID.'); ?></p>
<p><?php echo _('Through the use of cookies, Daniel Winzen can provide the users of this website with more user-friendly services that would not be possible without the cookie setting.'); ?></p>
<p><?php echo _('By means of a cookie, the information and offers on my website can be optimized with the user in mind. Cookies allow me, as previously mentioned, to recognize my website users. The purpose of this recognition is to make it easier for users to utilize my website. An example for the use of a cookie is when you log in to the mail client, the cookie assures that you stay logged in with your account until closing your browser or logging out.'); ?></p>
<p><?php echo _('This site makes only use of technically necessary session cookies and does not use any form of tracking cookies.'); ?></p>
<p><?php echo _('The data subject may, at any time, prevent the setting of cookies through my website by means of a corresponding setting of the Internet browser used, and may thus permanently deny the setting of cookies. Furthermore, already set cookies may be deleted at any time via an Internet browser or other software programs. This is possible in all popular Internet browsers. If the data subject deactivates the setting of cookies in the Internet browser used, not all functions of my website may be entirely usable.'); ?></p>
<h2><?php echo _('4. Collection of general data and information'); ?></h2>
<p><?php echo _('The server of Daniel Winzen collects a series of general data and information when a data subject or automated system calls up the website or other provided services. This general data and information is stored in the server log files. Collected may be (1) the browser types and versions used, (2) the operating system used by the accessing system, (3) the website from which an accessing system reaches my website (so-called referrers), (4) the sub-websites, (5) the date and time of access to the Internet site / email transmission, (6) sender and recipient of an email, and (7) any other similar data and information that may be used in the event of attacks on my information technology systems.'); ?></p>
<p><?php echo _('When using these general data and information, Daniel Winzen does not draw any conclusions about the data subject. Rather, this information is needed to (1) deliver the content of my website and services correctly, (2) optimize my services, (3) ensure the long-term viability of my information technology systems and website technology. Therefore, I may analyze anonymously collected data and information statistically, with the aim of increasing the data protection and data security of my services, and to ensure an optimal level of protection for the personal data I process. The anonymous data of the server log files are stored separately from all personal data provided by a data subject for up to 48 hours and are then permanently deleted.'); ?></p>
<h2><?php echo _('5. Registration on my website'); ?></h2>
<p><?php echo _('The data subject has the possibility to register on the website of the controller with the indication of personal data. Which personal data are transmitted to the controller is determined by the respective input mask used for the registration. The personal data entered by the data subject are collected and stored exclusively for internal use by the controller, and for his own purposes. The controller may request transfer to one or more processors (e.g. an email server that a data subject wants to email) that also uses personal data for an internal purpose which is attributable to the controller.'); ?></p>
<p><?php echo _('By registering on the website of the controller, date and time of the registration are also stored. The storage of this data takes place against the background that this is the only way to prevent the misuse of my services, and, if necessary, to make it possible to investigate committed offenses. Insofar, the storage of this data is necessary to secure the controller. This data is not passed on to third parties unless there is a statutory obligation to pass on the data, or if the transfer serves the aim of criminal prosecution.'); ?></p>
<p><?php echo _('The registration of the data subject, with the voluntary indication of personal data, is intended to enable the controller to offer the data subject contents or services that may only be offered to registered users due to the nature of the matter in question. Registered persons are free to change the personal data specified during the registration at any time, or to have them completely deleted from the data stock of the controller.'); ?></p>
<p><?php echo _('The data controller shall, at any time, provide information upon request to each data subject as to what personal data are stored about the data subject. In addition, the data controller shall correct or erase personal data at the request or indication of the data subject, insofar as there are no statutory storage obligations.'); ?></p>
<h2><?php echo _('6. Contact possibility via the website'); ?></h2>
<p><?php echo _('The website of Daniel Winzen contains information that enables a quick electronic contact to me, as well as direct communication with me, which also includes a general address of the so-called electronic mail (e-mail address). If a data subject contacts the controller by e-mail or via a contact form, the personal data transmitted by the data subject are automatically stored. Such personal data transmitted on a voluntary basis by a data subject to the data controller are stored for the purpose of processing or contacting the data subject. There is no transfer of this personal data to third parties.'); ?></p>
<h2><?php echo _('7. Routine erasure and blocking of personal data'); ?></h2>
<p><?php echo _('The data controller shall process and store the personal data of the data subject only for the period necessary to achieve the purpose of storage, or as far as this is granted by the European legislator or other legislators in laws or regulations to which the controller is subject to.'); ?></p>
<p><?php echo _('If the storage purpose is not applicable, or if a storage period prescribed by the European legislator or another competent legislator expires, the personal data are routinely erased in accordance with legal requirements.'); ?></p>
<h2><?php echo _('8. Rights of the data subject'); ?></h2>
<h3><?php echo _('a) Right of confirmation'); ?></h3>
<p><?php echo _('Each data subject shall have the right granted by the European legislator to obtain from the controller the confirmation whether personal data concerning them are being processed. If a data subject wishes to avail themselves of this right of confirmation, they may, at any time, contact the controller.'); ?></p>
<h3><?php echo _('b) Right of access'); ?></h3>
<p><?php echo _('Each data subject shall have the right granted by the European legislator to obtain from the controller free information about their personal data stored at any time and a copy of this information. Furthermore, the European directives and regulations grant the data subject access to the following information:'); ?></p>
<ul>
<li><?php echo _('the purposes of the processing'); ?></li>
<li><?php echo _('the categories of personal data concerned'); ?></li>
<li><?php echo _('the recipients or categories of recipients to whom the personal data have been or will be disclosed, in particular recipients in third countries or international organisations'); ?></li>
<li><?php echo _('where possible, the envisaged period for which the personal data will be stored, or, if not possible, the criteria used to determine that period'); ?></li>
<li><?php echo _('the existence of the right to request from the controller rectification or erasure of personal data, or restriction of processing of personal data concerning the data subject, or to object to such processing'); ?></li>
<li><?php echo _('the existence of the right to lodge a complaint with a supervisory authority'); ?></li>
<li><?php echo _('where the personal data are not collected from the data subject, any available information as to their source'); ?></li>
<li><?php echo _('the existence of automated decision-making, including profiling, referred to in Article 22(1) and (4) of the GDPR and, at least in those cases, meaningful information about the logic involved, as well as the significance and envisaged consequences of such processing for the data subject.'); ?></li>
</ul>
<p><?php echo _('Furthermore, the data subject shall have a right to obtain information whether personal data are transferred to a third country or to an international organisation. Where this is the case, the data subject shall have the right to be informed of the appropriate safeguards relating to the transfer.'); ?></p>
<p><?php echo _('If a data subject wishes to avail himself of this right of access, they may, at any time, contact the controller.'); ?></p>
<h3><?php echo _('c) Right to rectification'); ?></h3>
<p><?php echo _('Each data subject shall have the right granted by the European legislator to obtain from the controller without undue delay the rectification of inaccurate personal data concerning them. Taking into account the purposes of the processing, the data subject shall have the right to have incomplete personal data completed, including by means of providing a supplementary statement.'); ?></p>
<p><?php echo _('If a data subject wishes to exercise this right to rectification, they may, at any time, contact the controller.'); ?></p>
<h3><?php echo _('d) Right to erasure (Right to be forgotten)'); ?></h3>
<p><?php echo _('Each data subject shall have the right granted by the European legislator to obtain from the controller the erasure of personal data concerning him or her without undue delay, and the controller shall have the obligation to erase personal data without undue delay where one of the following grounds applies, as long as the processing is not necessary:'); ?></p>
<ul>
<li><?php echo _('The personal data are no longer necessary in relation to the purposes for which they were collected or otherwise processed.'); ?></li>
<li><?php echo _('The data subject withdraws consent to which the processing is based according to point (a) of Article 6(1) of the GDPR, or point (a) of Article 9(2) of the GDPR, and where there is no other legal ground for the processing.'); ?></li>
<li><?php echo _('The data subject objects to the processing pursuant to Article 21(1) of the GDPR and there are no overriding legitimate grounds for the processing, or the data subject objects to the processing pursuant to Article 21(2) of the GDPR.'); ?></li>
<li><?php echo _('The personal data have been unlawfully processed.'); ?></li>
<li><?php echo _('The personal data must be erased for compliance with a legal obligation in Union or Member State law to which the controller is subject.'); ?></li>
<li><?php echo _('The personal data have been collected in relation to the offer of information society services referred to in Article 8(1) of the GDPR.'); ?></li>
</ul>
<p><?php echo _('If one of the aforementioned reasons applies, and a data subject wishes to request the erasure of personal data stored by Daniel Winzen, they may, at any time, contact the controller. Daniel Winzen shall promptly ensure that the erasure request is complied with immediately.'); ?></p>
<p><?php echo _('Where the controller has made personal data public and is obliged pursuant to Article 17(1) to erase the personal data, the controller, taking account of available technology and the cost of implementation, shall take reasonable steps, including technical measures, to inform other controllers processing the personal data that the data subject has requested erasure by such controllers of any links to, or copy or replication of, those personal data, as far as processing is not required. Daniel Winzen will arrange the necessary measures in individual cases.'); ?></p>
<h3><?php echo _('e) Right of restriction of processing'); ?></h3>
<p><?php echo _('Each data subject shall have the right granted by the European legislator to obtain from the controller restriction of processing where one of the following applies:'); ?></p>
<ul>
<li><?php echo _('The accuracy of the personal data is contested by the data subject, for a period enabling the controller to verify the accuracy of the personal data.'); ?></li>
<li><?php echo _('The processing is unlawful and the data subject opposes the erasure of the personal data and requests instead the restriction of their use instead.'); ?></li>
<li><?php echo _('The controller no longer needs the personal data for the purposes of the processing, but they are required by the data subject for the establishment, exercise or defence of legal claims.'); ?></li>
<li><?php echo _('The data subject has objected to processing pursuant to Article 21(1) of the GDPR pending the verification whether the legitimate grounds of the controller override those of the data subject.'); ?></li>
</ul>
<p><?php echo _('If one of the aforementioned conditions is met, and a data subject wishes to request the restriction of the processing of personal data stored by Daniel Winzen, they may at any time contact the controller. Daniel Winzen will arrange the restriction of the processing.'); ?></p>
<h3><?php echo _('f) Right to data portability'); ?></h3>
<p><?php echo _('Each data subject shall have the right granted by the European legislator, to receive the personal data concerning them, which was provided to a controller, in a structured, commonly used and machine-readable format. They shall have the right to transmit those data to another controller without hindrance from the controller to which the personal data have been provided, as long as the processing is based on consent pursuant to point (a) of Article 6(1) of the GDPR or point (a) of Article 9(2) of the GDPR, or on a contract pursuant to point (b) of Article 6(1) of the GDPR, and the processing is carried out by automated means, as long as the processing is not necessary for the performance of a task carried out in the public interest or in the exercise of official authority vested in the controller.'); ?></p>
<p><?php echo _('Furthermore, in exercising their right to data portability pursuant to Article 20(1) of the GDPR, the data subject shall have the right to have personal data transmitted directly from one controller to another, where technically feasible and when doing so does not adversely affect the rights and freedoms of others.'); ?></p>
<p><?php echo _('In order to assert the right to data portability, the data subject may at any time contact Daniel Winzen.'); ?></p>
<h3><?php echo _('g) Right to object'); ?></h3>
<p><?php echo _('Each data subject shall have the right granted by the European legislator to object, on grounds relating to his or her particular situation, at any time, to processing of personal data concerning them, which is based on point (e) or (f) of Article 6(1) of the GDPR. This also applies to profiling based on these provisions.'); ?></p>
<p><?php echo _('Daniel Winzen shall no longer process the personal data in the event of the objection, unless he can demonstrate compelling legitimate grounds for the processing which override the interests, rights and freedoms of the data subject, or for the establishment, exercise or defence of legal claims.'); ?></p>
<p><?php echo _('In addition, the data subject has the right, on grounds relating to their particular situation, to object to processing of personal data concerning them by Daniel Winzen for scientific or historical research purposes, or for statistical purposes pursuant to Article 89(1) of the GDPR, unless the processing is necessary for the performance of a task carried out for reasons of public interest.'); ?></p>
<p><?php echo _('In order to exercise the right to object, the data subject may contact Daniel Winzen. In addition, the data subject is free in the context of the use of information society services, and notwithstanding Directive 2002/58/EC, to use their right to object by automated means using technical specifications.'); ?></p>
<h3><?php echo _('h) Right to withdraw data protection consent'); ?></h3>
<p><?php echo _('Each data subject shall have the right granted by the European legislator to withdraw their consent to processing of their personal data at any time.'); ?></p>
<p><?php echo _('If the data subject wishes to exercise the right to withdraw the consent, they may, at any time, contact Daniel Winzen.'); ?></p>
<h2><?php echo _('9. Legal basis for the processing'); ?></h2>
<p><?php echo _('Art. 6(1) lit. a GDPR serves as the legal basis for processing operations for which I obtain consent for a specific processing purpose. If the processing of personal data is necessary for the performance of a contract to which the data subject is party, as is the case, for example, when processing operations are necessary to provide services, the processing is based on Article 6(1) lit. b GDPR. The same applies to such processing operations which are necessary for carrying out pre-contractual measures, for example in the case of inquiries concerning my services. If I am subject to a legal obligation by which processing of personal data is required, such as for the fulfillment of tax obligations, the processing is based on Art. 6(1) lit. c GDPR.'); ?>
<?php echo _('Finally, processing operations could be based on Article 6(1) lit. f GDPR. This legal basis is used for processing operations which are not covered by any of the above-mentioned legal grounds, if processing is necessary for the purposes of the legitimate interests pursued by me or by a third party, except where such interests are overridden by the interests or fundamental rights and freedoms of the data subject which require protection of personal data. Such processing operations are particularly permissible because they have been specifically mentioned by the European legislator. He considered that a legitimate interest could be assumed if the data subject is a client of the controller (Recital 47 Sentence 2 GDPR).'); ?></p>
<h2><?php echo _('10. The legitimate interests pursued by the controller or by a third party'); ?></h2>
<p><?php echo _('Where the processing of personal data is based on Article 6(1) lit. f GDPR my legitimate interest is to carry out my business in favor of the well-being of all my data subjects and myself.'); ?></p>
<h2><?php echo _('11. Period for which the personal data will be stored'); ?></h2>
<p><?php echo _('The criteria used to determine the period of storage of personal data is the respective statutory retention period. After expiration of that period, the corresponding data is routinely deleted, as long as it is no longer necessary for the fulfillment of the contract or the initiation of a contract.'); ?></p>
<h2><?php echo _('12. Provision of personal data as statutory or contractual requirement; Requirement necessary to enter into a contract; Obligation of the data subject to provide the personal data; possible consequences of failure to provide such data'); ?></h2>
<p><?php echo _('I clarify that the provision of personal data is partly required by law (e.g. tax regulations) or can also result from contractual provisions (e.g. information on the contractual partner).'); ?></p>
<h2><?php echo _('13. Existence of automated decision-making'); ?></h2>
<p><?php echo _('I do not use automatic decision-making or profiling.'); ?></p>
</main>
</body></html>

2
robots.txt Normal file
View File

@ -0,0 +1,2 @@
User-agent: *
Allow: *

21
tutorials/index.php Normal file
View File

@ -0,0 +1,21 @@
<?php
require_once('../common.php');
global $language;
?>
<!DOCTYPE html><html lang="<?php echo $language; ?>"><head>
<title><?php echo _('Daniel - Tutorials'); ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="author" content="Daniel Winzen">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="<?php echo _('Various tutorials provided by Daniel Winzen'); ?>">
<link rel="canonical" href="https://danwin1210.de/tutorials/">
<?php alt_links(); ?>
</head><body>
<?php menu(_('Tutorials')); ?>
<p><?php echo _('Here I upload tutorials that have been asked for a number of times. If you have suggestions on how to improve a tutorial or want me to make one another one, you can <a href="/contact.php">contact me here</a>.'); ?></p>
<div class="table">
<div class="headerrow"><div class="cell"><?php echo _('Name'); ?></div><div class="cell"><?php echo _('Short description'); ?></div></div>
<div class="row"><div class="cell"><a href="torify-ftp/"><?php echo _('Torify FTP clients'); ?></a></div><div class="cell"><?php echo _('This tutorial will show you how to torify FTP clients.'); ?></div></div>
</div>
</main>
</body></html>

BIN
tutorials/torify-ftp/1.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

BIN
tutorials/torify-ftp/1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

BIN
tutorials/torify-ftp/2.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

BIN
tutorials/torify-ftp/2.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

BIN
tutorials/torify-ftp/3.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

BIN
tutorials/torify-ftp/3.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
tutorials/torify-ftp/4.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

BIN
tutorials/torify-ftp/5.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

View File

@ -0,0 +1,75 @@
<?php
require_once('../../common.php');
global $language;
?>
<!DOCTYPE html><html lang="<?php echo $language; ?>"><head>
<title><?php echo _('Tutorials - Torify FTP clients'); ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="author" content="Daniel Winzen">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="<?php echo _('This tutorial will show you how to torify FTP clients in the example of FileZilla and WinSCP.'); ?>">
<link rel="canonical" href="https://danwin1210.de/tutorials/torify-ftp/">
<?php alt_links(); ?>
<style>img{max-width:100%}</style>
</head><body>
<?php menu(_('Tutorials - Torify FTP clients')); ?>
<p><?php echo _('This tutorial will show you how to torify FTP clients in the example of <a href="#filezilla">FileZilla</a> and <a href="#winscp">WinSCP</a>.'); ?></p>
<p><?php echo _('Let\'s assume you have created an account on my former Hosting service and you want to upload your files. To do that, you connect with the detials given in your dashboard. Clearnet works out of the box, but is not torified. To connect to the hidden service, you need to make a few changes to the configuration.'); ?></p>
<picture>
<source srcset="1.gif.webp" type="image/webp">
<img loading="lazy" src="1.gif" alt="<?php echo _('Hosting dashboard'); ?>">
</picture>
<h2 id="filezilla"><?php echo _('1. FileZilla'); ?></h2>
<p><?php echo _('If you haven\'t installed FileZilla yet, you can <a href="https://filezilla-project.org/download.php?type=client" target="_blank" rel="noopener noreferrer">download FileZilla here</a>.'); ?></p>
<p><?php echo _('Go to Generic Proxy settings and change the type to SOCKS5, host to localhost and Port to 9050 (if you run Tor as daemon) or 9150 (if you run TorBrowser).'); ?></p>
<a href="2.gif" target="_blank">
<picture>
<source srcset="2.1.gif.avif" type="image/avif">
<source srcset="2.1.gif.webp" type="image/webp">
<img loading="lazy" src="2.1.gif" alt="<?php echo _('FileZilla settings'); ?>">
</picture>
</a>
<a href="3.gif" target="_blank">
<picture>
<source srcset="3.1.gif.avif" type="image/avif">
<source srcset="3.1.gif.webp" type="image/webp">
<img loading="lazy" src="3.1.gif" alt="<?php echo _('FileZilla Generic Proxy settings'); ?>">
</picture>
</a>
<p><?php echo _('If you have changed your proxy settings and get the following error: "ECONNREFUSED - Connection refused by server" that likely means you have configured your proxy incorrectly. Check if everything is set correctly, Tor is running and if you still have the issue, switch the Port between 9050 and 9150. This is what\'s causing most connection issues people have.'); ?></p>
<picture>
<source srcset="4.gif.webp" type="image/webp">
<source srcset="4.gif.avif" type="image/avif">
<img loading="lazy" src="4.gif" alt="<?php echo _('FileZilla connection error'); ?>">
</picture>
<p><?php echo _('Once you have configured everything correctly, you should be able to successfully connect and start uploading files.'); ?></p>
<a href="5.gif" target="_blank">
<picture>
<source srcset="5.1.gif.avif" type="image/avif">
<source srcset="5.1.gif.webp" type="image/webp">
<img loading="lazy" src="5.1.gif" alt="<?php echo _('FileZilla success'); ?>">
</picture>
</a>
<br>
<h2 id="winscp"><?php echo _('2. WinSCP'); ?></h2>
<p><?php echo _('If you haven\'t installed WinSCP yet, you can <a href="https://winscp.net/eng/download.php" target="_blank" rel="noopener noreferrer">download WinSCP here</a>.'); ?></p>
<p><?php echo _('When started, enter your connection details.'); ?></p>
<picture>
<source srcset="1.jpg.webp" type="image/webp">
<source srcset="1.jpg.avif" type="image/avif">
<img loading="lazy" src="1.jpg" alt="<?php echo _('Connection details'); ?>">
</picture>
<p><?php echo _('Click on the Advanced... button and under Connection, change timeout to 50 as Tor can be slow at times.'); ?></p>
<picture>
<source srcset="2.jpg.webp" type="image/webp">
<source srcset="2.jpg.avif" type="image/avif">
<img loading="lazy" src="2.jpg" alt="<?php echo _('Connection optimizations'); ?>">
</picture>
<p><?php echo _('Now switch to the Proxy tab and change the type to SOCKS5, host to 127.0.0.1 and Port to 9050 (if your run Tor as daemon) or 9150 (if you run TorBrowser) and set "Do DNS name lookup at proxy end" to yes.'); ?></p>
<picture>
<source srcset="3.jpg.webp" type="image/webp">
<source srcset="3.jpg.avif" type="image/avif">
<img loading="lazy" src="3.jpg" alt="<?php echo _('Proxy configuration'); ?>">
</picture>
</main>
</body></html>

3
update-translation.sh Executable file
View File

@ -0,0 +1,3 @@
#!/bin/bash
xgettext -o locale/main-website.pot `find . -iname '*.php'`
for translation in `find locale -iname '*.po'`; do msgmerge -U "$translation" locale/main-website.pot; msgfmt -o ${translation:0:-2}mo "$translation"; done