def __init_config(self): self._config = {} if os.path.isfile(self.config_file): with open(self.config_file, 'r') as f: json_config = json.load(f) account_config = json_config.get(constants.ACCOUNTS) or {} account_dict = {} for key, data in account_config.iteritems(): consumer_key = data.get(constants.CONSUMER_KEY) consumer_secret = data.get(constants.CONSUMER_SECRET) access_token = data.get(constants.ACCESS_TOKEN) access_token_secret = data.get( constants.ACCESS_TOKEN_SECRET) is_main_account = data.get( constants.IS_MAIN_ACCOUNT) or False is_dev_account = data.get( constants.IS_DEV_ACCOUNT) or False account = accounts.Account(consumer_key, consumer_secret, access_token, access_token_secret, is_main_account, is_dev_account) account_dict[key] = account self._config[constants.ACCOUNTS] = account_dict
def create_user(self, data): if len(data["args"].split(" ", 1)) != 2: return self._err("Please use 'createuser USERNAME PASSWORD'") username, password = data["args"].split(" ", 1) if self.get_user_by_username(username): return self._err("User already exists") new_account = accounts.Account(username, password) self._accounts.append(new_account) return self._msg("Account created")
def _account_update(): session = sessions.Session(app.config) account = accounts.Account(app.config, session['user']) # NOTE: ldap_update() calls in this manner would be highly ineffective, # but fortunately HTML forms send these fields one at a request, so it's # generally OK full_name = flask.request.values.get("full_name", "") if full_name != "": session['full_name'] = account['cn'] = full_name session.add_message(u"Imię/nazwisko zmienione.") email = flask.request.values.get("email", "") if email != "": token = account.request_email_change(email) url = flask.url_for('change_email', token=token, _external=True) values = { 'confirmation_link': url, 'nick': account['uid'], 'email_from': app.config['EMAIL_FROM'], 'email_to': email, } email_body = flask.render_template('email_change.txt', **values) smtp = fsmtp.SMTP(app.config) smtp.send_email(email, email_body) session.add_message(u"Wiadomość z linkiem potwierdzającym zmianę" \ u" wysłana.") password = flask.request.values.get("password", "") password2 = flask.request.values.get("password_repeated", "") if password != "" or password2 != "": if password != password2: message = u'Hasła się nie zgadzają.' title = u'Błąd ustawiania hasła' link = { 'url': flask.url_for('panel'), 'description': u'Powrót', } return flask.render_template('message.html', message=message, title=title, link=link) account.set_password(password) session.add_message(u"Hasło zmienione.") account.save() session.save() # TODO: some message maybe? return flask.redirect(flask.url_for('panel'))
def reset_password(token): try: account = accounts.Account(app.config, reset_password=token) except accounts.InvalidTokenError: title = u"Resetowanie hasła nieudane" message = u"Nieprawidłowy link do resetowania hasła." return flask.render_template('message.html', message=message, title=title) except accounts.NoSuchUserError: title = u"Resetowanie hasła nieudane" message = u"Użytkownik nie istnieje." return flask.render_template('message.html', message=message, title=title) password = flask.request.values.get("password", "") password2 = flask.request.values.get("password_repeated", "") if flask.request.method == "POST" and (password != "" or password2 != ""): if password != password2: message = u"Hasła się nie zgadzają" return flask.render_template('reset_password.html', nick=account['uid'], token=token, message=message) account.set_password(password) account.save() account.clear_reset_password_request() title = u"Resetowanie hasła udane" message = u"Hasło zresetowane." link = { 'url': flask.url_for('index'), 'description': u'Zaloguj', } return flask.render_template('message.html', message=message, title=title, link=link) return flask.render_template('reset_password.html', nick=account['uid'], token=token)
def change_email(token): try: account = accounts.Account(app.config, change_email=token) except accounts.InvalidTokenError: title = u"Resetowanie hasła nieudane" message = u"Nieprawidłowy link do resetowania hasła." return flask.render_template('message.html', message=message, title=title) except accounts.NoSuchUserError: title = u"Resetowanie hasła nieudane" message = u"Użytkownik nie istnieje." return flask.render_template('message.html', message=message, title=title) nick = account['uid'] old_email = account.old_field('contactMail')[0] new_email = account['contactMail'][0] if flask.request.method == "GET": return flask.render_template('change_email.html', token=token, nick=nick, new_email=new_email, old_email=old_email) # flask.request.method == "POST" # `account' is already prepared to update contactMail field account.save() account.clear_email_change_request() if flask.request.values.get("migrate") == "true": # XXX: lie about membership, because subscription requests for # non-members are silently ignored # FIXME: make it so mailman.MailLists doesn't need to know about # HS:Wro membership old_lists = mailman.MailLists(app.config, email=old_email) new_lists = mailman.MailLists( app.config, email=new_email, hsmember=True, ) for ol in old_lists.lists(): if ol['subscribed']: old_lists.unsubscribe(ol['name']) # if new e-mail was already subscribed to this list, this will # be a little excessive, but it doesn't matter new_lists.subscribe(ol['name']) session = sessions.Session(app.config) if len(session) > 0: session['email'] = account['contactMail'][0] session.add_message(u"Adres e-mail uaktualniony.") session.save() return flask.redirect(flask.url_for('panel')) else: title = u"Adres e-mail zmieniony" message = u"Adres e-mail uaktualniony." link = { 'url': flask.url_for('index'), 'description': u'Zaloguj', } return flask.render_template('message.html', message=message, title=title, link=link)
def login(): if 'reset_password' in flask.request.values: try: account = accounts.Account(app.config, flask.request.values['nick']) except accounts.NoSuchUserError: title = u"Resetowanie hasła" message = u"Nie ma takiego użytkownika." \ u" Czy chcesz się zarejestrować?" link = { 'url': flask.url_for('index'), 'description': u'Powrót do strony głównej', } return flask.render_template('message.html', message=message, title=title, link=link) token = account.request_reset_password() url = flask.url_for('reset_password', token=token, _external=True) values = { 'reset_password_link': url, 'nick': account['uid'], 'email_from': app.config['EMAIL_FROM'], 'email_to': account['contactMail'][0], } email_body = flask.render_template('email_reset_password.txt', **values) smtp = fsmtp.SMTP(app.config) smtp.send_email(account['contactMail'][0], email_body) title = u"Resetowanie hasła" message = u"E-mail dla resetowania hasła został wysłany." link = { 'url': flask.url_for('index'), 'description': u'Powrót do strony głównej', } return flask.render_template('message.html', message=message, title=title, link=link) try: username = flask.request.values['nick'] password = flask.request.values.get('password') account = accounts.Account(app.config, username, password) except accounts.AuthenticationError: title = u"Błąd logowania" message = u"Nieprawidłowy login lub błędne hasło." link = { 'url': flask.url_for('index'), 'description': u'Powrót', } return flask.render_template('message.html', message=message, title=title, link=link) session = sessions.Session(app.config) session['dn'] = account['dn'] session['user'] = account['uid'] session['full_name'] = account['cn'] session['member'] = account.field('isHSWroMember', default=False) session['verified'] = account.field('isVerified', default=False) session['email'] = account.field('contactMail', [None])[0] session['hs_emails'] = account.field('mail', []) session.save() response = flask.make_response(flask.redirect(flask.url_for('panel'))) (cookie_name, cookie_value) = session.cookie() response.set_cookie(cookie_name, cookie_value) return response
def algo(file, start_regional, region, start_gold, token, outfile): timer = utils.Timer() data = get_data(file) model = ARIMA() regionbank = accounts.Account(start_regional, region) wowbank = accounts.Account(start_gold, "WoW") records = recorder.Batch(fn=outfile, dirpath="data") dcs = evaluator.Decision(p0=0, p1=0, pred=0, tradetype="hold", tprice=0, volume=0) for i, row in enumerate(data): time = row[0] price = float(row[1]) timer.start() # Trading script begins here pred = model.next(price) # Need to load the model with initial values if i < 5: timer.stop() dcs = evaluator.Decision(p0=price, p1=price, pred=pred, tradetype="hold", tprice=price, volume=0) continue dcs = evaluator.evaluate(mp=price, prediction=price+pred, regionbank=regionbank, prior_dcs=dcs, token=token) # 'taper' will count volume decreased during a sale when there isn't enough in the # WoW account to sell at the suggested volume taper = 0 if dcs.tradetype is "buy": cost = token * dcs.volume gain = dcs.trade_price * dcs.volume regionbank.withdraw(cost) wowbank.deposit(gain) elif dcs.tradetype is "sell": cost = dcs.trade_price * dcs.volume gain = token * dcs.volume try: regionbank.deposit(gain) wowbank.withdraw(cost) except RuntimeError: while cost > wowbank.value: taper += 1 dcs.volume -= 1 dcs.trade_price = evaluator.Opt.sell_price(price, dcs.volume) cost = dcs.trade_price * dcs.volume regionbank.withdraw(token) wowbank.withdraw(cost) # Move profits to regional if wowbank.value > price: q = int(wowbank.value/price) - 1 regionbank.deposit(token*q) wowbank.withdraw(q*price) records.record(time=time, regionbank=regionbank, wowbank=wowbank, taper=taper, dcs=dcs, runtime=timer.stop()) #print(dcs.tradetype, dcs.price) print(regionbank.value + evaluator.gold_to_regional(wowbank.value, price/token))