forked from MarseyWorld/MarseyWorld
gfgdfd
parent
6a6d6a4a9a
commit
6c78141179
|
@ -13,59 +13,59 @@ name: "CodeQL"
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [ master ]
|
branches: [ master ]
|
||||||
pull_request:
|
pull_request:
|
||||||
# The branches below must be a subset of the branches above
|
# The branches below must be a subset of the branches above
|
||||||
branches: [ master ]
|
branches: [ master ]
|
||||||
schedule:
|
schedule:
|
||||||
- cron: '21 7 * * 3'
|
- cron: '21 7 * * 3'
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
analyze:
|
analyze:
|
||||||
name: Analyze
|
name: Analyze
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
permissions:
|
||||||
actions: read
|
actions: read
|
||||||
contents: read
|
contents: read
|
||||||
security-events: write
|
security-events: write
|
||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
language: [ 'javascript', 'python' ]
|
language: [ 'javascript', 'python' ]
|
||||||
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
|
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
|
||||||
# Learn more:
|
# Learn more:
|
||||||
# https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
|
# https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
# Initializes the CodeQL tools for scanning.
|
# Initializes the CodeQL tools for scanning.
|
||||||
- name: Initialize CodeQL
|
- name: Initialize CodeQL
|
||||||
uses: github/codeql-action/init@v1
|
uses: github/codeql-action/init@v1
|
||||||
with:
|
with:
|
||||||
languages: ${{ matrix.language }}
|
languages: ${{ matrix.language }}
|
||||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||||
# By default, queries listed here will override any specified in a config file.
|
# By default, queries listed here will override any specified in a config file.
|
||||||
# Prefix the list here with "+" to use these queries and those in the config file.
|
# Prefix the list here with "+" to use these queries and those in the config file.
|
||||||
# queries: ./path/to/local/query, your-org/your-repo/queries@main
|
# queries: ./path/to/local/query, your-org/your-repo/queries@main
|
||||||
|
|
||||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||||
# If this step fails, then you should remove it and run the build manually (see below)
|
# If this step fails, then you should remove it and run the build manually (see below)
|
||||||
- name: Autobuild
|
- name: Autobuild
|
||||||
uses: github/codeql-action/autobuild@v1
|
uses: github/codeql-action/autobuild@v1
|
||||||
|
|
||||||
# ℹ️ Command-line programs to run using the OS shell.
|
# ℹ️ Command-line programs to run using the OS shell.
|
||||||
# 📚 https://git.io/JvXDl
|
# 📚 https://git.io/JvXDl
|
||||||
|
|
||||||
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
|
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
|
||||||
# and modify them (or add more) to build your code if your project
|
# and modify them (or add more) to build your code if your project
|
||||||
# uses a compiled language
|
# uses a compiled language
|
||||||
|
|
||||||
#- run: |
|
#- run: |
|
||||||
# make bootstrap
|
# make bootstrap
|
||||||
# make release
|
# make release
|
||||||
|
|
||||||
- name: Perform CodeQL Analysis
|
- name: Perform CodeQL Analysis
|
||||||
uses: github/codeql-action/analyze@v1
|
uses: github/codeql-action/analyze@v1
|
||||||
|
|
190
LICENSE
190
LICENSE
|
@ -5,83 +5,83 @@ Mozilla Public License Version 2.0
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
1.1. "Contributor"
|
1.1. "Contributor"
|
||||||
means each individual or legal entity that creates, contributes to
|
means each individual or legal entity that creates, contributes to
|
||||||
the creation of, or owns Covered Software.
|
the creation of, or owns Covered Software.
|
||||||
|
|
||||||
1.2. "Contributor Version"
|
1.2. "Contributor Version"
|
||||||
means the combination of the Contributions of others (if any) used
|
means the combination of the Contributions of others (if any) used
|
||||||
by a Contributor and that particular Contributor's Contribution.
|
by a Contributor and that particular Contributor's Contribution.
|
||||||
|
|
||||||
1.3. "Contribution"
|
1.3. "Contribution"
|
||||||
means Covered Software of a particular Contributor.
|
means Covered Software of a particular Contributor.
|
||||||
|
|
||||||
1.4. "Covered Software"
|
1.4. "Covered Software"
|
||||||
means Source Code Form to which the initial Contributor has attached
|
means Source Code Form to which the initial Contributor has attached
|
||||||
the notice in Exhibit A, the Executable Form of such Source Code
|
the notice in Exhibit A, the Executable Form of such Source Code
|
||||||
Form, and Modifications of such Source Code Form, in each case
|
Form, and Modifications of such Source Code Form, in each case
|
||||||
including portions thereof.
|
including portions thereof.
|
||||||
|
|
||||||
1.5. "Incompatible With Secondary Licenses"
|
1.5. "Incompatible With Secondary Licenses"
|
||||||
means
|
means
|
||||||
|
|
||||||
(a) that the initial Contributor has attached the notice described
|
(a) that the initial Contributor has attached the notice described
|
||||||
in Exhibit B to the Covered Software; or
|
in Exhibit B to the Covered Software; or
|
||||||
|
|
||||||
(b) that the Covered Software was made available under the terms of
|
(b) that the Covered Software was made available under the terms of
|
||||||
version 1.1 or earlier of the License, but not also under the
|
version 1.1 or earlier of the License, but not also under the
|
||||||
terms of a Secondary License.
|
terms of a Secondary License.
|
||||||
|
|
||||||
1.6. "Executable Form"
|
1.6. "Executable Form"
|
||||||
means any form of the work other than Source Code Form.
|
means any form of the work other than Source Code Form.
|
||||||
|
|
||||||
1.7. "Larger Work"
|
1.7. "Larger Work"
|
||||||
means a work that combines Covered Software with other material, in
|
means a work that combines Covered Software with other material, in
|
||||||
a separate file or files, that is not Covered Software.
|
a separate file or files, that is not Covered Software.
|
||||||
|
|
||||||
1.8. "License"
|
1.8. "License"
|
||||||
means this document.
|
means this document.
|
||||||
|
|
||||||
1.9. "Licensable"
|
1.9. "Licensable"
|
||||||
means having the right to grant, to the maximum extent possible,
|
means having the right to grant, to the maximum extent possible,
|
||||||
whether at the time of the initial grant or subsequently, any and
|
whether at the time of the initial grant or subsequently, any and
|
||||||
all of the rights conveyed by this License.
|
all of the rights conveyed by this License.
|
||||||
|
|
||||||
1.10. "Modifications"
|
1.10. "Modifications"
|
||||||
means any of the following:
|
means any of the following:
|
||||||
|
|
||||||
(a) any file in Source Code Form that results from an addition to,
|
(a) any file in Source Code Form that results from an addition to,
|
||||||
deletion from, or modification of the contents of Covered
|
deletion from, or modification of the contents of Covered
|
||||||
Software; or
|
Software; or
|
||||||
|
|
||||||
(b) any new file in Source Code Form that contains any Covered
|
(b) any new file in Source Code Form that contains any Covered
|
||||||
Software.
|
Software.
|
||||||
|
|
||||||
1.11. "Patent Claims" of a Contributor
|
1.11. "Patent Claims" of a Contributor
|
||||||
means any patent claim(s), including without limitation, method,
|
means any patent claim(s), including without limitation, method,
|
||||||
process, and apparatus claims, in any patent Licensable by such
|
process, and apparatus claims, in any patent Licensable by such
|
||||||
Contributor that would be infringed, but for the grant of the
|
Contributor that would be infringed, but for the grant of the
|
||||||
License, by the making, using, selling, offering for sale, having
|
License, by the making, using, selling, offering for sale, having
|
||||||
made, import, or transfer of either its Contributions or its
|
made, import, or transfer of either its Contributions or its
|
||||||
Contributor Version.
|
Contributor Version.
|
||||||
|
|
||||||
1.12. "Secondary License"
|
1.12. "Secondary License"
|
||||||
means either the GNU General Public License, Version 2.0, the GNU
|
means either the GNU General Public License, Version 2.0, the GNU
|
||||||
Lesser General Public License, Version 2.1, the GNU Affero General
|
Lesser General Public License, Version 2.1, the GNU Affero General
|
||||||
Public License, Version 3.0, or any later versions of those
|
Public License, Version 3.0, or any later versions of those
|
||||||
licenses.
|
licenses.
|
||||||
|
|
||||||
1.13. "Source Code Form"
|
1.13. "Source Code Form"
|
||||||
means the form of the work preferred for making modifications.
|
means the form of the work preferred for making modifications.
|
||||||
|
|
||||||
1.14. "You" (or "Your")
|
1.14. "You" (or "Your")
|
||||||
means an individual or a legal entity exercising rights under this
|
means an individual or a legal entity exercising rights under this
|
||||||
License. For legal entities, "You" includes any entity that
|
License. For legal entities, "You" includes any entity that
|
||||||
controls, is controlled by, or is under common control with You. For
|
controls, is controlled by, or is under common control with You. For
|
||||||
purposes of this definition, "control" means (a) the power, direct
|
purposes of this definition, "control" means (a) the power, direct
|
||||||
or indirect, to cause the direction or management of such entity,
|
or indirect, to cause the direction or management of such entity,
|
||||||
whether by contract or otherwise, or (b) ownership of more than
|
whether by contract or otherwise, or (b) ownership of more than
|
||||||
fifty percent (50%) of the outstanding shares or beneficial
|
fifty percent (50%) of the outstanding shares or beneficial
|
||||||
ownership of such entity.
|
ownership of such entity.
|
||||||
|
|
||||||
2. License Grants and Conditions
|
2. License Grants and Conditions
|
||||||
--------------------------------
|
--------------------------------
|
||||||
|
@ -92,14 +92,14 @@ Each Contributor hereby grants You a world-wide, royalty-free,
|
||||||
non-exclusive license:
|
non-exclusive license:
|
||||||
|
|
||||||
(a) under intellectual property rights (other than patent or trademark)
|
(a) under intellectual property rights (other than patent or trademark)
|
||||||
Licensable by such Contributor to use, reproduce, make available,
|
Licensable by such Contributor to use, reproduce, make available,
|
||||||
modify, display, perform, distribute, and otherwise exploit its
|
modify, display, perform, distribute, and otherwise exploit its
|
||||||
Contributions, either on an unmodified basis, with Modifications, or
|
Contributions, either on an unmodified basis, with Modifications, or
|
||||||
as part of a Larger Work; and
|
as part of a Larger Work; and
|
||||||
|
|
||||||
(b) under Patent Claims of such Contributor to make, use, sell, offer
|
(b) under Patent Claims of such Contributor to make, use, sell, offer
|
||||||
for sale, have made, import, and otherwise transfer either its
|
for sale, have made, import, and otherwise transfer either its
|
||||||
Contributions or its Contributor Version.
|
Contributions or its Contributor Version.
|
||||||
|
|
||||||
2.2. Effective Date
|
2.2. Effective Date
|
||||||
|
|
||||||
|
@ -116,15 +116,15 @@ Notwithstanding Section 2.1(b) above, no patent license is granted by a
|
||||||
Contributor:
|
Contributor:
|
||||||
|
|
||||||
(a) for any code that a Contributor has removed from Covered Software;
|
(a) for any code that a Contributor has removed from Covered Software;
|
||||||
or
|
or
|
||||||
|
|
||||||
(b) for infringements caused by: (i) Your and any other third party's
|
(b) for infringements caused by: (i) Your and any other third party's
|
||||||
modifications of Covered Software, or (ii) the combination of its
|
modifications of Covered Software, or (ii) the combination of its
|
||||||
Contributions with other software (except as part of its Contributor
|
Contributions with other software (except as part of its Contributor
|
||||||
Version); or
|
Version); or
|
||||||
|
|
||||||
(c) under Patent Claims infringed by Covered Software in the absence of
|
(c) under Patent Claims infringed by Covered Software in the absence of
|
||||||
its Contributions.
|
its Contributions.
|
||||||
|
|
||||||
This License does not grant any rights in the trademarks, service marks,
|
This License does not grant any rights in the trademarks, service marks,
|
||||||
or logos of any Contributor (except as may be necessary to comply with
|
or logos of any Contributor (except as may be necessary to comply with
|
||||||
|
@ -172,15 +172,15 @@ Form.
|
||||||
If You distribute Covered Software in Executable Form then:
|
If You distribute Covered Software in Executable Form then:
|
||||||
|
|
||||||
(a) such Covered Software must also be made available in Source Code
|
(a) such Covered Software must also be made available in Source Code
|
||||||
Form, as described in Section 3.1, and You must inform recipients of
|
Form, as described in Section 3.1, and You must inform recipients of
|
||||||
the Executable Form how they can obtain a copy of such Source Code
|
the Executable Form how they can obtain a copy of such Source Code
|
||||||
Form by reasonable means in a timely manner, at a charge no more
|
Form by reasonable means in a timely manner, at a charge no more
|
||||||
than the cost of distribution to the recipient; and
|
than the cost of distribution to the recipient; and
|
||||||
|
|
||||||
(b) You may distribute such Executable Form under the terms of this
|
(b) You may distribute such Executable Form under the terms of this
|
||||||
License, or sublicense it under different terms, provided that the
|
License, or sublicense it under different terms, provided that the
|
||||||
license for the Executable Form does not attempt to limit or alter
|
license for the Executable Form does not attempt to limit or alter
|
||||||
the recipients' rights in the Source Code Form under this License.
|
the recipients' rights in the Source Code Form under this License.
|
||||||
|
|
||||||
3.3. Distribution of a Larger Work
|
3.3. Distribution of a Larger Work
|
||||||
|
|
||||||
|
@ -259,45 +259,45 @@ have been validly granted by You or Your distributors under this License
|
||||||
prior to termination shall survive termination.
|
prior to termination shall survive termination.
|
||||||
|
|
||||||
************************************************************************
|
************************************************************************
|
||||||
* *
|
* *
|
||||||
* 6. Disclaimer of Warranty *
|
* 6. Disclaimer of Warranty *
|
||||||
* ------------------------- *
|
* ------------------------- *
|
||||||
* *
|
* *
|
||||||
* Covered Software is provided under this License on an "as is" *
|
* Covered Software is provided under this License on an "as is" *
|
||||||
* basis, without warranty of any kind, either expressed, implied, or *
|
* basis, without warranty of any kind, either expressed, implied, or *
|
||||||
* statutory, including, without limitation, warranties that the *
|
* statutory, including, without limitation, warranties that the *
|
||||||
* Covered Software is free of defects, merchantable, fit for a *
|
* Covered Software is free of defects, merchantable, fit for a *
|
||||||
* particular purpose or non-infringing. The entire risk as to the *
|
* particular purpose or non-infringing. The entire risk as to the *
|
||||||
* quality and performance of the Covered Software is with You. *
|
* quality and performance of the Covered Software is with You. *
|
||||||
* Should any Covered Software prove defective in any respect, You *
|
* Should any Covered Software prove defective in any respect, You *
|
||||||
* (not any Contributor) assume the cost of any necessary servicing, *
|
* (not any Contributor) assume the cost of any necessary servicing, *
|
||||||
* repair, or correction. This disclaimer of warranty constitutes an *
|
* repair, or correction. This disclaimer of warranty constitutes an *
|
||||||
* essential part of this License. No use of any Covered Software is *
|
* essential part of this License. No use of any Covered Software is *
|
||||||
* authorized under this License except under this disclaimer. *
|
* authorized under this License except under this disclaimer. *
|
||||||
* *
|
* *
|
||||||
************************************************************************
|
************************************************************************
|
||||||
|
|
||||||
************************************************************************
|
************************************************************************
|
||||||
* *
|
* *
|
||||||
* 7. Limitation of Liability *
|
* 7. Limitation of Liability *
|
||||||
* -------------------------- *
|
* -------------------------- *
|
||||||
* *
|
* *
|
||||||
* Under no circumstances and under no legal theory, whether tort *
|
* Under no circumstances and under no legal theory, whether tort *
|
||||||
* (including negligence), contract, or otherwise, shall any *
|
* (including negligence), contract, or otherwise, shall any *
|
||||||
* Contributor, or anyone who distributes Covered Software as *
|
* Contributor, or anyone who distributes Covered Software as *
|
||||||
* permitted above, be liable to You for any direct, indirect, *
|
* permitted above, be liable to You for any direct, indirect, *
|
||||||
* special, incidental, or consequential damages of any character *
|
* special, incidental, or consequential damages of any character *
|
||||||
* including, without limitation, damages for lost profits, loss of *
|
* including, without limitation, damages for lost profits, loss of *
|
||||||
* goodwill, work stoppage, computer failure or malfunction, or any *
|
* goodwill, work stoppage, computer failure or malfunction, or any *
|
||||||
* and all other commercial damages or losses, even if such party *
|
* and all other commercial damages or losses, even if such party *
|
||||||
* shall have been informed of the possibility of such damages. This *
|
* shall have been informed of the possibility of such damages. This *
|
||||||
* limitation of liability shall not apply to liability for death or *
|
* limitation of liability shall not apply to liability for death or *
|
||||||
* personal injury resulting from such party's negligence to the *
|
* personal injury resulting from such party's negligence to the *
|
||||||
* extent applicable law prohibits such limitation. Some *
|
* extent applicable law prohibits such limitation. Some *
|
||||||
* jurisdictions do not allow the exclusion or limitation of *
|
* jurisdictions do not allow the exclusion or limitation of *
|
||||||
* incidental or consequential damages, so this exclusion and *
|
* incidental or consequential damages, so this exclusion and *
|
||||||
* limitation may not apply to You. *
|
* limitation may not apply to You. *
|
||||||
* *
|
* *
|
||||||
************************************************************************
|
************************************************************************
|
||||||
|
|
||||||
8. Litigation
|
8. Litigation
|
||||||
|
|
|
@ -2,12 +2,12 @@ version: 0.0
|
||||||
os: linux
|
os: linux
|
||||||
files:
|
files:
|
||||||
- source: /
|
- source: /
|
||||||
destination: files
|
destination: files
|
||||||
permissions:
|
permissions:
|
||||||
- object: files/*
|
- object: files/*
|
||||||
mode: 4755
|
mode: 4755
|
||||||
hooks:
|
hooks:
|
||||||
AfterInstall:
|
AfterInstall:
|
||||||
- location: scripts/install_pip
|
- location: scripts/install_pip
|
||||||
ApplicationStart:
|
ApplicationStart:
|
||||||
- location: scripts/start_files
|
- location: scripts/start_files
|
|
@ -1,8 +1,8 @@
|
||||||
version: 0.2
|
version: 0.2
|
||||||
phases:
|
phases:
|
||||||
install:
|
install:
|
||||||
runtime-versions:
|
runtime-versions:
|
||||||
python: 3.7
|
python: 3.7
|
||||||
artifacts:
|
artifacts:
|
||||||
files:
|
files:
|
||||||
- '**/*'
|
- '**/*'
|
|
@ -1,6 +1,6 @@
|
||||||
version: 2
|
version: 2
|
||||||
updates:
|
updates:
|
||||||
- package-ecosystem: "pip"
|
- package-ecosystem: "pip"
|
||||||
directory: "/"
|
directory: "/"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "daily"
|
interval: "daily"
|
|
@ -2,66 +2,66 @@ version: '2.3'
|
||||||
|
|
||||||
services:
|
services:
|
||||||
files:
|
files:
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
volumes:
|
volumes:
|
||||||
- "./:/service"
|
- "./:/service"
|
||||||
environment:
|
environment:
|
||||||
- DATABASE_URL=postgresql://postgres@postgres:5432/postgres
|
- DATABASE_URL=postgresql://postgres@postgres:5432/postgres
|
||||||
- MASTER_KEY=${MASTER_KEY:-KTVciAUQFpFh2WdJ/oiHJlxl6FvzRZp8kYzAAv3l2OA=}
|
- MASTER_KEY=${MASTER_KEY:-KTVciAUQFpFh2WdJ/oiHJlxl6FvzRZp8kYzAAv3l2OA=}
|
||||||
- REDIS_URL=redis://redis
|
- REDIS_URL=redis://redis
|
||||||
- DOMAIN=localhost
|
- DOMAIN=localhost
|
||||||
- SITE_NAME=Drama
|
- SITE_NAME=Drama
|
||||||
- GIPHY_KEY=3435tdfsdudebussylmaoxxt43
|
- GIPHY_KEY=3435tdfsdudebussylmaoxxt43
|
||||||
- FORCE_HTTPS=0
|
- FORCE_HTTPS=0
|
||||||
- DISCORD_SERVER_ID=3435tdfsdudebussylmaoxxt43
|
- DISCORD_SERVER_ID=3435tdfsdudebussylmaoxxt43
|
||||||
- DISCORD_CLIENT_ID=3435tdfsdudebussylmaoxxt43
|
- DISCORD_CLIENT_ID=3435tdfsdudebussylmaoxxt43
|
||||||
- DISCORD_CLIENT_SECRET=3435tdfsdudebussylmaoxxt43
|
- DISCORD_CLIENT_SECRET=3435tdfsdudebussylmaoxxt43
|
||||||
- DISCORD_BOT_TOKEN=3435tdfsdudebussylmaoxxt43
|
- DISCORD_BOT_TOKEN=3435tdfsdudebussylmaoxxt43
|
||||||
#- HCAPTCHA_SITEKEY=3435tdfsdudebussylmaoxxt43
|
#- HCAPTCHA_SITEKEY=3435tdfsdudebussylmaoxxt43
|
||||||
- HCAPTCHA_SECRET=3435tdfsdudebussylmaoxxt43
|
- HCAPTCHA_SECRET=3435tdfsdudebussylmaoxxt43
|
||||||
- YOUTUBE_KEY=3435tdfsdudebussylmaoxxt43
|
- YOUTUBE_KEY=3435tdfsdudebussylmaoxxt43
|
||||||
- PUSHER_KEY=3435tdfsdudebussylmaoxxt43
|
- PUSHER_KEY=3435tdfsdudebussylmaoxxt43
|
||||||
- CATBOX_KEY=3435tdfsdudebussylmaoxxt43
|
- CATBOX_KEY=3435tdfsdudebussylmaoxxt43
|
||||||
- SPAM_SIMILARITY_THRESHOLD=0.5
|
- SPAM_SIMILARITY_THRESHOLD=0.5
|
||||||
- SPAM_SIMILAR_COUNT_THRESHOLD=5
|
- SPAM_SIMILAR_COUNT_THRESHOLD=5
|
||||||
- SPAM_URL_SIMILARITY_THRESHOLD=0.1
|
- SPAM_URL_SIMILARITY_THRESHOLD=0.1
|
||||||
- COMMENT_SPAM_SIMILAR_THRESHOLD=0.5
|
- COMMENT_SPAM_SIMILAR_THRESHOLD=0.5
|
||||||
- COMMENT_SPAM_COUNT_THRESHOLD=5
|
- COMMENT_SPAM_COUNT_THRESHOLD=5
|
||||||
- READ_ONLY=0
|
- READ_ONLY=0
|
||||||
- BOT_DISABLE=0
|
- BOT_DISABLE=0
|
||||||
- COINS_NAME=Dramacoins
|
- COINS_NAME=Dramacoins
|
||||||
- DEFAULT_TIME_FILTER=all
|
- DEFAULT_TIME_FILTER=all
|
||||||
- DEFAULT_THEME=dark
|
- DEFAULT_THEME=dark
|
||||||
- DEFAULT_COLOR=ff66ac #YOU HAVE TO PICK ONE OF THOSE COLORS OR SHIT WILL BREAK: ff66ac, 805ad5, 62ca56, 38a169, 80ffff, 2a96f3, eb4963, ff0000, f39731, 30409f, 3e98a7, e4432d, 7b9ae4, ec72de, 7f8fa6, f8db58
|
- DEFAULT_COLOR=ff66ac #YOU HAVE TO PICK ONE OF THOSE COLORS OR SHIT WILL BREAK: ff66ac, 805ad5, 62ca56, 38a169, 80ffff, 2a96f3, eb4963, ff0000, f39731, 30409f, 3e98a7, e4432d, 7b9ae4, ec72de, 7f8fa6, f8db58
|
||||||
- SLOGAN=Dude bussy lmao
|
- SLOGAN=Dude bussy lmao
|
||||||
- GUMROAD_TOKEN=3435tdfsdudebussylmaoxxt43
|
- GUMROAD_TOKEN=3435tdfsdudebussylmaoxxt43
|
||||||
- GUMROAD_LINK=https://marsey1.gumroad.com/l/tfcvri
|
- GUMROAD_LINK=https://marsey1.gumroad.com/l/tfcvri
|
||||||
- CARD_VIEW=1
|
- CARD_VIEW=1
|
||||||
- DISABLE_DOWNVOTES=0
|
- DISABLE_DOWNVOTES=0
|
||||||
- DUES=0
|
- DUES=0
|
||||||
- MAIL_USERNAME=blahblahblah@gmail.com
|
- MAIL_USERNAME=blahblahblah@gmail.com
|
||||||
- MAIL_PASSWORD=3435tdfsdudebussylmaoxxt43
|
- MAIL_PASSWORD=3435tdfsdudebussylmaoxxt43
|
||||||
links:
|
links:
|
||||||
- "redis"
|
- "redis"
|
||||||
- "postgres"
|
- "postgres"
|
||||||
ports:
|
ports:
|
||||||
- "80:80"
|
- "80:80"
|
||||||
depends_on:
|
depends_on:
|
||||||
- redis
|
- redis
|
||||||
- postgres
|
- postgres
|
||||||
|
|
||||||
redis:
|
redis:
|
||||||
image: redis
|
image: redis
|
||||||
ports:
|
ports:
|
||||||
- "6379:6379"
|
- "6379:6379"
|
||||||
|
|
||||||
postgres:
|
postgres:
|
||||||
image: postgres:12.3
|
image: postgres:12.3
|
||||||
volumes:
|
volumes:
|
||||||
- "./schema.sql:/docker-entrypoint-initdb.d/00-schema.sql"
|
- "./schema.sql:/docker-entrypoint-initdb.d/00-schema.sql"
|
||||||
- "./seed-db.sql:/docker-entrypoint-initdb.d/01-schema.sql"
|
- "./seed-db.sql:/docker-entrypoint-initdb.d/01-schema.sql"
|
||||||
environment:
|
environment:
|
||||||
- POSTGRES_HOST_AUTH_METHOD=trust
|
- POSTGRES_HOST_AUTH_METHOD=trust
|
||||||
#ports:
|
#ports:
|
||||||
#- "5432:5432"
|
#- "5432:5432"
|
|
@ -67,7 +67,6 @@ def error_500(e, v):
|
||||||
|
|
||||||
|
|
||||||
@app.post("/allow_nsfw")
|
@app.post("/allow_nsfw")
|
||||||
@limiter.limit("1/second")
|
|
||||||
def allow_nsfw():
|
def allow_nsfw():
|
||||||
|
|
||||||
session["over_18"] = int(time.time()) + 3600
|
session["over_18"] = int(time.time()) + 3600
|
||||||
|
|
|
@ -6,13 +6,13 @@
|
||||||
|
|
||||||
<div class="row my-5">
|
<div class="row my-5">
|
||||||
<div class="col col-md-8">
|
<div class="col col-md-8">
|
||||||
<div class="settings">
|
<div class="settings">
|
||||||
<div id="description">
|
<div id="description">
|
||||||
<h2>Edit rules</h2>
|
<h2>Edit rules</h2>
|
||||||
<p>Your rules page will be publicly visible at <a href="/rules">{{'/rules'|full_link}}</a>.</p>
|
<p>Your rules page will be publicly visible at <a href="/rules">{{'/rules'|full_link}}</a>.</p>
|
||||||
<p class="text-small text-muted">Supports <a href="https://www.markdownguide.org/basic-syntax">markdown syntax</a>.</p>
|
<p class="text-small text-muted">Supports <a href="https://www.markdownguide.org/basic-syntax">markdown syntax</a>.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="body d-lg-flex">
|
<div class="body d-lg-flex">
|
||||||
<div class="w-lg-100">
|
<div class="w-lg-100">
|
||||||
<form id="profile-settings" action="/admin/rules" method="post">
|
<form id="profile-settings" action="/admin/rules" method="post">
|
||||||
<input type="hidden" name="formkey" value="{{v.formkey}}">
|
<input type="hidden" name="formkey" value="{{v.formkey}}">
|
||||||
|
@ -24,8 +24,8 @@
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
|
@ -28,7 +28,7 @@
|
||||||
<h2>Step 2: Using the Access Token</h2>
|
<h2>Step 2: Using the Access Token</h2>
|
||||||
<p>To use the access token, include the following header in subsequent API requests to Drama: <code>Authorization: access_token_goes_here</code></p>
|
<p>To use the access token, include the following header in subsequent API requests to Drama: <code>Authorization: access_token_goes_here</code></p>
|
||||||
<p>Python example:</p>
|
<p>Python example:</p>
|
||||||
<pre> import requests
|
<pre> import requests
|
||||||
|
|
||||||
headers={"Authorization": "access_token_goes_here", "User-Agent": "sex"}
|
headers={"Authorization": "access_token_goes_here", "User-Agent": "sex"}
|
||||||
|
|
||||||
|
@ -70,7 +70,7 @@
|
||||||
<h2>Step 4: Using the Access Token</h2>
|
<h2>Step 4: Using the Access Token</h2>
|
||||||
<p>To use the access token, include the following header in subsequent API requests to Drama: <code>Authorization: access_token_goes_here</code></p>
|
<p>To use the access token, include the following header in subsequent API requests to Drama: <code>Authorization: access_token_goes_here</code></p>
|
||||||
<p>Python example:</p>
|
<p>Python example:</p>
|
||||||
<pre> import requests
|
<pre> import requests
|
||||||
|
|
||||||
headers={"Authorization": "access_token_goes_here", "User-Agent": "sex"}
|
headers={"Authorization": "access_token_goes_here", "User-Agent": "sex"}
|
||||||
|
|
||||||
|
|
|
@ -323,7 +323,7 @@ Text 2
|
||||||
Text in a pre element
|
Text in a pre element
|
||||||
is displayed in a fixed-width
|
is displayed in a fixed-width
|
||||||
font, and it preserves
|
font, and it preserves
|
||||||
both spaces and
|
both spaces and
|
||||||
line breaks
|
line breaks
|
||||||
</pre>
|
</pre>
|
||||||
</pre></td>
|
</pre></td>
|
||||||
|
@ -332,7 +332,7 @@ Text 2
|
||||||
Text in a pre element
|
Text in a pre element
|
||||||
is displayed in a fixed-width
|
is displayed in a fixed-width
|
||||||
font, and it preserves
|
font, and it preserves
|
||||||
both spaces and
|
both spaces and
|
||||||
line breaks
|
line breaks
|
||||||
</pre>
|
</pre>
|
||||||
</td>
|
</td>
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
<div class="text-center py-7 py-md-8">
|
<div class="text-center py-7 py-md-8">
|
||||||
|
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<i class="fas text-gray-600 fa-exclamation-triangle" style="font-size: 5rem!important;"></i>
|
<i class="fas text-gray-600 fa-exclamation-triangle" style="font-size: 5rem!important;"></i>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h1 class="h5">You haven't set up your rules page yet</h1>
|
<h1 class="h5">You haven't set up your rules page yet</h1>
|
||||||
|
|
|
@ -11,10 +11,10 @@
|
||||||
|
|
||||||
</pre>
|
</pre>
|
||||||
<div class="mx-4 mt-2 mb-6">
|
<div class="mx-4 mt-2 mb-6">
|
||||||
<h5 class="text-muted text-uppercase">{{'SITE_NAME'|app_config}} Rules{% if v and v.admin_level == 6 %} <a href="/admin/rules" class="btn btn-link text-lowercase"><i class="far fa-fw fa-pencil"></i> Edit rules</a>{% endif %}</h5>
|
<h5 class="text-muted text-uppercase">{{'SITE_NAME'|app_config}} Rules{% if v and v.admin_level == 6 %} <a href="/admin/rules" class="btn btn-link text-lowercase"><i class="far fa-fw fa-pencil"></i> Edit rules</a>{% endif %}</h5>
|
||||||
|
|
||||||
<div id="rules" class="my-3">
|
<div id="rules" class="my-3">
|
||||||
{{ rules | safe }}
|
{{ rules | safe }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
|
@ -431,11 +431,11 @@
|
||||||
<ul class="list-inline text-right d-flex">
|
<ul class="list-inline text-right d-flex">
|
||||||
|
|
||||||
<li class="list-inline-item">
|
<li class="list-inline-item">
|
||||||
<a {% if v %}href="{{p.permalink}}"{% else %}href="/logged_out{{p.permalink}}"{% endif %}>
|
<a {% if v %}href="{{p.permalink}}"{% else %}href="/logged_out{{p.permalink}}"{% endif %}>
|
||||||
<i class="fas fa-comment-dots"></i>{{p.comment_count}}
|
<i class="fas fa-comment-dots"></i>{{p.comment_count}}
|
||||||
<span class="text-info d-none new-comments"></span>
|
<span class="text-info d-none new-comments"></span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
{% if v and v.id==p.author_id %}
|
{% if v and v.id==p.author_id %}
|
||||||
{% if p.private %}
|
{% if p.private %}
|
||||||
|
@ -574,11 +574,11 @@
|
||||||
<ul class="list-inline text-right d-flex">
|
<ul class="list-inline text-right d-flex">
|
||||||
|
|
||||||
<li class="list-inline-item mr-auto">
|
<li class="list-inline-item mr-auto">
|
||||||
<a {% if v %}href="{{p.permalink}}"{% else %}href="/logged_out{{p.permalink}}"{% endif %}>
|
<a {% if v %}href="{{p.permalink}}"{% else %}href="/logged_out{{p.permalink}}"{% endif %}>
|
||||||
<i class="fas fa-comment-dots"></i>{{p.comment_count}}
|
<i class="fas fa-comment-dots"></i>{{p.comment_count}}
|
||||||
<span class="text-info d-none new-comments"></span>
|
<span class="text-info d-none new-comments"></span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<a class="list-inline-item copy-link" href="javascript:void(0);" role="button" data-clipboard-text="{% if 'rdrama' in request.host %}https://taytay.life{{p.permalink}}{% else %}{{p.permalink | full_link}}{% endif %}"><i class="fas fa-link"></i>Copy link</a>
|
<a class="list-inline-item copy-link" href="javascript:void(0);" role="button" data-clipboard-text="{% if 'rdrama' in request.host %}https://taytay.life{{p.permalink}}{% else %}{{p.permalink | full_link}}{% endif %}"><i class="fas fa-link"></i>Copy link</a>
|
||||||
{% if v %}
|
{% if v %}
|
||||||
|
|
|
@ -26,17 +26,17 @@
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
(() => {
|
(() => {
|
||||||
const date = new Date('{{p.created_datetime}}');
|
const date = new Date('{{p.created_datetime}}');
|
||||||
document.getElementById('timestamp-{{p.id}}').title = date.toString();
|
document.getElementById('timestamp-{{p.id}}').title = date.toString();
|
||||||
{% if p.edited_utc %}
|
{% if p.edited_utc %}
|
||||||
const dateEdited = new Date('{{p.edited_datetime}}');
|
const dateEdited = new Date('{{p.edited_datetime}}');
|
||||||
document.getElementById('edited_timestamp-{{p.id}}').title = dateEdited.toString();
|
document.getElementById('edited_timestamp-{{p.id}}').title = dateEdited.toString();
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if (not v or v.highlightcomments) %}
|
{% if (not v or v.highlightcomments) %}
|
||||||
showNewCommentCounts('{{p.id}}', {{p.comment_count}})
|
showNewCommentCounts('{{p.id}}', {{p.comment_count}})
|
||||||
{% endif %}
|
{% endif %}
|
||||||
})()
|
})()
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{% set ups=p.upvotes %}
|
{% set ups=p.upvotes %}
|
||||||
|
@ -158,12 +158,12 @@
|
||||||
{% if p.realbody(v) %}
|
{% if p.realbody(v) %}
|
||||||
<a class="list-inline-item" href="javascript:void(0)" onclick="expandText('{{p.id}}')"><i class="fas fa-expand-alt mr-0 text-expand-icon-{{p.id}}"></i></a>
|
<a class="list-inline-item" href="javascript:void(0)" onclick="expandText('{{p.id}}')"><i class="fas fa-expand-alt mr-0 text-expand-icon-{{p.id}}"></i></a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<li class="list-inline-item">
|
<li class="list-inline-item">
|
||||||
<a {% if v and v.newtab %}target="_blank"{% endif %} {% if v %}href="{{p.permalink}}"{% else %}href="/logged_out{{p.permalink}}"{% endif %}>
|
<a {% if v and v.newtab %}target="_blank"{% endif %} {% if v %}href="{{p.permalink}}"{% else %}href="/logged_out{{p.permalink}}"{% endif %}>
|
||||||
<i class="fas fa-comment-dots"></i>{{p.comment_count}}
|
<i class="fas fa-comment-dots"></i>{{p.comment_count}}
|
||||||
<span class="text-info d-none new-comments"></span>
|
<span class="text-info d-none new-comments"></span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<a class="list-inline-item" href="/votes?link={{p.fullname}}"><i class="fas fa-arrows-v"></i>Votes</a>
|
<a class="list-inline-item" href="/votes?link={{p.fullname}}"><i class="fas fa-arrows-v"></i>Votes</a>
|
||||||
|
|
||||||
{% if v and v.id!=p.author_id %}
|
{% if v and v.id!=p.author_id %}
|
||||||
|
@ -248,12 +248,12 @@
|
||||||
<div class="card-footer d-md-none mt-2 {% if request.path == '/changelog' %}px-0{% endif %}">
|
<div class="card-footer d-md-none mt-2 {% if request.path == '/changelog' %}px-0{% endif %}">
|
||||||
<div class="post-actions">
|
<div class="post-actions">
|
||||||
<ul class="list-inline text-right d-flex">
|
<ul class="list-inline text-right d-flex">
|
||||||
<li class="list-inline-item mr-auto">
|
<li class="list-inline-item mr-auto">
|
||||||
<a {% if v and v.newtab %}target="_blank"{% endif %} {% if v %}href="{{p.permalink}}"{% else %}href="/logged_out{{p.permalink}}"{% endif %}>
|
<a {% if v and v.newtab %}target="_blank"{% endif %} {% if v %}href="{{p.permalink}}"{% else %}href="/logged_out{{p.permalink}}"{% endif %}>
|
||||||
<i class="fas fa-comment-dots"></i>{{p.comment_count}}
|
<i class="fas fa-comment-dots"></i>{{p.comment_count}}
|
||||||
<span class="text-info d-none new-comments"></span>
|
<span class="text-info d-none new-comments"></span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<a class="copy-link" href="javascript:void(0);" role="button" data-clipboard-text="{% if 'rdrama' in request.host %}https://taytay.life{{p.permalink}}{% else %}{{p.permalink | full_link}}{% endif %}" style="margin-right: 15px;margin-top:5px;"><i class="fas fa-link"></i></a>
|
<a class="copy-link" href="javascript:void(0);" role="button" data-clipboard-text="{% if 'rdrama' in request.host %}https://taytay.life{{p.permalink}}{% else %}{{p.permalink | full_link}}{% endif %}" style="margin-right: 15px;margin-top:5px;"><i class="fas fa-link"></i></a>
|
||||||
|
|
||||||
|
|
|
@ -53,24 +53,24 @@
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
function transferCoins(mobile=false) {
|
function transferCoins(mobile=false) {
|
||||||
let t = event.target;
|
let t = event.target;
|
||||||
t.disabled = true;
|
t.disabled = true;
|
||||||
|
|
||||||
let amount = parseInt(document.getElementById("coins-transfer-amount").value);
|
let amount = parseInt(document.getElementById("coins-transfer-amount").value);
|
||||||
let transferred = amount - Math.ceil(amount*TRANSFER_TAX);
|
let transferred = amount - Math.ceil(amount*TRANSFER_TAX);
|
||||||
|
|
||||||
post_toast_callback("/@{{u.username}}/transfer_coins",
|
post_toast_callback("/@{{u.username}}/transfer_coins",
|
||||||
{"amount": document.getElementById(mobile ? "coins-transfer-amount-mobile" : "coins-transfer-amount").value},
|
{"amount": document.getElementById(mobile ? "coins-transfer-amount-mobile" : "coins-transfer-amount").value},
|
||||||
(xhr) => {
|
(xhr) => {
|
||||||
if(xhr.status == 200) {
|
if(xhr.status == 200) {
|
||||||
document.getElementById("user-coins-amount").innerText = parseInt(document.getElementById("user-coins-amount").innerText) - amount;
|
document.getElementById("user-coins-amount").innerText = parseInt(document.getElementById("user-coins-amount").innerText) - amount;
|
||||||
document.getElementById("profile-coins-amount-mobile").innerText = parseInt(document.getElementById("profile-coins-amount-mobile").innerText) + transferred;
|
document.getElementById("profile-coins-amount-mobile").innerText = parseInt(document.getElementById("profile-coins-amount-mobile").innerText) + transferred;
|
||||||
document.getElementById("profile-coins-amount").innerText = parseInt(document.getElementById("profile-coins-amount").innerText) + transferred;
|
document.getElementById("profile-coins-amount").innerText = parseInt(document.getElementById("profile-coins-amount").innerText) + transferred;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
setTimeout(_ => t.disabled = false, 2000);
|
setTimeout(_ => t.disabled = false, 2000);
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
16
pg_hba.conf
16
pg_hba.conf
|
@ -27,18 +27,18 @@
|
||||||
# maintenance (custom daily cronjobs, replication, and similar tasks).
|
# maintenance (custom daily cronjobs, replication, and similar tasks).
|
||||||
#
|
#
|
||||||
# Database administrative login by Unix domain socket
|
# Database administrative login by Unix domain socket
|
||||||
local all postgres trust
|
local all postgres trust
|
||||||
|
|
||||||
# TYPE DATABASE USER ADDRESS METHOD
|
# TYPE DATABASE USER ADDRESS METHOD
|
||||||
|
|
||||||
# "local" is for Unix domain socket connections only
|
# "local" is for Unix domain socket connections only
|
||||||
local all all trust
|
local all all trust
|
||||||
# IPv4 local connections:
|
# IPv4 local connections:
|
||||||
host all all 127.0.0.1/32 trust
|
host all all 127.0.0.1/32 trust
|
||||||
# IPv6 local connections:
|
# IPv6 local connections:
|
||||||
host all all ::1/128 trust
|
host all all ::1/128 trust
|
||||||
# Allow replication connections from localhost, by a user with the
|
# Allow replication connections from localhost, by a user with the
|
||||||
# replication privilege.
|
# replication privilege.
|
||||||
local replication all trust
|
local replication all trust
|
||||||
host replication all 127.0.0.1/32 trust
|
host replication all 127.0.0.1/32 trust
|
||||||
host replication all ::1/128 trust
|
host replication all ::1/128 trust
|
156
redis.conf
156
redis.conf
|
@ -74,7 +74,7 @@ bind 127.0.0.1 ::1
|
||||||
# When protected mode is on and if:
|
# When protected mode is on and if:
|
||||||
#
|
#
|
||||||
# 1) The server is not binding explicitly to a set of addresses using the
|
# 1) The server is not binding explicitly to a set of addresses using the
|
||||||
# "bind" directive.
|
# "bind" directive.
|
||||||
# 2) No password is configured.
|
# 2) No password is configured.
|
||||||
#
|
#
|
||||||
# The server only accepts connections from clients connecting from the
|
# The server only accepts connections from clients connecting from the
|
||||||
|
@ -119,7 +119,7 @@ timeout 0
|
||||||
#
|
#
|
||||||
# 1) Detect dead peers.
|
# 1) Detect dead peers.
|
||||||
# 2) Take the connection alive from the point of view of network
|
# 2) Take the connection alive from the point of view of network
|
||||||
# equipment in the middle.
|
# equipment in the middle.
|
||||||
#
|
#
|
||||||
# On Linux, the specified value (in seconds) is the period used to send ACKs.
|
# On Linux, the specified value (in seconds) is the period used to send ACKs.
|
||||||
# Note that to close the connection the double of the time is needed.
|
# Note that to close the connection the double of the time is needed.
|
||||||
|
@ -137,13 +137,13 @@ daemonize yes
|
||||||
|
|
||||||
# If you run Redis from upstart or systemd, Redis can interact with your
|
# If you run Redis from upstart or systemd, Redis can interact with your
|
||||||
# supervision tree. Options:
|
# supervision tree. Options:
|
||||||
# supervised no - no supervision interaction
|
# supervised no - no supervision interaction
|
||||||
# supervised upstart - signal upstart by putting Redis into SIGSTOP mode
|
# supervised upstart - signal upstart by putting Redis into SIGSTOP mode
|
||||||
# supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
|
# supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
|
||||||
# supervised auto - detect upstart or systemd method based on
|
# supervised auto - detect upstart or systemd method based on
|
||||||
# UPSTART_JOB or NOTIFY_SOCKET environment variables
|
# UPSTART_JOB or NOTIFY_SOCKET environment variables
|
||||||
# Note: these supervision methods only signal "process is ready."
|
# Note: these supervision methods only signal "process is ready."
|
||||||
# They do not enable continuous liveness pings back to your supervisor.
|
# They do not enable continuous liveness pings back to your supervisor.
|
||||||
supervised systemd
|
supervised systemd
|
||||||
|
|
||||||
# If a pid file is specified, Redis writes it where specified at startup
|
# If a pid file is specified, Redis writes it where specified at startup
|
||||||
|
@ -267,21 +267,21 @@ dir /var/lib/redis
|
||||||
# Master-Replica replication. Use replicaof to make a Redis instance a copy of
|
# Master-Replica replication. Use replicaof to make a Redis instance a copy of
|
||||||
# another Redis server. A few things to understand ASAP about Redis replication.
|
# another Redis server. A few things to understand ASAP about Redis replication.
|
||||||
#
|
#
|
||||||
# +------------------+ +---------------+
|
# +------------------+ +---------------+
|
||||||
# | Master | ---> | Replica |
|
# | Master | ---> | Replica |
|
||||||
# | (receive writes) | | (exact copy) |
|
# | (receive writes) | | (exact copy) |
|
||||||
# +------------------+ +---------------+
|
# +------------------+ +---------------+
|
||||||
#
|
#
|
||||||
# 1) Redis replication is asynchronous, but you can configure a master to
|
# 1) Redis replication is asynchronous, but you can configure a master to
|
||||||
# stop accepting writes if it appears to be not connected with at least
|
# stop accepting writes if it appears to be not connected with at least
|
||||||
# a given number of replicas.
|
# a given number of replicas.
|
||||||
# 2) Redis replicas are able to perform a partial resynchronization with the
|
# 2) Redis replicas are able to perform a partial resynchronization with the
|
||||||
# master if the replication link is lost for a relatively small amount of
|
# master if the replication link is lost for a relatively small amount of
|
||||||
# time. You may want to configure the replication backlog size (see the next
|
# time. You may want to configure the replication backlog size (see the next
|
||||||
# sections of this file) with a sensible value depending on your needs.
|
# sections of this file) with a sensible value depending on your needs.
|
||||||
# 3) Replication is automatic and does not need user intervention. After a
|
# 3) Replication is automatic and does not need user intervention. After a
|
||||||
# network partition replicas automatically try to reconnect to masters
|
# network partition replicas automatically try to reconnect to masters
|
||||||
# and resynchronize with them.
|
# and resynchronize with them.
|
||||||
#
|
#
|
||||||
# replicaof <masterip> <masterport>
|
# replicaof <masterip> <masterport>
|
||||||
|
|
||||||
|
@ -296,14 +296,14 @@ dir /var/lib/redis
|
||||||
# is still in progress, the replica can act in two different ways:
|
# is still in progress, the replica can act in two different ways:
|
||||||
#
|
#
|
||||||
# 1) if replica-serve-stale-data is set to 'yes' (the default) the replica will
|
# 1) if replica-serve-stale-data is set to 'yes' (the default) the replica will
|
||||||
# still reply to client requests, possibly with out of date data, or the
|
# still reply to client requests, possibly with out of date data, or the
|
||||||
# data set may just be empty if this is the first synchronization.
|
# data set may just be empty if this is the first synchronization.
|
||||||
#
|
#
|
||||||
# 2) if replica-serve-stale-data is set to 'no' the replica will reply with
|
# 2) if replica-serve-stale-data is set to 'no' the replica will reply with
|
||||||
# an error "SYNC with master in progress" to all the kind of commands
|
# an error "SYNC with master in progress" to all the kind of commands
|
||||||
# but to INFO, replicaOF, AUTH, PING, SHUTDOWN, REPLCONF, ROLE, CONFIG,
|
# but to INFO, replicaOF, AUTH, PING, SHUTDOWN, REPLCONF, ROLE, CONFIG,
|
||||||
# SUBSCRIBE, UNSUBSCRIBE, PSUBSCRIBE, PUNSUBSCRIBE, PUBLISH, PUBSUB,
|
# SUBSCRIBE, UNSUBSCRIBE, PSUBSCRIBE, PUNSUBSCRIBE, PUBLISH, PUBSUB,
|
||||||
# COMMAND, POST, HOST: and LATENCY.
|
# COMMAND, POST, HOST: and LATENCY.
|
||||||
#
|
#
|
||||||
replica-serve-stale-data yes
|
replica-serve-stale-data yes
|
||||||
|
|
||||||
|
@ -335,10 +335,10 @@ replica-read-only yes
|
||||||
# The transmission can happen in two different ways:
|
# The transmission can happen in two different ways:
|
||||||
#
|
#
|
||||||
# 1) Disk-backed: The Redis master creates a new process that writes the RDB
|
# 1) Disk-backed: The Redis master creates a new process that writes the RDB
|
||||||
# file on disk. Later the file is transferred by the parent
|
# file on disk. Later the file is transferred by the parent
|
||||||
# process to the replicas incrementally.
|
# process to the replicas incrementally.
|
||||||
# 2) Diskless: The Redis master creates a new process that directly writes the
|
# 2) Diskless: The Redis master creates a new process that directly writes the
|
||||||
# RDB file to replica sockets, without touching the disk at all.
|
# RDB file to replica sockets, without touching the disk at all.
|
||||||
#
|
#
|
||||||
# With disk-backed replication, while the RDB file is generated, more replicas
|
# With disk-backed replication, while the RDB file is generated, more replicas
|
||||||
# can be queued and served with the RDB file as soon as the current child producing
|
# can be queued and served with the RDB file as soon as the current child producing
|
||||||
|
@ -584,13 +584,13 @@ replica-priority 100
|
||||||
# randomized algorithms.
|
# randomized algorithms.
|
||||||
#
|
#
|
||||||
# Note: with any of the above policies, Redis will return an error on write
|
# Note: with any of the above policies, Redis will return an error on write
|
||||||
# operations, when there are no suitable keys for eviction.
|
# operations, when there are no suitable keys for eviction.
|
||||||
#
|
#
|
||||||
# At the date of writing these commands are: set setnx setex append
|
# At the date of writing these commands are: set setnx setex append
|
||||||
# incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd
|
# incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd
|
||||||
# sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby
|
# sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby
|
||||||
# zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby
|
# zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby
|
||||||
# getset mset msetnx exec sort
|
# getset mset msetnx exec sort
|
||||||
#
|
#
|
||||||
# The default is:
|
# The default is:
|
||||||
#
|
#
|
||||||
|
@ -652,19 +652,19 @@ replica-priority 100
|
||||||
# following scenarios:
|
# following scenarios:
|
||||||
#
|
#
|
||||||
# 1) On eviction, because of the maxmemory and maxmemory policy configurations,
|
# 1) On eviction, because of the maxmemory and maxmemory policy configurations,
|
||||||
# in order to make room for new data, without going over the specified
|
# in order to make room for new data, without going over the specified
|
||||||
# memory limit.
|
# memory limit.
|
||||||
# 2) Because of expire: when a key with an associated time to live (see the
|
# 2) Because of expire: when a key with an associated time to live (see the
|
||||||
# EXPIRE command) must be deleted from memory.
|
# EXPIRE command) must be deleted from memory.
|
||||||
# 3) Because of a side effect of a command that stores data on a key that may
|
# 3) Because of a side effect of a command that stores data on a key that may
|
||||||
# already exist. For example the RENAME command may delete the old key
|
# already exist. For example the RENAME command may delete the old key
|
||||||
# content when it is replaced with another one. Similarly SUNIONSTORE
|
# content when it is replaced with another one. Similarly SUNIONSTORE
|
||||||
# or SORT with STORE option may delete existing keys. The SET command
|
# or SORT with STORE option may delete existing keys. The SET command
|
||||||
# itself removes any old content of the specified key in order to replace
|
# itself removes any old content of the specified key in order to replace
|
||||||
# it with the specified string.
|
# it with the specified string.
|
||||||
# 4) During replication, when a replica performs a full resynchronization with
|
# 4) During replication, when a replica performs a full resynchronization with
|
||||||
# its master, the content of the whole database is removed in order to
|
# its master, the content of the whole database is removed in order to
|
||||||
# load the RDB file just transferred.
|
# load the RDB file just transferred.
|
||||||
#
|
#
|
||||||
# In all the above cases the default is to delete objects in a blocking way,
|
# In all the above cases the default is to delete objects in a blocking way,
|
||||||
# like if DEL was called. However you can configure each case specifically
|
# like if DEL was called. However you can configure each case specifically
|
||||||
|
@ -852,17 +852,17 @@ lua-time-limit 5000
|
||||||
# its "data age", so the following two checks are performed:
|
# its "data age", so the following two checks are performed:
|
||||||
#
|
#
|
||||||
# 1) If there are multiple replicas able to failover, they exchange messages
|
# 1) If there are multiple replicas able to failover, they exchange messages
|
||||||
# in order to try to give an advantage to the replica with the best
|
# in order to try to give an advantage to the replica with the best
|
||||||
# replication offset (more data from the master processed).
|
# replication offset (more data from the master processed).
|
||||||
# Replicas will try to get their rank by offset, and apply to the start
|
# Replicas will try to get their rank by offset, and apply to the start
|
||||||
# of the failover a delay proportional to their rank.
|
# of the failover a delay proportional to their rank.
|
||||||
#
|
#
|
||||||
# 2) Every single replica computes the time of the last interaction with
|
# 2) Every single replica computes the time of the last interaction with
|
||||||
# its master. This can be the last ping or command received (if the master
|
# its master. This can be the last ping or command received (if the master
|
||||||
# is still in the "connected" state), or the time that elapsed since the
|
# is still in the "connected" state), or the time that elapsed since the
|
||||||
# disconnection with the master (if the replication link is currently down).
|
# disconnection with the master (if the replication link is currently down).
|
||||||
# If the last interaction is too old, the replica will not try to failover
|
# If the last interaction is too old, the replica will not try to failover
|
||||||
# at all.
|
# at all.
|
||||||
#
|
#
|
||||||
# The point "2" can be tuned by user. Specifically a replica will not perform
|
# The point "2" can be tuned by user. Specifically a replica will not perform
|
||||||
# the failover if, since the last interaction with the master, the time
|
# the failover if, since the last interaction with the master, the time
|
||||||
|
@ -1028,29 +1028,29 @@ latency-monitor-threshold 0
|
||||||
# It is possible to select the events that Redis will notify among a set
|
# It is possible to select the events that Redis will notify among a set
|
||||||
# of classes. Every class is identified by a single character:
|
# of classes. Every class is identified by a single character:
|
||||||
#
|
#
|
||||||
# K Keyspace events, published with __keyspace@<db>__ prefix.
|
# K Keyspace events, published with __keyspace@<db>__ prefix.
|
||||||
# E Keyevent events, published with __keyevent@<db>__ prefix.
|
# E Keyevent events, published with __keyevent@<db>__ prefix.
|
||||||
# g Generic commands (non-type specific) like DEL, EXPIRE, RENAME, ...
|
# g Generic commands (non-type specific) like DEL, EXPIRE, RENAME, ...
|
||||||
# $ String commands
|
# $ String commands
|
||||||
# l List commands
|
# l List commands
|
||||||
# s Set commands
|
# s Set commands
|
||||||
# h Hash commands
|
# h Hash commands
|
||||||
# z Sorted set commands
|
# z Sorted set commands
|
||||||
# x Expired events (events generated every time a key expires)
|
# x Expired events (events generated every time a key expires)
|
||||||
# e Evicted events (events generated when a key is evicted for maxmemory)
|
# e Evicted events (events generated when a key is evicted for maxmemory)
|
||||||
# A Alias for g$lshzxe, so that the "AKE" string means all the events.
|
# A Alias for g$lshzxe, so that the "AKE" string means all the events.
|
||||||
#
|
#
|
||||||
# The "notify-keyspace-events" takes as argument a string that is composed
|
# The "notify-keyspace-events" takes as argument a string that is composed
|
||||||
# of zero or multiple characters. The empty string means that notifications
|
# of zero or multiple characters. The empty string means that notifications
|
||||||
# are disabled.
|
# are disabled.
|
||||||
#
|
#
|
||||||
# Example: to enable list and generic events, from the point of view of the
|
# Example: to enable list and generic events, from the point of view of the
|
||||||
# event name, use:
|
# event name, use:
|
||||||
#
|
#
|
||||||
# notify-keyspace-events Elg
|
# notify-keyspace-events Elg
|
||||||
#
|
#
|
||||||
# Example 2: to get the stream of the expired keys subscribing to channel
|
# Example 2: to get the stream of the expired keys subscribing to channel
|
||||||
# name __keyevent@0__:expired use:
|
# name __keyevent@0__:expired use:
|
||||||
#
|
#
|
||||||
# notify-keyspace-events Ex
|
# notify-keyspace-events Ex
|
||||||
#
|
#
|
||||||
|
@ -1088,12 +1088,12 @@ list-max-ziplist-size -2
|
||||||
# are always uncompressed for fast push/pop operations. Settings are:
|
# are always uncompressed for fast push/pop operations. Settings are:
|
||||||
# 0: disable all list compression
|
# 0: disable all list compression
|
||||||
# 1: depth 1 means "don't start compressing until after 1 node into the list,
|
# 1: depth 1 means "don't start compressing until after 1 node into the list,
|
||||||
# going from either the head or tail"
|
# going from either the head or tail"
|
||||||
# So: [head]->node->node->...->node->[tail]
|
# So: [head]->node->node->...->node->[tail]
|
||||||
# [head], [tail] will always be uncompressed; inner nodes will compress.
|
# [head], [tail] will always be uncompressed; inner nodes will compress.
|
||||||
# 2: [head]->[next]->node->node->...->node->[prev]->[tail]
|
# 2: [head]->[next]->node->node->...->node->[prev]->[tail]
|
||||||
# 2 here means: don't compress head or head->next or tail->prev or tail,
|
# 2 here means: don't compress head or head->next or tail->prev or tail,
|
||||||
# but compress all nodes between them.
|
# but compress all nodes between them.
|
||||||
# 3: [head]->[next]->[next]->node->node->...->node->[prev]->[prev]->[tail]
|
# 3: [head]->[next]->[next]->node->node->...->node->[prev]->[prev]->[tail]
|
||||||
# etc.
|
# etc.
|
||||||
list-compress-depth 0
|
list-compress-depth 0
|
||||||
|
@ -1275,15 +1275,15 @@ rdb-save-incremental-fsync yes
|
||||||
# logarithmic factors:
|
# logarithmic factors:
|
||||||
#
|
#
|
||||||
# +--------+------------+------------+------------+------------+------------+
|
# +--------+------------+------------+------------+------------+------------+
|
||||||
# | factor | 100 hits | 1000 hits | 100K hits | 1M hits | 10M hits |
|
# | factor | 100 hits | 1000 hits | 100K hits | 1M hits | 10M hits |
|
||||||
# +--------+------------+------------+------------+------------+------------+
|
# +--------+------------+------------+------------+------------+------------+
|
||||||
# | 0 | 104 | 255 | 255 | 255 | 255 |
|
# | 0 | 104 | 255 | 255 | 255 | 255 |
|
||||||
# +--------+------------+------------+------------+------------+------------+
|
# +--------+------------+------------+------------+------------+------------+
|
||||||
# | 1 | 18 | 49 | 255 | 255 | 255 |
|
# | 1 | 18 | 49 | 255 | 255 | 255 |
|
||||||
# +--------+------------+------------+------------+------------+------------+
|
# +--------+------------+------------+------------+------------+------------+
|
||||||
# | 10 | 10 | 18 | 142 | 255 | 255 |
|
# | 10 | 10 | 18 | 142 | 255 | 255 |
|
||||||
# +--------+------------+------------+------------+------------+------------+
|
# +--------+------------+------------+------------+------------+------------+
|
||||||
# | 100 | 8 | 11 | 49 | 143 | 255 |
|
# | 100 | 8 | 11 | 49 | 143 | 255 |
|
||||||
# +--------+------------+------------+------------+------------+------------+
|
# +--------+------------+------------+------------+------------+------------+
|
||||||
#
|
#
|
||||||
# NOTE: The above table was obtained by running the following commands:
|
# NOTE: The above table was obtained by running the following commands:
|
||||||
|
@ -1335,14 +1335,14 @@ rdb-save-incremental-fsync yes
|
||||||
# Important things to understand:
|
# Important things to understand:
|
||||||
#
|
#
|
||||||
# 1. This feature is disabled by default, and only works if you compiled Redis
|
# 1. This feature is disabled by default, and only works if you compiled Redis
|
||||||
# to use the copy of Jemalloc we ship with the source code of Redis.
|
# to use the copy of Jemalloc we ship with the source code of Redis.
|
||||||
# This is the default with Linux builds.
|
# This is the default with Linux builds.
|
||||||
#
|
#
|
||||||
# 2. You never need to enable this feature if you don't have fragmentation
|
# 2. You never need to enable this feature if you don't have fragmentation
|
||||||
# issues.
|
# issues.
|
||||||
#
|
#
|
||||||
# 3. Once you experience fragmentation, you can enable this feature when
|
# 3. Once you experience fragmentation, you can enable this feature when
|
||||||
# needed with the command "CONFIG SET activedefrag yes".
|
# needed with the command "CONFIG SET activedefrag yes".
|
||||||
#
|
#
|
||||||
# The configuration parameters are able to fine tune the behavior of the
|
# The configuration parameters are able to fine tune the behavior of the
|
||||||
# defragmentation process. If you are not sure about what they mean it is
|
# defragmentation process. If you are not sure about what they mean it is
|
||||||
|
|
788
schema.sql
788
schema.sql
File diff suppressed because it is too large
Load Diff
46
seed-db.sql
46
seed-db.sql
|
@ -27,30 +27,30 @@ INSERT INTO public.badge_defs VALUES (16, 'Marsey Master', 'Contributed 10 (or m
|
||||||
insert into public.award_relationships(id,user_id,kind) values(1,1,'shit');
|
insert into public.award_relationships(id,user_id,kind) values(1,1,'shit');
|
||||||
|
|
||||||
INSERT INTO public.users (
|
INSERT INTO public.users (
|
||||||
id, username, passhash, created_utc, admin_level, over_18, is_activated, bio, bio_html, login_nonce, is_private,
|
id, username, passhash, created_utc, admin_level, over_18, is_activated, bio, bio_html, login_nonce, is_private,
|
||||||
unban_utc, original_username, customtitle, defaultsorting, defaultsortingcomments, defaulttime, namecolor, titlecolor, profileurl, bannerurl,
|
unban_utc, original_username, customtitle, defaultsorting, defaultsortingcomments, defaulttime, namecolor, titlecolor, profileurl, bannerurl,
|
||||||
customtitleplain, theme, themecolor, changelogsub, oldreddit, css, profilecss, coins, agendaposter, suicide_utc,
|
customtitleplain, theme, themecolor, changelogsub, oldreddit, css, profilecss, coins, agendaposter, suicide_utc,
|
||||||
post_count, comment_count, background, verified, truecoins
|
post_count, comment_count, background, verified, truecoins
|
||||||
) VALUES (1, 'Drama', '', 0, 0, true, true, '', '', 0, false,
|
) VALUES (1, 'Drama', '', 0, 0, true, true, '', '', 0, false,
|
||||||
0, 'Drama', '', 'hot', 'top', 'day', 'ff66ac', 'ff66ac', '', '',
|
0, 'Drama', '', 'hot', 'top', 'day', 'ff66ac', 'ff66ac', '', '',
|
||||||
'', 'dark', 'ff66ac', false, false, '', '', 0, false, 0,
|
'', 'dark', 'ff66ac', false, false, '', '', 0, false, 0,
|
||||||
0, 0, '', true, 0),
|
0, 0, '', true, 0),
|
||||||
(2, 'AutoJanny', '', 0, 0, true, true, '', '', 0, false,
|
(2, 'AutoJanny', '', 0, 0, true, true, '', '', 0, false,
|
||||||
0, 'AutoJanny', '', 'hot', 'top', 'day', 'ff66ac', 'ff66ac', '', '',
|
0, 'AutoJanny', '', 'hot', 'top', 'day', 'ff66ac', 'ff66ac', '', '',
|
||||||
'', 'dark', 'ff66ac', false, false, '', '', 0, false, 0,
|
'', 'dark', 'ff66ac', false, false, '', '', 0, false, 0,
|
||||||
0, 0, '', true, 0),
|
0, 0, '', true, 0),
|
||||||
(3, 'Snappy', '', 0, 0, true, true, '', '', 0, false,
|
(3, 'Snappy', '', 0, 0, true, true, '', '', 0, false,
|
||||||
0, 'Snappy', '', 'hot', 'top', 'day', '62ca56', 'e4432d', '', '',
|
0, 'Snappy', '', 'hot', 'top', 'day', '62ca56', 'e4432d', '', '',
|
||||||
'', 'dark', '30409f', false, false, '', '', 0, false, 0,
|
'', 'dark', '30409f', false, false, '', '', 0, false, 0,
|
||||||
0, 0, '', true, 0),
|
0, 0, '', true, 0),
|
||||||
(4, 'longpostbot', '', 0, 0, true, true, '', '', 0, false,
|
(4, 'longpostbot', '', 0, 0, true, true, '', '', 0, false,
|
||||||
0, 'longpostbot', '', 'hot', 'top', 'day', '62ca56', 'e4432d', '', '',
|
0, 'longpostbot', '', 'hot', 'top', 'day', '62ca56', 'e4432d', '', '',
|
||||||
'', 'dark', '30409f', false, false, '', '', 0, false, 0,
|
'', 'dark', '30409f', false, false, '', '', 0, false, 0,
|
||||||
0, 0, '', true, 0),
|
0, 0, '', true, 0),
|
||||||
(5, 'zozbot', '', 0, 0, true, true, '', '', 0, false,
|
(5, 'zozbot', '', 0, 0, true, true, '', '', 0, false,
|
||||||
0, 'zozbot', '', 'hot', 'top', 'day', '62ca56', 'e4432d', '', '',
|
0, 'zozbot', '', 'hot', 'top', 'day', '62ca56', 'e4432d', '', '',
|
||||||
'', 'dark', '30409f', false, false, '', '', 0, false, 0,
|
'', 'dark', '30409f', false, false, '', '', 0, false, 0,
|
||||||
0, 0, '', true, 0);
|
0, 0, '', true, 0);
|
||||||
|
|
||||||
|
|
||||||
SELECT pg_catalog.setval('public.users_id_seq', 5, true);
|
SELECT pg_catalog.setval('public.users_id_seq', 5, true);
|
16
snappy.txt
16
snappy.txt
|
@ -1490,21 +1490,21 @@ Game on.
|
||||||
{[para]}
|
{[para]}
|
||||||
I used to work at an abortion clinic and I saw some extremely fucked up shit there which is why I'm so anti-abortion now. This is just SOME of the horrible stuff I personally witnessed:
|
I used to work at an abortion clinic and I saw some extremely fucked up shit there which is why I'm so anti-abortion now. This is just SOME of the horrible stuff I personally witnessed:
|
||||||
|
|
||||||
• A 23 year old woman came in 11 months into her pregnancy and said "I don't want my stupid baby anymore, kill it" and the doctor said "okay" and he put jumper cables up her baby hole and connected them to a car battery and let it run for six days straight
|
• A 23 year old woman came in 11 months into her pregnancy and said "I don't want my stupid baby anymore, kill it" and the doctor said "okay" and he put jumper cables up her baby hole and connected them to a car battery and let it run for six days straight
|
||||||
|
|
||||||
• A little 8-year old girl wandered in and said "I want an abortion but I am not pregnant" and the doctor said "we'll fix that" and he stole a baby and cut the girl open and put the baby inside her and sewed her shut and then woke the girl up and said "congratulations it's a healthy six year old boy" and the girl said "can I keep him" and the doctor said no and then backed over her in the parking lot with his brand new Ford Raptor
|
• A little 8-year old girl wandered in and said "I want an abortion but I am not pregnant" and the doctor said "we'll fix that" and he stole a baby and cut the girl open and put the baby inside her and sewed her shut and then woke the girl up and said "congratulations it's a healthy six year old boy" and the girl said "can I keep him" and the doctor said no and then backed over her in the parking lot with his brand new Ford Raptor
|
||||||
|
|
||||||
• They made me sign an agreement promising to stop drinking from the medical waste container (I signed somebody else's name) • One of the doctors there developed a futuristic ray gun that could make anything he shot have an abortion, even trees, cars, or barns
|
• They made me sign an agreement promising to stop drinking from the medical waste container (I signed somebody else's name) • One of the doctors there developed a futuristic ray gun that could make anything he shot have an abortion, even trees, cars, or barns
|
||||||
|
|
||||||
• The receptionist threw nail polish at an elderly man
|
• The receptionist threw nail polish at an elderly man
|
||||||
|
|
||||||
• The doctor's assistant invented this thing she called "the silly slide" and it was a really fun little water slide that connected a woman's vagina to a paper shredder so a newborn baby could briefly "enjoy the high life"
|
• The doctor's assistant invented this thing she called "the silly slide" and it was a really fun little water slide that connected a woman's vagina to a paper shredder so a newborn baby could briefly "enjoy the high life"
|
||||||
|
|
||||||
• The oldest child we aborted was in his late 70s, we didn't even know he was a baby until his wife brought in photos
|
• The oldest child we aborted was in his late 70s, we didn't even know he was a baby until his wife brought in photos
|
||||||
|
|
||||||
• The doctors put all sorts of crap up a woman's uterus including a clown nose, bicycle handlebars, a calendar, and an entire Sears retail outlet (before bankruptcy)
|
• The doctors put all sorts of crap up a woman's uterus including a clown nose, bicycle handlebars, a calendar, and an entire Sears retail outlet (before bankruptcy)
|
||||||
|
|
||||||
• During every successful abortion, the doctor would shout "take that, baby" and he'd push a red button that made sirens go off and confetti fell from the ceiling and we'd all get Del Taco for free
|
• During every successful abortion, the doctor would shout "take that, baby" and he'd push a red button that made sirens go off and confetti fell from the ceiling and we'd all get Del Taco for free
|
||||||
{[para]}
|
{[para]}
|
||||||
I have reason to suspect you are terminally r-slurred
|
I have reason to suspect you are terminally r-slurred
|
||||||
{[para]}
|
{[para]}
|
||||||
|
|
Loading…
Reference in New Issue