Add privacy policy
This commit is contained in:
parent
ad78574959
commit
cffb0dbd6b
8 changed files with 154 additions and 4 deletions
92
dashboard/src/components/PrivacyPolicy.vue
Normal file
92
dashboard/src/components/PrivacyPolicy.vue
Normal file
|
@ -0,0 +1,92 @@
|
||||||
|
<template>
|
||||||
|
<div class="privacy-policy">
|
||||||
|
<div class="wrapper">
|
||||||
|
<h1>Zeppelin Privacy Policy</h1>
|
||||||
|
|
||||||
|
<h2>Zeppelin overview</h2>
|
||||||
|
<p>
|
||||||
|
Zeppelin is a moderation bot for Discord that allows server staff to
|
||||||
|
carry out moderator actions (warn, mute, kick, ban, clean messages, view
|
||||||
|
user information, etc.),
|
||||||
|
keep records of infractions, perform automated actions ("automod", e.g.
|
||||||
|
message filtering), post detailed logs on logging channels, and set up
|
||||||
|
systems such as reaction roles.
|
||||||
|
The bot also includes a web dashboard that server administrators can log
|
||||||
|
in to through Discord OAuth.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
The bot's source code is available at
|
||||||
|
<a href="https://github.com/Dragory/ZeppelinBot">
|
||||||
|
https://github.com/Dragory/ZeppelinBot
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>Stored data</h2>
|
||||||
|
<p>
|
||||||
|
When Zeppelin is used by a server, the following categories data can be
|
||||||
|
stored by the bot.
|
||||||
|
The specific categories of data saved for each server depends on how the
|
||||||
|
server has configured Zeppelin.
|
||||||
|
</p>
|
||||||
|
<ul>
|
||||||
|
<li>Recent messages and username/nickname changes of users engaged on
|
||||||
|
the server
|
||||||
|
</li>
|
||||||
|
<li>Recent bulk deleted messages</li>
|
||||||
|
<li>Basic user information, moderator-entered text, and relevant message
|
||||||
|
archives for infraction records
|
||||||
|
</li>
|
||||||
|
<li>A subset of previously held roles and nickname on the server to be
|
||||||
|
restored when a user rejoins
|
||||||
|
</li>
|
||||||
|
<li>Basic server details of the server using the bot</li>
|
||||||
|
</ul>
|
||||||
|
<p>
|
||||||
|
Additionally, when a user logs in to the web dashboard the following
|
||||||
|
types of data are stored:
|
||||||
|
</p>
|
||||||
|
<ul>
|
||||||
|
<li>Basic Discord user information</li>
|
||||||
|
<li>Time and originating IP address of the login for security audit
|
||||||
|
purposes
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>Data retention</h2>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
Recent messages are stored for 24h
|
||||||
|
<ul>
|
||||||
|
<li>Deleted messages within this 24h are cleared 5 minutes after
|
||||||
|
deletion
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>5 most recent usernames and 10 most recent nicknames of users
|
||||||
|
engaged in chat or voice channels are stored for 30 days
|
||||||
|
</li>
|
||||||
|
<li>Archives of bulk-deleted messages are stored for 30 days</li>
|
||||||
|
<li>Infraction record data is kept until the server stops using Zeppelin
|
||||||
|
unless explicitly deleted
|
||||||
|
</li>
|
||||||
|
<li>Roles and nicknames that are restored on rejoin are cleared when the
|
||||||
|
user rejoins
|
||||||
|
</li>
|
||||||
|
<li>User information for users logged in to the bot's web dashboard via
|
||||||
|
Discord OAuth is stored as long as the server uses Zeppelin
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>Data access and deletion requests</h2>
|
||||||
|
<p>
|
||||||
|
To request access to personal data stored about you, or to request its
|
||||||
|
deletion, to the extent permitted by GDPR, please send an email to <a
|
||||||
|
href="mailto:contact@mivir.fi">contact@mivir.fi</a>.
|
||||||
|
</p>
|
||||||
|
</div></div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script type="ts">
|
||||||
|
import "../style/privacy-policy.pcss";
|
||||||
|
export default {};
|
||||||
|
</script>
|
|
@ -1,5 +1,5 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="dashboard container mx-auto px-4 py-2">
|
<div class="dashboard container mx-auto px-6 py-6">
|
||||||
<Title title="Zeppelin - Dashboard" />
|
<Title title="Zeppelin - Dashboard" />
|
||||||
|
|
||||||
<nav class="flex items-stretch pl-4 pr-2 py-1 border border-gray-700 rounded bg-gray-800 shadow-xl mb-8">
|
<nav class="flex items-stretch pl-4 pr-2 py-1 border border-gray-700 rounded bg-gray-800 shadow-xl mb-8">
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="docs container mx-auto px-4 py-2">
|
<div class="docs container mx-auto px-6 py-6">
|
||||||
<Title title="Zeppelin - Documentation" />
|
<Title title="Zeppelin - Documentation" />
|
||||||
|
|
||||||
<!-- Top bar -->
|
<!-- Top bar -->
|
||||||
|
|
|
@ -10,6 +10,12 @@ export const router = new VueRouter({
|
||||||
{ path: "/login", beforeEnter: authRedirectGuard },
|
{ path: "/login", beforeEnter: authRedirectGuard },
|
||||||
{ path: "/login-callback", beforeEnter: loginCallbackGuard },
|
{ path: "/login-callback", beforeEnter: loginCallbackGuard },
|
||||||
|
|
||||||
|
// Privacy policy
|
||||||
|
{
|
||||||
|
path: "/privacy-policy",
|
||||||
|
component: () => import("./components/PrivacyPolicy.vue"),
|
||||||
|
},
|
||||||
|
|
||||||
// Docs
|
// Docs
|
||||||
{
|
{
|
||||||
path: "/docs",
|
path: "/docs",
|
||||||
|
|
|
@ -23,6 +23,9 @@
|
||||||
<li>
|
<li>
|
||||||
<a href="https://www.patreon.com/zeppelinbot">Patreon</a>
|
<a href="https://www.patreon.com/zeppelinbot">Patreon</a>
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="/privacy-policy">Privacy Policy</a>
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -15,5 +15,4 @@ body {
|
||||||
@apply bg-gray-900;
|
@apply bg-gray-900;
|
||||||
@apply text-gray-300;
|
@apply text-gray-300;
|
||||||
@apply text-base;
|
@apply text-base;
|
||||||
@apply p-4;
|
|
||||||
}
|
}
|
||||||
|
|
51
dashboard/src/style/privacy-policy.pcss
Normal file
51
dashboard/src/style/privacy-policy.pcss
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
.privacy-policy {
|
||||||
|
padding: 16px;
|
||||||
|
|
||||||
|
width: 100%;
|
||||||
|
min-height: 100vh;
|
||||||
|
|
||||||
|
background-color: #7289da;
|
||||||
|
background-image: linear-gradient(225deg, #7289da 0%, #5d70b4 100%);
|
||||||
|
color: #fff;
|
||||||
|
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: flex-start;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
& a {
|
||||||
|
color: #fff;
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
& .wrapper {
|
||||||
|
flex: 0 0 auto;
|
||||||
|
|
||||||
|
width: 100%;
|
||||||
|
max-width: 800px;
|
||||||
|
}
|
||||||
|
|
||||||
|
& h1 {
|
||||||
|
font-size: 60px;
|
||||||
|
font-weight: 300;
|
||||||
|
}
|
||||||
|
|
||||||
|
& h2 {
|
||||||
|
font-size: 30px;
|
||||||
|
margin-top: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
& p {
|
||||||
|
margin-bottom: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
& ul {
|
||||||
|
list-style: disc;
|
||||||
|
margin-left: 24px;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
|
||||||
|
& ul {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -77,7 +77,6 @@
|
||||||
grid-template-columns: 1fr 1fr;
|
grid-template-columns: 1fr 1fr;
|
||||||
|
|
||||||
margin-top: 8px;
|
margin-top: 8px;
|
||||||
margin-left: -12px;
|
|
||||||
|
|
||||||
& .btn {
|
& .btn {
|
||||||
margin: 12px;
|
margin: 12px;
|
||||||
|
|
Loading…
Add table
Reference in a new issue