diff options
author | jomo <github@jomo.tv> | 2014-05-16 23:04:40 +0200 |
---|---|---|
committer | jomo <github@jomo.tv> | 2014-05-16 23:04:40 +0200 |
commit | 9f1ed1fb668f0a60170eac88909bf2b3e69402f8 (patch) | |
tree | 4a82a8a58a1f623ef29af4bc0fdb2c780d4f773c /webtoken.py |
first commit via git
Diffstat (limited to 'webtoken.py')
-rw-r--r-- | webtoken.py | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/webtoken.py b/webtoken.py new file mode 100644 index 0000000..51973f0 --- /dev/null +++ b/webtoken.py @@ -0,0 +1,110 @@ +import mysqlhack +import thread +from re import match +from com.ziclix.python.sql import zxJDBC +from helpers import * +from secrets import * +from random import randrange + + + + + +# table schema: +# string "uuid", limit: 32, null: false +# string "token", limit: 6, null: false +# string "email", null: false + + +def mysql_query(query, args, fetch=True): + conn = zxJDBC.connect(mysql_database, mysql_user, mysql_pass, "com.mysql.jdbc.Driver") + curs = conn.cursor() + curs.execute(query, args) + if fetch: + results = curs.fetchall() + else: + results = conn.commit() + curs.close() + conn.close() + return results + +def generate_token(length): + cons = 'bcdfghjklmnpqrstvwxyz' + vows = 'aeiou' + + token = '' + start = randrange(2) + for i in range(0, length): + if i % 2 == start: + token += cons[randrange(21)] + else: + token += vows[randrange(5)] + return token + +def set_token(uuid): + token = generate_token(6) + # REPLACE INTO website.register_token uuid={uuid}, token={token}; + return token + +def get_token(uuid): + # ae795aa86327408e92ab25c8a59f3ba1 + results = mysql_query("SELECT DISTINCT `token`, `email` FROM register_tokens WHERE `uuid` = ? LIMIT 1", (uuid,)) + return results[0] if len(results) == 1 else None + + +def token_command(sender, args, foo): + plugHeader(sender, "Website Token") + if isPlayer(sender): + try: + token = get_token(sender.getUniqueId().toString().replace("-", "")) + if token: + msg(sender, "&aEmail: &e%s" % token[1]) + msg(sender, "&aToken: &e%s" % token[0]) + else: + msg(sender, "&cYou don't have a token yet! Use &e/tokengen <email>&c.") + except Exception, e: + error(e) + msg(sender, "&cError getting your token, please contact an admin!") + else: + msg(sender, "&cThis is only for players..") + +def tokengen_command(sender, args, foo): + plugHeader(sender, "Website Token") + if isPlayer(sender): + if checkargs(sender, args, 1, -1): + # email regex, needs something followed by an @ followed by something + mail = " ".join(args) # email may contain spaces + if match("^.+@(.+\..{2,}|\[[0-9a-fA-F:.]+\])$", mail) != None: + token = generate_token(6) + uuid = sender.getUniqueId().toString().replace("-", "") + try: + mysql_query("DELETE FROM register_tokens WHERE `uuid` = ?", (uuid,), False) + mysql_query("INSERT INTO register_tokens (`uuid`, `token`, `email`) VALUES (?, ?, ?)", (uuid, token, mail), False) + msg(sender, "&aToken generated!") + msg(sender, "&aEmail: &e%s" % mail) + msg(sender, "&aToken: &e%s" % token) + except Exception, e: + error(e) + msg(sender, "&cError getting your token, please contact an admin!") + else: + msg(sender, "&c'&6%s&c' doesn't look like a valid email adress!" % mail) + else: + msg(sender, "&cThis is only for players..") + + + +@hook.command("token") +def onCommand(sender, args): + thread.start_new_thread(token_command, (sender, args, "foo")) + return True + +@hook.command("tokengen") +def onCommand(sender, args): + thread.start_new_thread(tokengen_command, (sender, args, "foo")) + return True + + + + + + |