Пример #1
0
    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
Пример #2
0
    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")
Пример #3
0
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'))
Пример #4
0
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)
Пример #5
0
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)
Пример #6
0
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
Пример #7
0
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))