added a privacy policy

This commit is contained in:
Ellpeck 2020-04-02 21:54:20 +02:00
parent 14b818eb94
commit 0656abd0cb
11 changed files with 152 additions and 210 deletions

View File

@ -13,6 +13,7 @@ RewriteRule ^actaddlicense/?$ "https://github.com/Ellpeck/ActuallyAdditions/blob
RewriteRule ^actadd/?$ "https://minecraft.curseforge.com/projects/actually-additions" [R=301,L]
RewriteRule ^projects/?$ "https://ellpeck.de/#projects" [NE,R=301,L]
RewriteRule ^impressum/?$ "https://ellpeck.de/#impressum" [NE,R=301,L]
RewriteRule ^privacy/?$ "https://ellpeck.de/#privacy" [NE,R=301,L]
RewriteRule ^mc/?$ "https://ellpeck.de/minecraft-stuff" [R=301,L]
RewriteRule ^minecraft-stuff/?$ "https://ellpeck.de/projects" [R=301,L]
RewriteRule ^yt/?$ "https://www.youtube.com/c/ellpeck" [R=301,L]

12
Jenkinsfile vendored
View File

@ -10,6 +10,16 @@ pipeline {
git pull'''
}
}
stage('Node') {
when {
branch 'master'
}
steps {
sh '''cd /var/www/ellpeck/node
node blog.js
node sitemap.js
node rss.js'''
}
}
}
}

View File

@ -49,6 +49,7 @@ function populateManual(lang) {
sidebar.append("<hr>");
sidebar.append(`<a href="https://ellpeck.de">Main Site</a>`)
sidebar.append(`<a href="https://ellpeck.de/impressum">Impressum</a>`);
sidebar.append(`<a href="https://ellpeck.de/privacy">Privacy</a>`);
sidebar.append(`<a href="https://github.com/Ellpeck/Web">&copy; Ellpeck</a>`);
sidebar.append("<hr>");

View File

@ -82,6 +82,7 @@
<script src="scripts/cookies.js"></script>
<div id="main">
<!-- NOBLOG -->
<!-- Home -->
<div class="jumbotron">
<div class="container">
@ -166,12 +167,13 @@
</div>
<script src="scripts/blog.js"></script>
</div>
<!-- /NOBLOG -->
</div>
</div>
<!-- Footer -->
<div class="footer rounded-top">
<span class="text-muted"><a href="https://github.com/Ellpeck/Web">&copy; 2018-2019 Ellpeck</a> &ndash; <a id="impressum-button" href="#impressum">Impressum</a></span>
<span class="text-muted"><a href="https://github.com/Ellpeck/Web">&copy; 2018-2019 Ellpeck</a> &ndash; <a href="#impressum">Impressum</a> &ndash; <a href="#privacy">Privacy</a></span>
<div class="quote">
<span id="quote-text"></span>
<script src="scripts/quote.js"></script>
@ -179,6 +181,7 @@
</div>
</div>
<!-- NOBLOG -->
<!-- Commissions -->
<div class="modal fade" id="commissions-modal" tabindex="-1">
<div class="modal-dialog modal-lg">
@ -210,6 +213,7 @@
</div>
</div>
</div>
<!-- /NOBLOG -->
<!-- Impressum -->
<div class="modal fade" id="impressum-modal" tabindex="-1">
@ -220,69 +224,46 @@
<button type="button" class="close" data-dismiss="modal">&times;</button>
</div>
<div class="modal-body">
<span class="text-muted">If you don't know what this is, read up on it <a href="https://en.wikipedia.org/wiki/Impressum">here</a> or just ignore it.</span>
<div class="impressum-data">
<p>
Julian Schubert
<br>Kastanienweg 27
<br>52074 Aachen
<br>Telefon: 0241 45093753
</p>
<p>
Telefon: 0241 45093753
<br>E-Mail: me@ellpeck.de
</div>
<p>
Verantwortlich für den Inhalt (gem. § 55 Abs. 2 RStV):
<br>Siehe oben
</p>
<p>Die obenstehende Person ist ebenfalls verantwortlich für den Inhalt (gem. § 55 Abs. 2 RStV).</p>
</div>
</div>
</div>
</div>
<h3>Disclaimer rechtliche Hinweise</h3>
<h4>§ 1 Haftungsbeschränkung</h4>
<!-- Privacy -->
<div class="modal fade" id="privacy-modal" tabindex="-1">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Privacy</h5>
<button type="button" class="close" data-dismiss="modal">&times;</button>
</div>
<div class="modal-body">
<p>This site uses cookies to store information about your browsing activity.</p>
<p>Ellpeck.de stores the following information:</p>
<ul>
<li>A cookie named <code>dark</code> with the value <code>true</code> or <code>false</code> that stores if you have dark mode enabled</li>
<li>A cookie named <code>notification</code> with the value <code>true</code> or <code>false</code> that stores if you have already closed the cookie notification that displays at the top of the page</li>
</ul>
<p>Due to widgets and embeds, additional information will be stored by other sites. Please refer to those sites' privacy policies for more information:</p>
<ul>
<li>Google uses cookies to serve ads based on a user's prior visits to this website. You may opt out of personal advertising by visiting <a href="https://www.google.com/settings/ads">Ad Settings</a>. For more information, see <a href="http://www.google.com/policies/privacy/partners/">how Google uses data when you use its partners' sites or apps</a>.</li>
<li>Discord uses cookies for its widget embed. For more information, see <a href="https://discordapp.com/privacy">their privacy policy</a>.</li>
<li>Twitter uses cookies for its tweet embeds. For more information, see <a href="https://twitter.com/en/privacy">their privacy policy</a>.</li>
</ul>
<p>
Die Inhalte dieser Website werden mit größtmöglicher Sorgfalt erstellt. Der Anbieter übernimmt jedoch keine Gewähr für die Richtigkeit, Vollständigkeit und Aktualität der bereitgestellten Inhalte. Die Nutzung der Inhalte der Website erfolgt auf eigene
Gefahr des Nutzers. Namentlich gekennzeichnete Beiträge geben die Meinung des jeweiligen Autors und nicht immer die Meinung des Anbieters wieder. Mit der reinen Nutzung der Website des Anbieters kommt keinerlei Vertragsverhältnis
zwischen dem Nutzer und dem Anbieter zustande.
Transparency is very important to us, and as such, if you have any doubts about the security of this website, you can view its source code <a href="https://github.com/Ellpeck/Web">on GitHub</a>.
<br>Keep in mind that you can also review or delete stored cookies for any site at any time in your browser's settings.
</p>
<h4>§ 2 Externe Links</h4>
<p>
Diese Website enthält Verknüpfungen zu Websites Dritter (“externe Links”). Diese Websites unterliegen der Haftung der jeweiligen Betreiber. Der Anbieter hat bei der erstmaligen Verknüpfung der externen Links die fremden Inhalte daraufhin überprüft, ob
etwaige Rechtsverstöße bestehen. Zu dem Zeitpunkt waren keine Rechtsverstöße ersichtlich. Der Anbieter hat keinerlei Einfluss auf die aktuelle und zukünftige Gestaltung und auf die Inhalte der verknüpften Seiten. Das Setzen von
externen Links bedeutet nicht, dass sich der Anbieter die hinter dem Verweis oder Link liegenden Inhalte zu Eigen macht. Eine ständige Kontrolle der externen Links ist für den Anbieter ohne konkrete Hinweise auf Rechtsverstöße
nicht zumutbar. Bei Kenntnis von Rechtsverstößen werden jedoch derartige externe Links unverzüglich gelöscht.
</p>
<h4>§ 3 Urheber- und Leistungsschutzrechte</h4>
<p>
Die auf dieser Website veröffentlichten Inhalte unterliegen dem deutschen Urheber- und Leistungsschutzrecht. Jede vom deutschen Urheber- und Leistungsschutzrecht nicht zugelassene Verwertung bedarf der vorherigen schriftlichen Zustimmung des Anbieters
oder jeweiligen Rechteinhabers. Dies gilt insbesondere für Vervielfältigung, Bearbeitung, Übersetzung, Einspeicherung, Verarbeitung bzw. Wiedergabe von Inhalten in Datenbanken oder anderen elektronischen Medien und Systemen. Inhalte
und Rechte Dritter sind dabei als solche gekennzeichnet. Die unerlaubte Vervielfältigung oder Weitergabe einzelner Inhalte oder kompletter Seiten ist nicht gestattet und strafbar. Lediglich die Herstellung von Kopien und Downloads
für den persönlichen, privaten und nicht kommerziellen Gebrauch ist erlaubt.
<br>Die Darstellung dieser Website in fremden Frames ist nur mit schriftlicher Erlaubnis zulässig.
</p>
<h4>§ 4 Besondere Nutzungsbedingungen</h4>
<p>
Soweit besondere Bedingungen für einzelne Nutzungen dieser Website von den vorgenannten Paragraphen abweichen, wird an entsprechender Stelle ausdrücklich darauf hingewiesen. In diesem Falle gelten im jeweiligen Einzelfall die besonderen Nutzungsbedingungen.
</p>
<h3>Datenschutzerklärung</h3>
<h4>Datenschutz</h4>
<p>
Nachfolgend möchten wir Sie über unsere Datenschutzerklärung informieren. Sie finden hier Informationen über die Erhebung und Verwendung persönlicher Daten bei der Nutzung unserer Webseite. Wir beachten dabei das für Deutschland geltende Datenschutzrecht.
Sie können diese Erklärung jederzeit auf unserer Webseite abrufen.
<br>Wir weisen ausdrücklich darauf hin, dass die Datenübertragung im Internet (z.B. bei der Kommunikation per E-Mail) Sicherheitslücken aufweisen und nicht lückenlos vor dem Zugriff durch Dritte geschützt werden kann.
<br>Die Verwendung der Kontaktdaten unseres Impressums zur gewerblichen Werbung ist ausdrücklich nicht erwünscht, es sei denn wir hatten zuvor unsere schriftliche Einwilligung erteilt oder es besteht bereits eine Geschäftsbeziehung.
Der Anbieter und alle auf dieser Website genannten Personen widersprechen hiermit jeder kommerziellen Verwendung und Weitergabe ihrer Daten.
</p>
<h4>Personenbezogene Daten</h4>
<p>
Sie können unsere Webseite ohne Angabe personenbezogener Daten besuchen. Soweit auf unseren Seiten personenbezogene Daten (wie Name, Anschrift oder E-Mail Adresse) erhoben werden, erfolgt dies, soweit möglich, auf freiwilliger Basis. Diese Daten werden
ohne Ihre ausdrückliche Zustimmung nicht an Dritte weitergegeben. Sofern zwischen Ihnen und uns ein Vertragsverhältnis begründet, inhaltlich ausgestaltet oder geändert werden soll oder Sie an uns eine Anfrage stellen, erheben und
verwenden wir personenbezogene Daten von Ihnen, soweit dies zu diesen Zwecken erforderlich ist (Bestandsdaten). Wir erheben, verarbeiten und nutzen personenbezogene Daten soweit dies erforderlich ist, um Ihnen die Inanspruchnahme
des Webangebots zu ermöglichen (Nutzungsdaten). Sämtliche personenbezogenen Daten werden nur solange gespeichert wie dies für den geannten Zweck (Bearbeitung Ihrer Anfrage oder Abwicklung eines Vertrags) erforderlich ist. Hierbei
werden steuer- und handelsrechtliche Aufbewahrungsfristen berücksichtigt. Auf Anordnung der zuständigen Stellen dürfen wir im Einzelfall Auskunft über diese Daten (Bestandsdaten) erteilen, soweit dies für Zwecke der Strafverfolgung,
zur Gefahrenabwehr, zur Erfüllung der gesetzlichen Aufgaben der Verfassungsschutzbehörden oder des Militärischen Abschirmdienstes oder zur Durchsetzung der Rechte am geistigen Eigentum erforderlich ist.
</p>
<h4>Auskunftsrecht</h4>
<p>
Sie haben das jederzeitige Recht, sich unentgeltlich und unverzüglich über die zu Ihrer Person erhobenen Daten zu erkundigen. Sie haben das jederzeitige Recht, Ihre Zustimmung zur Verwendung Ihrer angegeben persönlichen Daten mit Wirkung für die Zukunft
zu widerrufen. Zur Auskunftserteilung wenden Sie sich bitte an den Anbieter unter den Kontaktdaten im Impressum.
</p>
<em>Quelle: Impressum Muster von impressum-recht.de</em>
</div>
</div>
</div>

View File

@ -4,66 +4,50 @@ const {
const fs = require("fs");
const converter = require("./showdown")(2);
module.exports = function () {
let folder = __dirname + "/../";
createBlogPages(folder);
let folder = __dirname + "/../";
console.log("Refreshing blog sub-sites...");
fs.watchFile(folder + "blog/posts.json", function (curr, prev) {
if (curr.mtime == prev.mtime)
return;
createBlogPages(folder);
fs.readFile(folder + "index.html", function (_, data) {
// this can probably be done a lot easier but regex is hard ok
var template = data.toString().replace(/<!-- ?NOBLOG ?-->([^](?!<!-- ?NOBLOG ?-->))*<!-- ?\/NOBLOG ?-->/g, "");
fs.readFile(folder + "blog/posts.json", function (_, data) {
let json = JSON.parse(data);
for (let i = 0; i < json.length; i++) {
let post = json[i];
fs.readFile(folder + "blog/" + post.id + ".md", function (_, content) {
let dom = new JSDOM(template);
var document = dom.window.document;
document.title += " - " + post.name;
document.querySelector('meta[property="og:title"]').setAttribute("content", post.name);
document.querySelector('meta[name="description"]').setAttribute("content", post.summary);
document.querySelector('meta[property="og:description"]').setAttribute("content", post.summary);
var nav = "";
nav += '<a class="nav-item nav-link" href="/#blog">Back to Main Page</a>';
if (i > 0)
nav += '<a class="nav-item nav-link" href="/blog-' + json[i - 1].id + '">Previous Post</a>';
if (i < json.length - 1)
nav += '<a class="nav-item nav-link" href="/blog-' + json[i + 1].id + '">Next Post</a>';
document.getElementById("nav-items").innerHTML = nav;
var c = "";
c += '<div class="list-display rounded">';
c += '<div class="blog-isolated">'
c += '<h1>' + post.name + '</h1>';
c += '<div id="blog-post-' + post.id + '">'
c += converter.makeHtml(content.toString());
c += '</div>';
c += '<span class="text-muted project-status blog-isolated-status">' + post.date + "</span>";
var discussLink = post.discuss;
if (discussLink)
c += '<a href="' + discussLink + '" class="blog-discuss" id="blog-discuss-' + post.id + '">Discuss this post</a>'
c += '</div></div>';
document.getElementById("main").innerHTML = c;
let html = dom.serialize();
fs.writeFile(folder + "blog-" + post.id + ".html", html, function (_, _) {});
});
}
});
}
function createBlogPages(folder) {
console.log("Refreshing blog sub-sites...");
fs.readFile(folder + "index.html", function (_, data) {
// set up the template
let templateDom = new JSDOM(data);
var templateDoc = templateDom.window.document;
templateDoc.getElementById("main").innerHTML = "";
let template = templateDom.serialize();
fs.readFile(folder + "blog/posts.json", function (_, data) {
let json = JSON.parse(data);
for (let i = 0; i < json.length; i++) {
let post = json[i];
fs.readFile(folder + "blog/" + post.id + ".md", function (_, content) {
let dom = new JSDOM(template);
var document = dom.window.document;
document.title += " - " + post.name;
document.querySelector('meta[property="og:title"]').setAttribute("content", post.name);
document.querySelector('meta[name="description"]').setAttribute("content", post.summary);
document.querySelector('meta[property="og:description"]').setAttribute("content", post.summary);
var nav = "";
nav += '<a class="nav-item nav-link" href="/#blog">Back to Main Page</a>';
if (i > 0)
nav += '<a class="nav-item nav-link" href="/blog-' + json[i - 1].id + '">Previous Post</a>';
if (i < json.length - 1)
nav += '<a class="nav-item nav-link" href="/blog-' + json[i + 1].id + '">Next Post</a>';
document.getElementById("nav-items").innerHTML = nav;
var c = "";
c += '<div class="list-display rounded">';
c += '<div class="blog-isolated">'
c += '<h1>' + post.name + '</h1>';
c += '<div id="blog-post-' + post.id + '">'
c += converter.makeHtml(content.toString());
c += '</div>';
c += '<span class="text-muted project-status blog-isolated-status">' + post.date + "</span>";
var discussLink = post.discuss;
if (discussLink)
c += '<a href="' + discussLink + '" class="blog-discuss" id="blog-discuss-' + post.id + '">Discuss this post</a>'
c += '</div></div>';
document.getElementById("main").innerHTML = c;
let html = dom.serialize();
fs.writeFile(folder + "blog-" + post.id + ".html", html, function (_, _) {});
});
}
});
});
}
});

View File

@ -4,25 +4,13 @@ const {
const fs = require("fs");
const converter = require("./showdown")(1);
module.exports = function () {
let folder = __dirname + "/../";
createFeeds(folder);
fs.watchFile(folder + "blog/posts.json", function (curr, prev) {
if (curr.mtime == prev.mtime)
return;
createFeeds(folder);
});
}
function createFeeds(folder) {
console.log("Refreshing feeds...");
createFeed(function (feed) {
fs.writeFile(folder + "feed.json", feed.json1(), function (_, _) {});
fs.writeFile(folder + "rss.xml", feed.rss2(), function (_, _) {});
fs.writeFile(folder + "atom.xml", feed.atom1(), function (_, _) {});
});
}
let folder = __dirname + "/../";
console.log("Refreshing feeds...");
createFeed(function (feed) {
fs.writeFile(folder + "feed.json", feed.json1(), function (_, _) {});
fs.writeFile(folder + "rss.xml", feed.rss2(), function (_, _) {});
fs.writeFile(folder + "atom.xml", feed.atom1(), function (_, _) {});
});
function createFeed(callback) {
const feed = new Feed({

View File

@ -1,3 +0,0 @@
require("./rss")();
require("./blog")();
require("./sitemap")();

View File

@ -3,62 +3,50 @@ const {
} = require('sitemap');
const fs = require("fs");
module.exports = function () {
let folder = __dirname + "/../";
refreshSitemap(folder);
let folder = __dirname + "/../";
console.log("Refreshing sitemap...");
fs.watchFile(folder + "blog/posts.json", function (curr, prev) {
if (curr.mtime == prev.mtime)
return;
refreshSitemap(folder);
});
}
function refreshSitemap(folder) {
console.log("Refreshing sitemap...");
let sitemap = createSitemap({
hostname: 'https://ellpeck.de',
urls: [{
url: '/',
priority: 0.8
},
{
url: '/#projects',
changefreq: 'monthly'
},
{
url: '/#social',
changefreq: 'yearly'
},
{
url: '/#about',
changefreq: 'monthly'
},
{
url: '/#blog',
changefreq: 'weekly',
priority: 0.6
},
{
url: '/foefrenzy',
priority: 0.7
},
{
url: '/foefrenzy/maps'
}
]
});
fs.readFile(folder + "blog/posts.json", function (_, data) {
let json = JSON.parse(data);
for (let post of json) {
sitemap.add({
url: "/blog-" + post.id
});
let sitemap = createSitemap({
hostname: 'https://ellpeck.de',
urls: [{
url: '/',
priority: 0.8
},
{
url: '/#projects',
changefreq: 'monthly'
},
{
url: '/#social',
changefreq: 'yearly'
},
{
url: '/#about',
changefreq: 'monthly'
},
{
url: '/#blog',
changefreq: 'weekly',
priority: 0.6
},
{
url: '/foefrenzy',
priority: 0.7
},
{
url: '/foefrenzy/maps'
}
]
});
fs.writeFile(folder + "/sitemap.xml", sitemap.toXML(), function (_, _) {});
});
}
fs.readFile(folder + "blog/posts.json", function (_, data) {
let json = JSON.parse(data);
for (let post of json) {
sitemap.add({
url: "/blog-" + post.id
});
}
fs.writeFile(folder + "/sitemap.xml", sitemap.toXML(), function (_, _) {});
});

View File

@ -1,9 +1,9 @@
if (cookieNotification) {
let notif = "";
notif += '<div class="alert alert-danger alert-dismissible fade show" role="alert">';
notif += "<strong>This site uses cookies to store information about your browsing activity.</strong>";
notif += "<br>Note that, due to widgets and embeds, additional information might be stored by other sites. Please refer to those sites' privacy policies for more information.";
notif += "<br>Keep in mind that you can review or delete stored cookies for any site at any time in your browser's settings. Have a nice day!";
notif += "This site uses cookies to store information about your browsing activity.";
notif += "<br>For more information, check out the <a href=\"#privacy\">privacy policy</a>.";
notif += "<br>Have a nice day!";
notif += '<button type="button" class="close" data-dismiss="alert" id="notif-close">';
notif += '<span>&times;</span>';
notif += '</button></div>';

View File

@ -12,11 +12,9 @@ if (pride)
$(function () {
let openModals = function (hash) {
if (hash && hash.length > 1) {
if (hash === '#impressum') {
$('#impressum-modal').modal('show');
} else if (hash === "#commissions") {
$('#commissions-modal').modal('show');
}
let modal = $(`${hash}-modal`);
if (modal.length)
modal.modal('show');
}
}
openModals(window.location.hash);

View File

@ -123,12 +123,6 @@ body {
line-height: 60px;
}
.impressum-data {
padding: 15px;
font-weight: bold;
font-size: 125%;
}
.quote {
float: right;
}