Move auth tokens to server config.

This commit is contained in:
luxick
2018-03-15 13:14:54 +01:00
parent b5df3289b4
commit 4b8d2421a5
9 changed files with 93 additions and 70 deletions

2
.gitignore vendored
View File

@@ -91,3 +91,5 @@ ENV/
.idea .idea
install.txt install.txt
Screenshots/
.vscode

View File

@@ -102,6 +102,13 @@ def create_death(app: 'gtk_ui.GtkUi'):
:param app: Main Gtk application :param app: Main Gtk application
:return: Death object or None if dialog was canceled :return: Death object or None if dialog was canceled
""" """
# Set penalties
default_drink = app.drinks.data[0].name
store = app.ui.get_object('player_penalties_store')
store.clear()
for player in app.ui.get_object('episode_players_store'):
store.append([None, player[1], default_drink, player[0]])
# Run the dialog # Run the dialog
dialog = app.ui.get_object("edit_death_dialog") # type: Gtk.Dialog dialog = app.ui.get_object("edit_death_dialog") # type: Gtk.Dialog
result = dialog.run() result = dialog.run()

View File

@@ -29,7 +29,6 @@ class DialogHandlers:
def do_add_enemy(self, entry): def do_add_enemy(self, entry):
if entry.get_text(): if entry.get_text():
store = self.app.ui.get_object('enemy_season_store')
enemy = models.Enemy() enemy = models.Enemy()
enemy.name = entry.get_text() enemy.name = entry.get_text()
enemy.season = self.app.get_selected_season_id() enemy.season = self.app.get_selected_season_id()

View File

@@ -96,12 +96,22 @@ def reload_episode_stats(app: 'gtk_ui.GtkUi'):
drink_count = sum(len(death.penalties) for death in episode.deaths) drink_count = sum(len(death.penalties) for death in episode.deaths)
app.ui.get_object('ep_drinks_label').set_text(str(drink_count)) app.ui.get_object('ep_drinks_label').set_text(str(drink_count))
app.ui.get_object('ep_player_drinks_label').set_text(str(len(episode.deaths))) app.ui.get_object('ep_player_drinks_label').set_text(str(len(episode.deaths)))
# Compute booze stats
dl_booze = sum(len(death.penalties) * death.penalties[0].size for death in episode.deaths) dl_booze = sum(len(death.penalties) * death.penalties[0].size for death in episode.deaths)
l_booze = round(dl_booze / 10, 2) l_booze = round(dl_booze / 10, 2)
player_ml_booze = round((dl_booze * 100) / len(episode.players), 2)
app.ui.get_object('ep_booze_label').set_text('{}l'.format(l_booze)) app.ui.get_object('ep_booze_label').set_text('{}l'.format(l_booze))
dl_booze = sum(len(death.penalties) * death.penalties[0].size for death in episode.deaths) app.ui.get_object('ep_player_booze_label').set_text('{}ml'.format(player_ml_booze))
ml_booze = round(dl_booze * 10, 0)
app.ui.get_object('ep_player_booze_label').set_text('{}ml'.format(ml_booze)) # Compute pure alc stats
deaths = episode.deaths
dl_alc = 0
for death in deaths:
dl_alc += sum((penalty.size / 100) * penalty.drink.vol for penalty in death.penalties)
ml_alc = round(dl_alc * 100, 2)
app.ui.get_object('ep_alc_label').set_text('{}ml'.format(ml_alc))
# Compute hardest enemy stats
enemy_list = [death.enemy.name for death in episode.deaths] enemy_list = [death.enemy.name for death in episode.deaths]
sorted_list = Counter(enemy_list).most_common(1) sorted_list = Counter(enemy_list).most_common(1)
if sorted_list: if sorted_list:

View File

