mirror of
https://github.com/TitanEmbeds/Titan.git
synced 2024-12-24 14:07:03 +01:00
Converted webapp portion to python 3.5. Resolves #32
This commit is contained in:
parent
15011078c8
commit
fb8cfe3abc
@ -14,11 +14,11 @@ There was a time when Discord doesn't support embedding the chat on a webpage. B
|
||||
|
||||
# Installation
|
||||
Would you like to run your own copy of Titan Embeds? There are two parts that integrate nicely together. The webapp (website) handles the frontend and communication with the database to retrieve server messages, etc. The discordbot (bot) handles the communcation
|
||||
between Discord's websockets and pushing out the data to the database for the webapp. Check out the respective folder for their installation (pay attention to the python versions!) instructions.
|
||||
between Discord's websockets and pushing out the data to the database for the webapp. Check out the respective folder for their installation instructions.
|
||||
|
||||
# Database installation
|
||||
To set up the database for it to work with the webapp and the discordbot, one must use **alembic** to *migrate* their databases to the current database state. To do so, please follow these instructions.
|
||||
1. Install alembic with **Python 2.7's pip** `pip install alembic`
|
||||
1. Install alembic with **Python 3.5's pip** `pip install alembic`
|
||||
2. Change your directory to the webapp where the alembic files are located `cd webapp`
|
||||
3. Clone `alembic.example.ini` into your own `alembic.ini` file to find and edit the following line `sqlalchemy.url` to equal your database uri. [See here](http://docs.sqlalchemy.org/en/latest/core/engines.html#database-urls) if you need help understanding how database uri works in SQLalchemy.
|
||||
4. In your terminal, run `alembic upgrade head` to upgrade your database tables to the current version on git. As long as there are only *INFO* messages and no errors, you should be fine.
|
||||
|
@ -9,17 +9,13 @@ cp ~/workspace/webapp/config.example.py ~/workspace/webapp/config.py
|
||||
cp ~/workspace/discordbot/config.example.py ~/workspace/discordbot/config.py
|
||||
cp ~/workspace/webapp/alembic.example.ini ~/workspace/webapp/alembic.ini
|
||||
|
||||
echo "[C9Setup] Installing discordbot dependencies"
|
||||
cd ~/workspace/discordbot/
|
||||
echo "[C9Setup] Installing Titan dependencies"
|
||||
cd ~/workspace/
|
||||
sudo python3.5 -m pip install -r requirements.txt
|
||||
sudo python3.5 -m pip install pymysql
|
||||
|
||||
echo "[C9Setup] Installing webapp dependencies"
|
||||
cd ~/workspace/webapp
|
||||
sudo pip install -r requirements.txt
|
||||
sudo pip install alembic pymysql
|
||||
sudo python3.5 -m pip install alembic pymysql
|
||||
|
||||
echo "[C9Setup] Auto populating alembic.ini database url and titan database table"
|
||||
cd ~/workspace/webapp
|
||||
#sqlalchemy.url = mysql+pymysql://root@localhost/titan
|
||||
sed -i '32s/.*/sqlalchemy.url = mysql+pymysql:\/\/root@localhost\/titan/' ~/workspace/webapp/alembic.ini
|
||||
alembic upgrade head
|
||||
@ -34,6 +30,7 @@ sed -i "11s/.*/\'database-uri\': \"mysql+pymysql:\/\/root@localhost\/titan\",/"
|
||||
sed -i "8s/.*/\'app-location\': \"\/home\/ubuntu\/workspace\/webapp\/\",/" ~/workspace/webapp/config.py
|
||||
|
||||
echo "[C9Setup] Making sure everything can be ran"
|
||||
cd ~/workspace/
|
||||
sudo chmod -R 777 *
|
||||
|
||||
echo "------------------------------"
|
||||
|
@ -1,3 +1,8 @@
|
||||
flask
|
||||
flask-sqlalchemy
|
||||
flask_limiter
|
||||
requests_oauthlib
|
||||
Flask-SSLify
|
||||
paypalrestsdk
|
||||
https://github.com/TitanEmbeds/discord.py/archive/async.zip#egg=discord.py[voice]
|
||||
sqlalchemy
|
||||
asyncio_extras
|
@ -2,7 +2,7 @@
|
||||
The webapp portion handles the frontend (it's what the users see). The webapp highly depends on the discordbot to push websockets data to the database.
|
||||
|
||||
# Installation
|
||||
1. Clone the repo (make sure you have **Python 2.7** installed on your system. This webapp portion depends on that specific python version)
|
||||
1. Clone the repo (make sure you have **Python 3.5** installed on your system. This webapp portion depends on that specific python version)
|
||||
2. Install the pip requirements `pip install -r requirements.txt`
|
||||
3. Clone `config.example.py` and rename it to `config.py`. Edit the file to your standards
|
||||
4. Run the development web via `python run.py` -- Though we suggest to use a better server software (look into gunicorn, nginx, uwsgi, etc)
|
@ -1,6 +0,0 @@
|
||||
flask
|
||||
flask-sqlalchemy
|
||||
flask_limiter
|
||||
requests_oauthlib
|
||||
Flask-SSLify
|
||||
paypalrestsdk
|
@ -1,12 +1,9 @@
|
||||
from config import config
|
||||
from database import db
|
||||
from .database import db
|
||||
from flask import Flask, render_template, request, session, url_for, redirect, jsonify
|
||||
from flask_sslify import SSLify
|
||||
from titanembeds.utils import rate_limiter, discord_api, bot_alive
|
||||
import blueprints.api
|
||||
import blueprints.user
|
||||
import blueprints.admin
|
||||
import blueprints.embed
|
||||
from .blueprints import api, user, admin, embed
|
||||
import os
|
||||
from titanembeds.database import get_administrators_list
|
||||
|
||||
@ -24,10 +21,10 @@ db.init_app(app)
|
||||
rate_limiter.init_app(app)
|
||||
sslify = SSLify(app, permanent=True)
|
||||
|
||||
app.register_blueprint(blueprints.api.api, url_prefix="/api", template_folder="/templates")
|
||||
app.register_blueprint(blueprints.admin.admin, url_prefix="/admin", template_folder="/templates")
|
||||
app.register_blueprint(blueprints.user.user, url_prefix="/user", template_folder="/templates")
|
||||
app.register_blueprint(blueprints.embed.embed, url_prefix="/embed", template_folder="/templates")
|
||||
app.register_blueprint(api.api, url_prefix="/api", template_folder="/templates")
|
||||
app.register_blueprint(admin.admin, url_prefix="/admin", template_folder="/templates")
|
||||
app.register_blueprint(user.user, url_prefix="/user", template_folder="/templates")
|
||||
app.register_blueprint(embed.embed, url_prefix="/embed", template_folder="/templates")
|
||||
|
||||
@app.route("/")
|
||||
def index():
|
||||
|
@ -1 +1 @@
|
||||
from admin import admin
|
||||
from .admin import admin
|
@ -1 +1 @@
|
||||
from api import api
|
||||
from .api import api
|
||||
|
@ -1 +1 @@
|
||||
from embed import embed
|
||||
from .embed import embed
|
||||
|
@ -1 +1 @@
|
||||
from user import user
|
||||
from .user import user
|
||||
|
@ -2,18 +2,18 @@ from flask_sqlalchemy import SQLAlchemy
|
||||
|
||||
db = SQLAlchemy()
|
||||
|
||||
from guilds import Guilds
|
||||
from unauthenticated_users import UnauthenticatedUsers
|
||||
from unauthenticated_bans import UnauthenticatedBans
|
||||
from authenticated_users import AuthenticatedUsers
|
||||
from guild_members import GuildMembers, list_all_guild_members, get_guild_member
|
||||
from keyvalue_properties import KeyValueProperties, set_keyvalproperty, get_keyvalproperty, getexpir_keyvalproperty, setexpir_keyvalproperty, ifexists_keyvalproperty, delete_keyvalproperty
|
||||
from messages import Messages, get_channel_messages
|
||||
from cosmetics import Cosmetics
|
||||
from user_css import UserCSS
|
||||
from administrators import Administrators, get_administrators_list
|
||||
from titan_tokens import TitanTokens, get_titan_token
|
||||
from token_transactions import TokenTransactions
|
||||
from .guilds import Guilds
|
||||
from .unauthenticated_users import UnauthenticatedUsers
|
||||
from .unauthenticated_bans import UnauthenticatedBans
|
||||
from .authenticated_users import AuthenticatedUsers
|
||||
from .guild_members import GuildMembers, list_all_guild_members, get_guild_member
|
||||
from .keyvalue_properties import KeyValueProperties, set_keyvalproperty, get_keyvalproperty, getexpir_keyvalproperty, setexpir_keyvalproperty, ifexists_keyvalproperty, delete_keyvalproperty
|
||||
from .messages import Messages, get_channel_messages
|
||||
from .cosmetics import Cosmetics
|
||||
from .user_css import UserCSS
|
||||
from .administrators import Administrators, get_administrators_list
|
||||
from .titan_tokens import TitanTokens, get_titan_token
|
||||
from .token_transactions import TokenTransactions
|
||||
|
||||
def set_titan_token(user_id, amt_change, action):
|
||||
token_count = get_titan_token(user_id)
|
||||
|
@ -45,14 +45,14 @@ def user_has_permission(permission, index):
|
||||
return bool((int(permission) >> index) & 1)
|
||||
|
||||
def get_user_guilds():
|
||||
cache = get_keyvalproperty("OAUTH/USERGUILDS/"+make_user_cache_key())
|
||||
cache = get_keyvalproperty("OAUTH/USERGUILDS/"+str(make_user_cache_key()))
|
||||
if cache:
|
||||
return cache
|
||||
req = discordrest_from_user("/users/@me/guilds")
|
||||
if req.status_code != 200:
|
||||
abort(req.status_code)
|
||||
req = json.dumps(req.json())
|
||||
set_keyvalproperty("OAUTH/USERGUILDS/"+make_user_cache_key(), req, 250)
|
||||
set_keyvalproperty("OAUTH/USERGUILDS/"+str(make_user_cache_key()), req, 250)
|
||||
return req
|
||||
|
||||
def get_user_managed_servers():
|
||||
|
@ -16,12 +16,12 @@ def get_client_ipaddr():
|
||||
ip = request.headers['X-Real-IP']
|
||||
else: # general
|
||||
ip = request.remote_addr
|
||||
return hashlib.sha512(config['app-secret'] + ip).hexdigest()[:15]
|
||||
return hashlib.sha512((config['app-secret'] + ip).encode('utf-8')).hexdigest()[:15]
|
||||
|
||||
def generate_session_key():
|
||||
sess = session.get("sessionunique", None)
|
||||
if not sess:
|
||||
rand_str = lambda n: ''.join([random.choice(string.lowercase) for i in xrange(n)])
|
||||
rand_str = lambda n: ''.join([random.choice(string.ascii_lowercase) for i in range(n)])
|
||||
session['sessionunique'] = rand_str(25)
|
||||
sess = session['sessionunique']
|
||||
return sess #Totally unique
|
||||
@ -31,33 +31,33 @@ def make_cache_key(*args, **kwargs):
|
||||
args = str(hash(frozenset(request.args.items())))
|
||||
ip = get_client_ipaddr()
|
||||
sess = generate_session_key()
|
||||
return (path + args + sess + ip).encode('utf-8')
|
||||
return (path + args + sess + ip)
|
||||
|
||||
def make_user_cache_key(*args, **kwargs):
|
||||
ip = get_client_ipaddr()
|
||||
sess = generate_session_key()
|
||||
return (sess + ip).encode('utf-8')
|
||||
return (sess + ip)
|
||||
|
||||
def make_guilds_cache_key():
|
||||
sess = generate_session_key()
|
||||
ip = get_client_ipaddr()
|
||||
return (sess + ip + "user_guilds").encode('utf-8')
|
||||
return (sess + ip + "user_guilds")
|
||||
|
||||
def make_guildchannels_cache_key():
|
||||
guild_id = request.values.get('guild_id', "0")
|
||||
sess = generate_session_key()
|
||||
ip = get_client_ipaddr()
|
||||
return (sess + ip + guild_id + "user_guild_channels").encode('utf-8')
|
||||
return (sess + ip + guild_id + "user_guild_channels")
|
||||
|
||||
def channel_ratelimit_key(): # Generate a bucket with given channel & unique session key
|
||||
sess = generate_session_key()
|
||||
channel_id = request.values.get('channel_id', "0")
|
||||
return (sess + channel_id).encode('utf-8')
|
||||
return (sess + channel_id)
|
||||
|
||||
def guild_ratelimit_key():
|
||||
ip = get_client_ipaddr()
|
||||
guild_id = request.values.get('guild_id', "0")
|
||||
return (ip + guild_id).encode('utf-8')
|
||||
return (ip + guild_id)
|
||||
|
||||
def check_guild_existance(guild_id):
|
||||
dbGuild = Guilds.query.filter_by(guild_id=guild_id).first()
|
||||
|
Loading…
Reference in New Issue
Block a user