mirror of
https://github.com/solero/wand.git
synced 2024-11-21 21:17:22 +00:00
Initial commit
This commit is contained in:
parent
af146be6a3
commit
43a1c245eb
12
.gitmodules
vendored
Normal file
12
.gitmodules
vendored
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
[submodule "houdini"]
|
||||||
|
path = houdini-asyncio
|
||||||
|
url = https://github.com/solero/houdini-asyncio
|
||||||
|
[submodule "dash"]
|
||||||
|
path = dash
|
||||||
|
url = https://github.com/solero/dash
|
||||||
|
[submodule "legacy-media"]
|
||||||
|
path = legacy-media
|
||||||
|
url = https://git.solero.me/solero/legacy-media
|
||||||
|
[submodule "vanilla-media"]
|
||||||
|
path = vanilla-media
|
||||||
|
url = https://git.solero.me/solero/vanilla-media
|
106
config.py
Normal file
106
config.py
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
"""
|
||||||
|
Server bind
|
||||||
|
-----------
|
||||||
|
Here place the address and port you
|
||||||
|
would like dash to run on.
|
||||||
|
ADDRESS : str
|
||||||
|
Address to bind to.
|
||||||
|
PORT : int
|
||||||
|
Port to listen on.
|
||||||
|
"""
|
||||||
|
ADDRESS = '0.0.0.0'
|
||||||
|
PORT = 3000
|
||||||
|
|
||||||
|
"""
|
||||||
|
PostgreSQL credentials
|
||||||
|
----------------------
|
||||||
|
Here place the PostgreSQL credentials
|
||||||
|
where your Houdini database is located.
|
||||||
|
"""
|
||||||
|
POSTGRES_HOST = 'db'
|
||||||
|
POSTGRES_NAME = 'postgres'
|
||||||
|
POSTGRES_USER = 'postgres'
|
||||||
|
POSTGRES_PASSWORD = 'postgres'
|
||||||
|
|
||||||
|
|
||||||
|
"""
|
||||||
|
Google reCAPTCHA
|
||||||
|
----------------
|
||||||
|
GCAPTCHA_URL : str
|
||||||
|
Google captcha verify URL. Normally you do not need to
|
||||||
|
modify this.
|
||||||
|
GSECRET_KEY : str
|
||||||
|
Your reCAPTCHA secret key obtained from Google.
|
||||||
|
|
||||||
|
.. Google reCAPTCHA registration:
|
||||||
|
https://www.google.com/recaptcha/admin/create
|
||||||
|
"""
|
||||||
|
GCAPTCHA_URL = 'https://www.google.com/recaptcha/api/siteverify'
|
||||||
|
GSECRET_KEY = ''
|
||||||
|
|
||||||
|
"""
|
||||||
|
Player usernames
|
||||||
|
----------------
|
||||||
|
USERNAME_FORCE_CASE : bool
|
||||||
|
Force capitalized username no matter what user has
|
||||||
|
submitted.
|
||||||
|
|
||||||
|
ex:
|
||||||
|
BASIL -> Basil
|
||||||
|
APPROVE_USERNAME : bool
|
||||||
|
Approves username automatically so they do not have
|
||||||
|
to be approved by an administrator.
|
||||||
|
"""
|
||||||
|
USERNAME_FORCE_CASE = True
|
||||||
|
APPROVE_USERNAME = False
|
||||||
|
|
||||||
|
"""
|
||||||
|
Player activation
|
||||||
|
-----------------
|
||||||
|
ACTIVATE_PLAYER : bool
|
||||||
|
Activate player automatically so no email needs to be sent.
|
||||||
|
Enabling this option requires a SendGrid API key.
|
||||||
|
ACTIVATE_LINK : str
|
||||||
|
URL player is taken to for activation.
|
||||||
|
ACTIVATE_REDIRECT : str
|
||||||
|
URL to redirect to when player has activated their account
|
||||||
|
via email.
|
||||||
|
"""
|
||||||
|
ACTIVATE_PLAYER = True
|
||||||
|
ACTIVATE_LINK = 'http://secure.clubpenguin.com/create/activate/'
|
||||||
|
ACTIVATE_REDIRECT = ''
|
||||||
|
|
||||||
|
"""
|
||||||
|
Email
|
||||||
|
-----
|
||||||
|
SITE_NAME : str
|
||||||
|
The name of your site.
|
||||||
|
FROM_EMAIL : str
|
||||||
|
Will appear as the sender for emails sent via the SendGrid
|
||||||
|
API.
|
||||||
|
SENDGRID_API_KEY : str
|
||||||
|
Required for sending emails via the SendGrid API.
|
||||||
|
EMAIL_WHITELIST : list
|
||||||
|
List of email domains to accept. If set to an empty list
|
||||||
|
or `None` then dash will assume all email domains are
|
||||||
|
accepted.
|
||||||
|
MAX_ACCOUNT_EMAIL : int
|
||||||
|
Number of accounts which can be tied to a single email
|
||||||
|
address.
|
||||||
|
.. SendGrid registration:
|
||||||
|
https://signup.sendgrid.com/
|
||||||
|
"""
|
||||||
|
SITE_NAME = 'Houdini'
|
||||||
|
FROM_EMAIL = 'noreply@houdi.ni'
|
||||||
|
SENDGRID_API_KEY = ''
|
||||||
|
EMAIL_WHITELIST = ['gmail.com', 'hotmail.com']
|
||||||
|
MAX_ACCOUNT_EMAIL = 5
|
||||||
|
|
||||||
|
"""
|
||||||
|
Cryptography
|
||||||
|
------------
|
||||||
|
STATIC_KEY : str
|
||||||
|
Static key used to hash passwords. Should not be
|
||||||
|
changed unless required by login server auth.
|
||||||
|
"""
|
||||||
|
STATIC_KEY = 'houdini'
|
1
dash
Submodule
1
dash
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit e99056e4fb9ec966fc5f862ca9fd56a4a877a283
|
14
default.conf
Normal file
14
default.conf
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
server {
|
||||||
|
listen 80 default_server;
|
||||||
|
server_name _;
|
||||||
|
|
||||||
|
location /play {
|
||||||
|
root /usr/share/nginx/legacy/;
|
||||||
|
index index.html index.htm;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /media {
|
||||||
|
root /usr/share/nginx/legacy/;
|
||||||
|
index index.html index.htm;
|
||||||
|
}
|
||||||
|
}
|
159
docker-compose.yml
Normal file
159
docker-compose.yml
Normal file
@ -0,0 +1,159 @@
|
|||||||
|
version: '3.7'
|
||||||
|
|
||||||
|
services:
|
||||||
|
db:
|
||||||
|
image: postgres:12.2-alpine
|
||||||
|
restart: always
|
||||||
|
environment:
|
||||||
|
POSTGRES_PASSWORD: postgres
|
||||||
|
networks:
|
||||||
|
- wand
|
||||||
|
ports:
|
||||||
|
- 5432:5432
|
||||||
|
volumes:
|
||||||
|
- ./houdini-asyncio/houdini.sql:/docker-entrypoint-initdb.d/houdini.sql
|
||||||
|
redis:
|
||||||
|
image: redis:5.0.9-alpine
|
||||||
|
networks:
|
||||||
|
- wand
|
||||||
|
ports:
|
||||||
|
- 6379
|
||||||
|
web:
|
||||||
|
image: nginx:1.17.10-alpine
|
||||||
|
ports:
|
||||||
|
- 80:80
|
||||||
|
networks:
|
||||||
|
- wand
|
||||||
|
links:
|
||||||
|
- dash:dash
|
||||||
|
volumes:
|
||||||
|
- ./legacy-media:/usr/share/nginx/legacy
|
||||||
|
- ./vanilla-media:/usr/share/nginx/vanilla
|
||||||
|
|
||||||
|
- ./default.conf:/etc/nginx/conf.d/default.conf
|
||||||
|
- ./legacy.conf:/etc/nginx/conf.d/legacy.conf
|
||||||
|
- ./vanilla.conf:/etc/nginx/conf.d/vanilla.conf
|
||||||
|
houdini_login:
|
||||||
|
build: ./houdini-asyncio
|
||||||
|
image: houdini
|
||||||
|
networks:
|
||||||
|
- wand
|
||||||
|
ports:
|
||||||
|
- 6112:6112
|
||||||
|
volumes:
|
||||||
|
- ./houdini-asyncio:/usr/src/houdini
|
||||||
|
depends_on:
|
||||||
|
- db
|
||||||
|
- redis
|
||||||
|
links:
|
||||||
|
- db:db
|
||||||
|
- redis:redis
|
||||||
|
command: ["dockerize", "-wait", "tcp://db:5432", "-wait", "tcp://redis:6379", "-wait-retry-interval", "3s",
|
||||||
|
"python", "bootstrap.py", "login",
|
||||||
|
"--redis-address", "redis",
|
||||||
|
"--database-address", "db",
|
||||||
|
"--database-user", "postgres",
|
||||||
|
"--database-password", "postgres"]
|
||||||
|
|
||||||
|
houdini_blizzard:
|
||||||
|
image: houdini
|
||||||
|
networks:
|
||||||
|
- wand
|
||||||
|
ports:
|
||||||
|
- 9875:9875
|
||||||
|
volumes:
|
||||||
|
- ./houdini-asyncio:/usr/src/houdini
|
||||||
|
depends_on:
|
||||||
|
- houdini_login
|
||||||
|
links:
|
||||||
|
- db:db
|
||||||
|
- redis:redis
|
||||||
|
command: ["dockerize", "-wait", "tcp://db:5432", "-wait", "tcp://redis:6379", "-wait-retry-interval", "3s",
|
||||||
|
"python", "bootstrap.py", "world",
|
||||||
|
"--redis-address", "redis",
|
||||||
|
"--database-address", "db",
|
||||||
|
"--database-user", "postgres",
|
||||||
|
"--database-password", "postgres"]
|
||||||
|
|
||||||
|
houdini_glaciar:
|
||||||
|
image: houdini
|
||||||
|
networks:
|
||||||
|
- wand
|
||||||
|
ports:
|
||||||
|
- 9876:9876
|
||||||
|
volumes:
|
||||||
|
- ./houdini-asyncio:/usr/src/houdini
|
||||||
|
depends_on:
|
||||||
|
- houdini_login
|
||||||
|
links:
|
||||||
|
- db:db
|
||||||
|
- redis:redis
|
||||||
|
command: ["dockerize", "-wait", "tcp://db:5432", "-wait", "tcp://redis:6379", "-wait-retry-interval", "3s",
|
||||||
|
"python", "bootstrap.py", "world",
|
||||||
|
"-id", "3101", "--name", "glaciar", "--port", "9876", "--lang", "es",
|
||||||
|
"--redis-address", "redis",
|
||||||
|
"--database-address", "db",
|
||||||
|
"--database-user", "postgres",
|
||||||
|
"--database-password", "postgres"]
|
||||||
|
|
||||||
|
houdini_avalanche:
|
||||||
|
image: houdini
|
||||||
|
networks:
|
||||||
|
- wand
|
||||||
|
ports:
|
||||||
|
- 9877:9877
|
||||||
|
volumes:
|
||||||
|
- ./houdini-asyncio:/usr/src/houdini
|
||||||
|
depends_on:
|
||||||
|
- houdini_login
|
||||||
|
links:
|
||||||
|
- db:db
|
||||||
|
- redis:redis
|
||||||
|
command: ["dockerize", "-wait", "tcp://db:5432", "-wait", "tcp://redis:6379", "-wait-retry-interval", "3s",
|
||||||
|
"python", "bootstrap.py", "world",
|
||||||
|
"-id", "3102", "--name", "avalanche", "--port", "9877", "--lang", "pt",
|
||||||
|
"--redis-address", "redis",
|
||||||
|
"--database-address", "db",
|
||||||
|
"--database-user", "postgres",
|
||||||
|
"--database-password", "postgres"]
|
||||||
|
|
||||||
|
houdini_yeti:
|
||||||
|
image: houdini
|
||||||
|
networks:
|
||||||
|
- wand
|
||||||
|
ports:
|
||||||
|
- 9878:9878
|
||||||
|
volumes:
|
||||||
|
- ./houdini-asyncio:/usr/src/houdini
|
||||||
|
depends_on:
|
||||||
|
- houdini_login
|
||||||
|
links:
|
||||||
|
- db:db
|
||||||
|
- redis:redis
|
||||||
|
command: ["dockerize", "-wait", "tcp://db:5432", "-wait", "tcp://redis:6379", "-wait-retry-interval", "3s",
|
||||||
|
"python", "bootstrap.py", "world",
|
||||||
|
"-id", "3103", "--name", "yeti", "--port", "9878", "--lang", "fr",
|
||||||
|
"--redis-address", "redis",
|
||||||
|
"--database-address", "db",
|
||||||
|
"--database-user", "postgres",
|
||||||
|
"--database-password", "postgres"]
|
||||||
|
|
||||||
|
dash:
|
||||||
|
build: ./dash
|
||||||
|
networks:
|
||||||
|
- wand
|
||||||
|
ports:
|
||||||
|
- 3000
|
||||||
|
volumes:
|
||||||
|
- ./dash:/usr/src/dash
|
||||||
|
- ./config.py:/usr/src/dash/config.py
|
||||||
|
depends_on:
|
||||||
|
- db
|
||||||
|
- redis
|
||||||
|
links:
|
||||||
|
- db:db
|
||||||
|
command: dockerize -wait tcp://db:5432 python bootstrap.py -c config.py
|
||||||
|
|
||||||
|
networks:
|
||||||
|
wand:
|
||||||
|
driver: bridge
|
1
houdini-asyncio
Submodule
1
houdini-asyncio
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 82d7d90c0e59f27cb17e24ce830cc791e84d16fe
|
1
legacy-media
Submodule
1
legacy-media
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 82eed3529ac82caccf127b254659d4d3abe125e4
|
34
legacy.conf
Normal file
34
legacy.conf
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
server {
|
||||||
|
server_name play.*;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
root /usr/share/nginx/legacy/play;
|
||||||
|
index index.html index.htm;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /create_account/create_account.php {
|
||||||
|
proxy_pass http://dash:3000/create;
|
||||||
|
proxy_redirect off;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /create/activate {
|
||||||
|
proxy_pass http://localhost:3000/create/activate;
|
||||||
|
proxy_redirect off;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
server {
|
||||||
|
server_name media.*;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
root /usr/share/nginx/legacy/media;
|
||||||
|
index index.html index.htm;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
58
nginx.conf
Normal file
58
nginx.conf
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
user nginx;
|
||||||
|
pid /run/nginx.pid;
|
||||||
|
worker_processes auto;
|
||||||
|
worker_rlimit_nofile 65535;
|
||||||
|
|
||||||
|
events {
|
||||||
|
multi_accept on;
|
||||||
|
worker_connections 65535;
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
charset utf-8;
|
||||||
|
sendfile on;
|
||||||
|
tcp_nopush on;
|
||||||
|
tcp_nodelay on;
|
||||||
|
server_tokens off;
|
||||||
|
log_not_found off;
|
||||||
|
types_hash_max_size 2048;
|
||||||
|
client_max_body_size 16M;
|
||||||
|
|
||||||
|
include mime.types;
|
||||||
|
default_type application/octet-stream;
|
||||||
|
|
||||||
|
access_log /var/log/nginx/access.log;
|
||||||
|
error_log /var/log/nginx/error.log warn;
|
||||||
|
|
||||||
|
ssl_session_timeout 1d;
|
||||||
|
ssl_session_cache shared:SSL:10m;
|
||||||
|
ssl_session_tickets off;
|
||||||
|
|
||||||
|
ssl_dhparam /etc/nginx/dhparam.pem;
|
||||||
|
|
||||||
|
ssl_protocols TLSv1.2 TLSv1.3;
|
||||||
|
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
|
||||||
|
|
||||||
|
ssl_stapling on;
|
||||||
|
ssl_stapling_verify on;
|
||||||
|
resolver 1.1.1.1 1.0.0.1 8.8.8.8 8.8.4.4 208.67.222.222 208.67.220.220 valid=60s;
|
||||||
|
resolver_timeout 2s;
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 80 default_server;
|
||||||
|
server_name _;
|
||||||
|
|
||||||
|
location /play {
|
||||||
|
root /usr/share/nginx/legacy/play;
|
||||||
|
index index.html index.htm;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /media {
|
||||||
|
root /usr/share/nginx/legacy/media;
|
||||||
|
index index.html index.htm;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
include /etc/nginx/conf.d/*.conf;
|
||||||
|
include /etc/nginx/sites-enabled/*;
|
||||||
|
}
|
22
servers.xml
Normal file
22
servers.xml
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!---
|
||||||
|
Eventually the clients will all look here to establish a connection to
|
||||||
|
houdini. Right now, this file is redundant.
|
||||||
|
--->
|
||||||
|
<servers>
|
||||||
|
<environment name="stage">
|
||||||
|
<login address="127.0.0.1" port="6112" />
|
||||||
|
<language locale="en">
|
||||||
|
<server id="3100" name="Blizzard" safe="false" address="127.0.0.1" port="9875" />
|
||||||
|
</language>
|
||||||
|
<language locale="es">
|
||||||
|
<server id="3101" name="Glaciar" safe="false" address="127.0.0.1" port="9876" />
|
||||||
|
</language>
|
||||||
|
<language locale="pt">
|
||||||
|
<server id="3102" name="Avalanche" safe="false" address="127.0.0.1" port="9877" />
|
||||||
|
</language>
|
||||||
|
<language locale="fr">
|
||||||
|
<server id="3103" name="Yeti" safe="false" address="127.0.0.1" port="9878" />
|
||||||
|
</language>
|
||||||
|
</environment>
|
||||||
|
</servers>
|
1
vanilla-media
Submodule
1
vanilla-media
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit acb4b9401609bc0cd01872be0e94d65bdc4ca03c
|
34
vanilla.conf
Normal file
34
vanilla.conf
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
server {
|
||||||
|
server_name new.*;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
root /usr/share/nginx/vanilla/play;
|
||||||
|
index index.html index.htm;
|
||||||
|
}
|
||||||
|
|
||||||
|
location ~ ^/avatar/(.*)/cp$ {
|
||||||
|
proxy_pass http://dash:3000/avatar/$1$is_args$args;
|
||||||
|
proxy_redirect off;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
server {
|
||||||
|
server_name vanilla.*;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
root /usr/share/nginx/vanilla/media;
|
||||||
|
index index.html index.htm;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /social/autocomplete/v2/search/suggestions {
|
||||||
|
proxy_pass http://localhost:3000/autocomplete;
|
||||||
|
proxy_redirect off;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user