@@ -167,7 +167,7 @@
</object> </object>
</child> </child>
<child> <child>
<object class="GtkMenuItem"> <object class="GtkMenuItem" id="add_episode_item">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="label" translatable="yes">Add Episode</property> <property name="label" translatable="yes">Add Episode</property>
@@ -220,7 +220,7 @@
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<child> <child>
<object class="GtkMenuItem"> <object class="GtkMenuItem" id="add_death_item">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="label" translatable="yes">Add Death</property> <property name="label" translatable="yes">Add Death</property>
@@ -230,7 +230,7 @@
</object> </object>
</child> </child>
<child> <child>
<object class="GtkMenuItem"> <object class="GtkMenuItem" id="add_victory_item">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="label" translatable="yes">Add Victory</property> <property name="label" translatable="yes">Add Victory</property>
@@ -263,7 +263,7 @@
</object> </object>
</child> </child>
<child> <child>
<object class="GtkMenuItem"> <object class="GtkMenuItem" id="manage_drinks_item">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="label" translatable="yes">Manage Drinks</property> <property name="label" translatable="yes">Manage Drinks</property>
@@ -549,50 +549,6 @@
<property name="top_attach">0</property> <property name="top_attach">0</property>
</packing> </packing>
</child> </child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Most Deaths:</property>
<property name="xalign">1</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">7</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Hardest Enemy:</property>
<property name="xalign">1</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">8</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="ep_enemy_name_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">7</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="ep_worst_player_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">8</property>
</packing>
</child>
<child> <child>
<object class="GtkLabel"> <object class="GtkLabel">
<property name="visible">True</property> <property name="visible">True</property>
@@ -731,6 +687,34 @@
<property name="top_attach">6</property> <property name="top_attach">6</property>
</packing> </packing>
</child> </child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Hardest Enemy:</property>
<property name="xalign">1</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">7</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="ep_enemy_name_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">7</property>
</packing>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>

View File

@@ -14,7 +14,7 @@ DEFAULT_CONFIG = {
'auto_connect': False, 'auto_connect': False,
'servers': [{ 'servers': [{
'host': 'localhost', 'host': 'localhost',
'port': 12345, 'port': 55225,
'buffer_size': 1024, 'buffer_size': 1024,
'auth_token': ''} 'auth_token': ''}
] ]

View File

@@ -0,0 +1,18 @@
# This config will be copied on first launch.
# Edit the the copied file at '~/.config/dsst/server.json' before launching the server
DEFAULT_CONFIG = {
'database': {
'db_name': 'dsst',
'user': 'dsst',
'password': 'dsst'
},
'server': {
'host': 'localhost',
'port': 55225,
'buffer_size': 1024
},
'tokens': {
'<read_write_token_here>': 'rw',
'<read_only_token_here>': 'r'
}
}

View File

@@ -1,28 +1,23 @@
import json import json
import pickle import pickle
import socket import socket
import sys import sys
import os import os
from common import util, models from common import util, models
from dsst_server import func_read, func_write, tokens from dsst_server import func_read, func_write
from dsst_server.func_proxy import FunctionProxy from dsst_server.func_proxy import FunctionProxy
from dsst_server.data_access import sql, sql_func from dsst_server.data_access import sql, sql_func
from dsst_server.config import DEFAULT_CONFIG
PORT = 12345
HOST = socket.gethostname()
BUFFER_SIZE = 1024
class DsstServer: class DsstServer:
def __init__(self, config={}): def __init__(self, config):
self.socket_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.socket_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print('Created socket') print('Created socket')
server_conf = config.get('server')
self.socket_server.bind((HOST, PORT)) self.socket_server.bind((server_conf.get('host'), server_conf.get('port')))
print('Bound socket to {} on host {}'.format(PORT, HOST)) print('Bound socket to {} on host {}'.format(server_conf.get('port'), server_conf.get('host')))
# Initialize database # Initialize database
db_config = config.get('database') db_config = config.get('database')
@@ -37,7 +32,7 @@ class DsstServer:
'r': read_actions, 'r': read_actions,
'rw': read_actions + write_actions 'rw': read_actions + write_actions
} }
self.tokens = {token: parm_access[perms] for token, perms in tokens.TOKENS} self.tokens = {token: parm_access[perms] for token, perms in config.get('tokens').items()}
print('Loaded auth tokens: {}'.format(self.tokens.keys())) print('Loaded auth tokens: {}'.format(self.tokens.keys()))
def run(self): def run(self):
@@ -85,8 +80,21 @@ def load_config(config_path: str) -> dict:
return json.load(config_file) return json.load(config_file)
def save_config(config: dict, config_path: str):
path = os.path.dirname(config_path)
if not os.path.isdir(path):
os.mkdir(path)
with open(config_path, 'wb') as file:
file.write(json.dumps(config, sort_keys=True, indent=4, separators=(',', ': ')).encode('utf-8'))
def main(): def main():
config = os.path.join(os.path.expanduser('~'), '.config', 'dsst', 'server.json') config = os.path.join(os.path.expanduser('~'), '.config', 'dsst', 'server.json')
if not os.path.isfile(config):
save_config(DEFAULT_CONFIG, config)
print('No server config file found.\nCopied default config to "{}"\nPlease edit file before starting server.'
.format(config))
sys.exit(0)
server = DsstServer(load_config(config)) server = DsstServer(load_config(config))
try: try:
server.run() server.run()

View File

@@ -1,5 +0,0 @@
# Define access tokens here
# i.E: { 'read': ['a', 'b''],
# 'write': ['a']
# }
TOKENS = [('a', 'rw'), ('b', 'r')]