feat: Add TOS & Privacy Policy
Signed-off-by: Ben Hall <ben@benh.codes>
This commit is contained in:
parent
5139f790cc
commit
e77fc3c72a
@ -1,7 +1,7 @@
|
|||||||
export const API_URL = env.API_URL || "http://localhost:3000"
|
export const API_URL = env.API_URL || "https://api.ticketsbot.cloud"
|
||||||
export const PLACEHOLDER_DOCS_URL = "https://docs.ticketsbot.net/setup/placeholders.html"
|
export const PLACEHOLDER_DOCS_URL = "https://docs.ticketsbot.net/setup/placeholders.html"
|
||||||
|
|
||||||
export const OAUTH = {
|
export const OAUTH = {
|
||||||
clientId: env.CLIENT_ID || "700742994386747404",
|
clientId: env.CLIENT_ID || "1325579039888511056",
|
||||||
redirectUri: env.REDIRECT_URI || "http://localhost:5000/callback"
|
redirectUri: env.REDIRECT_URI || "http://localhost:5000/callback"
|
||||||
}
|
}
|
||||||
|
63
frontend/src/layouts/LegalLayout.svelte
Normal file
63
frontend/src/layouts/LegalLayout.svelte
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
<Head/>
|
||||||
|
|
||||||
|
<div class="wrapper">
|
||||||
|
<div class="super-container">
|
||||||
|
<!-- TODO: Make this better :) -->
|
||||||
|
<!-- {#if currentRoute.component !== Index}
|
||||||
|
<LoadingScreen/>
|
||||||
|
{/if} -->
|
||||||
|
<NotifyModal/>
|
||||||
|
<div class="content-container">
|
||||||
|
<Route {currentRoute} {params}/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import {Route} from 'svelte-router-spa'
|
||||||
|
import Head from '../includes/Head.svelte'
|
||||||
|
import Sidebar from '../includes/Sidebar.svelte'
|
||||||
|
import LoadingScreen from '../includes/LoadingScreen.svelte'
|
||||||
|
import NotifyModal from '../includes/NotifyModal.svelte'
|
||||||
|
import {loadingScreen} from "../js/stores"
|
||||||
|
import Index from "../views/Index.svelte";
|
||||||
|
|
||||||
|
export let currentRoute;
|
||||||
|
export let params = {};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
padding: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.wrapper {
|
||||||
|
display: flex;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
margin: 0 !important;
|
||||||
|
padding: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.super-container {
|
||||||
|
display: flex;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content-container {
|
||||||
|
display: flex;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hide {
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 950px) {
|
||||||
|
.wrapper {
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -36,9 +36,15 @@ import EditPanel from "./views/panels/EditPanel.svelte";
|
|||||||
import EditMultiPanel from "./views/panels/EditMultiPanel.svelte";
|
import EditMultiPanel from "./views/panels/EditMultiPanel.svelte";
|
||||||
import SelectServers from "./views/premium/SelectServers.svelte";
|
import SelectServers from "./views/premium/SelectServers.svelte";
|
||||||
|
|
||||||
|
import LegalLayout from "./layouts/LegalLayout.svelte"
|
||||||
|
import PrivacyPolicy from "./views/legal/PrivacyPolicy.svelte"
|
||||||
|
import TOS from "./views/legal/TOS.svelte"
|
||||||
|
|
||||||
export const routes = [
|
export const routes = [
|
||||||
{name: '/', component: Index, layout: IndexLayout},
|
{name: '/', component: Index, layout: IndexLayout},
|
||||||
{name: '404', path: '404', component: Error404, layout: ErrorLayout},
|
{name: '404', path: '404', component: Error404, layout: ErrorLayout},
|
||||||
|
{name: "/legal/privacy", component: PrivacyPolicy, layout: LegalLayout },
|
||||||
|
{name: "/legal/tos", component: TOS, layout: LegalLayout },
|
||||||
{name: '/callback', component: LoginCallback},
|
{name: '/callback', component: LoginCallback},
|
||||||
{name: '/login', component: Login},
|
{name: '/login', component: Login},
|
||||||
{name: '/logout', component: Logout},
|
{name: '/logout', component: Logout},
|
||||||
|
139
frontend/src/views/legal/PrivacyPolicy.svelte
Normal file
139
frontend/src/views/legal/PrivacyPolicy.svelte
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
<script>
|
||||||
|
import Card from "../../components/Card.svelte";
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div class="content">
|
||||||
|
<div class="card-wrapper">
|
||||||
|
<Card footer={false} fill={false}>
|
||||||
|
<span slot="title"> Privacy Policy </span>
|
||||||
|
<div slot="body" style="width: 100%">
|
||||||
|
<h2>What data do you collect & how do you use the data?</h2>
|
||||||
|
<p>
|
||||||
|
When you invite Tickets to your server, we cache the guild
|
||||||
|
object, channel objects and role objects. Additionally, we
|
||||||
|
may also cache any user or member objects that Discord
|
||||||
|
provides Tickets with in the GUILD_CREATE payload. Upon
|
||||||
|
interaction with the bot, we may also cache your member and
|
||||||
|
user objects if we do not already do so. We store this data
|
||||||
|
solely for operation of the Tickets service to prevent
|
||||||
|
excessive API requests to the Discord API.
|
||||||
|
</p>
|
||||||
|
<br />
|
||||||
|
<p>
|
||||||
|
When a Ticket is closed in a server, all message content and
|
||||||
|
participants (specifically username, avatar hash and
|
||||||
|
discriminator) as retrieved and uploaded to our ticket
|
||||||
|
archive store. We use OVH's object storage offering to store
|
||||||
|
the data, which is encrypted by us, and additionally
|
||||||
|
encrypted by OVH at rest. Backups of our database and ticket
|
||||||
|
transcripts are encrypted and stored in Switzerland, via
|
||||||
|
Exoscale.
|
||||||
|
</p>
|
||||||
|
<br />
|
||||||
|
<p>
|
||||||
|
When logging into our web dashboard, we also collect all
|
||||||
|
guild objects for the servers you are a member of. This is
|
||||||
|
so we can verify your ownership / status in the server, and
|
||||||
|
provide a list of servers to manage.
|
||||||
|
</p>
|
||||||
|
<hr />
|
||||||
|
<h2>Third Party Services</h2>
|
||||||
|
<h3>Bloxlink</h3>
|
||||||
|
<p>
|
||||||
|
If you have opted into using our Bloxlink integration, the
|
||||||
|
IDs of users will be sent to Bloxlink when opening a ticket
|
||||||
|
to retrieve their Roblox user ID. This is then sent to
|
||||||
|
Roblox's own API and exchanged for the full Roblox user
|
||||||
|
object. Only the user's snowflake is shared with Bloxlink.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
You can view Bloxlink's own Terms of Service <a
|
||||||
|
href="https://www.iubenda.com/privacy-policy/11935974s"
|
||||||
|
>here</a
|
||||||
|
>.
|
||||||
|
</p>
|
||||||
|
<h3>User-created Integrations</h3>
|
||||||
|
<p>
|
||||||
|
Administrators of Discord servers using our service can
|
||||||
|
install or create custom integrations. This means that upon
|
||||||
|
opening a ticket, your user ID (which is not classed as PII
|
||||||
|
by Discord) is sent to the operators of the service used by
|
||||||
|
the integration. Custom integrations are able to define
|
||||||
|
privacy policies. You should ask the administrators of
|
||||||
|
servers using our service for the privacy policies of
|
||||||
|
integrations they have installed.
|
||||||
|
</p>
|
||||||
|
<h3>Cloudflare</h3>
|
||||||
|
<p>
|
||||||
|
All traffic is routed through Cloudflare, whose service we
|
||||||
|
use for web performance and security.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
You can view Cloudflare's privacy policy <a
|
||||||
|
href="https://www.cloudflare.com/privacypolicy/">here</a
|
||||||
|
>.
|
||||||
|
</p>
|
||||||
|
<h3>Google Analytics</h3>
|
||||||
|
<p>
|
||||||
|
We use Google Analytics on some of our web pages to track
|
||||||
|
how we can improve your experience using our sites. Google
|
||||||
|
Analytics is a industry standard tool, used by most
|
||||||
|
websites. All data is anonymised before being forwarded. We
|
||||||
|
do not use this data for advertising purposes.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
You can view Google Analytics' terms of service and privacy
|
||||||
|
policy <a
|
||||||
|
href="https://marketingplatform.google.com/about/analytics/terms/us/"
|
||||||
|
>here</a
|
||||||
|
>.
|
||||||
|
</p>
|
||||||
|
<hr />
|
||||||
|
<h2>
|
||||||
|
How can I contact you regarding concerns with the Tickets
|
||||||
|
service?
|
||||||
|
</h2>
|
||||||
|
<p>
|
||||||
|
We are happy to resolve any data processing of security
|
||||||
|
concerns you may have. The best way to get in contact with
|
||||||
|
us is by joining our Discord support server and opening a
|
||||||
|
Ticket in the #support channel.
|
||||||
|
</p>
|
||||||
|
<hr />
|
||||||
|
<h2>How can I request my data or data removal?</h2>
|
||||||
|
<p>
|
||||||
|
Please join our Discord support server and open a Ticket in
|
||||||
|
the #support channel. Unfortunately, we are unable to help
|
||||||
|
you with these queries via external channels, as we would
|
||||||
|
not be able to reliably verify your identity. We will handle
|
||||||
|
your request within 30 days of it being logged.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</Card>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.content {
|
||||||
|
display: flex;
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
font-weight: bold !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-wrapper {
|
||||||
|
display: block;
|
||||||
|
width: 75%;
|
||||||
|
margin-top: 5%;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 576px) {
|
||||||
|
.card-wrapper {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
149
frontend/src/views/legal/TOS.svelte
Normal file
149
frontend/src/views/legal/TOS.svelte
Normal file
@ -0,0 +1,149 @@
|
|||||||
|
<script>
|
||||||
|
import Card from "../../components/Card.svelte";
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div class="content">
|
||||||
|
<div class="card-wrapper">
|
||||||
|
<Card footer={false} fill={false}>
|
||||||
|
<span slot="title"> Terms of Service </span>
|
||||||
|
<div slot="body" style="width: 100%">
|
||||||
|
<p>
|
||||||
|
Please read these terms of service ("terms", "terms of
|
||||||
|
service") carefully before using Tickets Discord bot and
|
||||||
|
ticketsbot.cloud (the "service") operated by
|
||||||
|
ticketsbot.cloud ("us", 'we", "our").
|
||||||
|
</p>
|
||||||
|
<br />
|
||||||
|
<p>
|
||||||
|
We will provide their services to you, which are subject to
|
||||||
|
the conditions stated below in this document. Every time you
|
||||||
|
visit this website, use its services or make a purchase, you
|
||||||
|
accept the following conditions.
|
||||||
|
</p>
|
||||||
|
<br />
|
||||||
|
<p>
|
||||||
|
By using the service, you represent and warrant that you
|
||||||
|
agree to these terms, and have the legal capacity to do so.
|
||||||
|
</p>
|
||||||
|
<hr />
|
||||||
|
<h2>Privacy</h2>
|
||||||
|
<p>
|
||||||
|
When you visit this website or use the service, we collect
|
||||||
|
information about you. Please review our <a
|
||||||
|
href="/legal/privacy">privacy policy</a
|
||||||
|
> for further information.
|
||||||
|
</p>
|
||||||
|
<hr />
|
||||||
|
<h2>User Guidelines</h2>
|
||||||
|
<ol>
|
||||||
|
<li>
|
||||||
|
Do not take any actions to attempt to abuse or purposely
|
||||||
|
disrupt or cause other damage to the service.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Do not use the service in a manner inconsistent with any
|
||||||
|
applicable laws or regulations of your local region and
|
||||||
|
the United Kingdom.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Do not attempt to access any data that you are not
|
||||||
|
permitted to.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Do not interfere with, disrupt, or create an undue
|
||||||
|
burden on the service or the networks or services
|
||||||
|
connected to the service.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Do not attempt to bypass any measures of the service
|
||||||
|
designed to prevent or restrict access to the service,
|
||||||
|
or any portion of the service.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Do not use the service to process or store adult visual
|
||||||
|
media content, including but not restricted to images
|
||||||
|
and videos.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Do not use the service to process or store
|
||||||
|
privacy-sensitive data from users, such as identity
|
||||||
|
documents.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Do not use the service to, or in association to a way
|
||||||
|
that would, violate the <a
|
||||||
|
href="https://discord.com/terms"
|
||||||
|
>Discord Terms of Service</a
|
||||||
|
>
|
||||||
|
or
|
||||||
|
<a href="https://discord.com/guidelines"
|
||||||
|
>Discord Community Guidelines</a
|
||||||
|
>. Please take additional care to review the following
|
||||||
|
extracts:
|
||||||
|
<blockquote>
|
||||||
|
<br />
|
||||||
|
You agree not to use the Service in order to:
|
||||||
|
<br />
|
||||||
|
...
|
||||||
|
<br />
|
||||||
|
Exploit, distribute or publicly inform other members
|
||||||
|
of any game error, miscue or bug which gives an unintended
|
||||||
|
advantage; violate any applicable laws or regulations;
|
||||||
|
or promote or encourage illegal activity including, but
|
||||||
|
not limited to, hacking, cracking or distribution of
|
||||||
|
counterfeit software, compromised accounts, or cheats
|
||||||
|
or hacks for the Service.
|
||||||
|
</blockquote>
|
||||||
|
<blockquote>
|
||||||
|
Do not abuse Discord products in any way, such as
|
||||||
|
selling or purchasing an account or server, or
|
||||||
|
participating in fraudulent Nitro incentives or
|
||||||
|
<strong>Boosting activities</strong>.
|
||||||
|
</blockquote>
|
||||||
|
</li>
|
||||||
|
</ol>
|
||||||
|
</div>
|
||||||
|
</Card>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
blockquote {
|
||||||
|
border-left: 10px solid #ccc;
|
||||||
|
margin: 1.5em 10px;
|
||||||
|
padding: 0.5em 10px;
|
||||||
|
}
|
||||||
|
blockquote:before {
|
||||||
|
color: #ccc;
|
||||||
|
content: open-quote;
|
||||||
|
font-size: 4em;
|
||||||
|
line-height: 0.1em;
|
||||||
|
margin-right: 0.25em;
|
||||||
|
vertical-align: -0.4em;
|
||||||
|
}
|
||||||
|
blockquote p {
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
.content {
|
||||||
|
display: flex;
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
font-weight: bold !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-wrapper {
|
||||||
|
display: block;
|
||||||
|
width: 75%;
|
||||||
|
margin-top: 5%;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 576px) {
|
||||||
|
.card-wrapper {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
Loading…
x
Reference in New Issue
Block a user