Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

nov_27 #13

Open
wants to merge 15 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,8 @@
__pycache__
*.pyc
*.pyo
*.pyd
*.pyd
.env*
.flaskenv*
!.env.project
!.env.vault
14 changes: 0 additions & 14 deletions .env

This file was deleted.

28 changes: 28 additions & 0 deletions .github/workflows/npm-gulp.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
name: NodeJS with Gulp

on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]

jobs:
build:
runs-on: ubuntu-latest

strategy:
matrix:
node-version: [18.x, 20.x, 22.x]

steps:
- uses: actions/checkout@v4

- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}

- name: Build
run: |
npm install
gulp
Binary file added __pycache__/run.cpython-312.pyc
Binary file not shown.
Binary file added __pycache__/wsgi.cpython-312.pyc
Binary file not shown.
22 changes: 11 additions & 11 deletions apps/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,13 @@
Copyright (c) 2019 - present AppSeed.us
"""

import os
from flask import Flask
from flask_login import LoginManager
from flask_sqlalchemy import SQLAlchemy
from importlib import import_module
from apps.config import Config
# -*- encoding: utf-8 -*-


db = SQLAlchemy()
Expand All @@ -25,35 +28,32 @@ def register_blueprints(app):


def configure_database(app):

@app.before_first_request
def initialize_database():
try:
db.create_all()
except Exception as e:

print('> Error: DBMS Exception: ' + str(e) )

print('> Error: DBMS Exception: ' + str(e))
# fallback to SQLite
basedir = os.path.abspath(os.path.dirname(__file__))
app.config['SQLALCHEMY_DATABASE_URI'] = SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'db.sqlite3')

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + \
os.path.join(basedir, 'db', 'db.sqlite3')
print('> Fallback to SQLite ')
db.create_all()

@app.teardown_request
def shutdown_session(exception=None):
db.session.remove()

from apps.authentication.oauth import github_blueprint

def create_app(config):
def create_app(config_class=Config):
app = Flask(__name__)
app.config.from_object(config)
register_extensions(app)
app.config.from_object(config_class)

register_extensions(app)
from apps.authentication.oauth import github_blueprint
app.register_blueprint(github_blueprint, url_prefix="/#")

register_blueprints(app)
configure_database(app)

return app
Binary file added apps/__pycache__/__init__.cpython-312.pyc
Binary file not shown.
Binary file added apps/__pycache__/config.cpython-312.pyc
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
47 changes: 25 additions & 22 deletions apps/authentication/forms.py
Original file line number Diff line number Diff line change
@@ -1,31 +1,34 @@
# -*- encoding: utf-8 -*-
"""
Copyright (c) 2019 - present AppSeed.us
"""

from wtforms.validators import DataRequired, Email, EqualTo
from wtforms import StringField, PasswordField, SubmitField, DecimalField
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField
from wtforms.validators import Email, DataRequired

# login and registration
from wtforms import StringField, PasswordField, FloatField
from wtforms.validators import DataRequired, Email


class LoginForm(FlaskForm):
username = StringField('Username',
id='username_login',
validators=[DataRequired()])
password = PasswordField('Password',
id='pwd_login',
username = StringField('Username', id='username_login',
validators=[DataRequired()])
password = PasswordField('Password', id='pwd_login',
validators=[DataRequired()])


class CreateAccountForm(FlaskForm):
username = StringField('Username',
id='username_create',
validators=[DataRequired()])
email = StringField('Email',
id='email_create',
validators=[DataRequired(), Email()])
password = PasswordField('Password',
id='pwd_create',
username = StringField('Username', id='username_create',
validators=[DataRequired()])
email = StringField('Email', id='email_create',
validators=[DataRequired(), Email()])
password = PasswordField('Password', id='pwd_create',
validators=[DataRequired()])
starting_capital = FloatField(
'Starting Capital', validators=[DataRequired()])


class CreateAccountForm(FlaskForm):
username = StringField('Username', validators=[DataRequired()])
email = StringField('Email', validators=[DataRequired(), Email()])
password = PasswordField('Password', validators=[
DataRequired(), EqualTo('confirm', message='Passwords must match')])
confirm = PasswordField('Confirm Password')
starting_capital = DecimalField(
'Starting Capital', default=250000.00, validators=[DataRequired()])
submit = SubmitField('Register')
60 changes: 15 additions & 45 deletions apps/authentication/models.py
Original file line number Diff line number Diff line change
@@ -1,57 +1,27 @@
# -*- encoding: utf-8 -*-
"""
Copyright (c) 2019 - present AppSeed.us
"""

from flask_login import UserMixin

from sqlalchemy.orm import relationship
from flask_dance.consumer.storage.sqla import OAuthConsumerMixin

from apps import db, login_manager
from apps import db, login_manager # Import login_manager here

from apps.authentication.util import hash_pass

class Users(db.Model, UserMixin):

__tablename__ = 'Users'

id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), unique=True)
email = db.Column(db.String(64), unique=True)
password = db.Column(db.LargeBinary)

oauth_github = db.Column(db.String(100), nullable=True)

def __init__(self, **kwargs):
for property, value in kwargs.items():
# depending on whether value is an iterable or not, we must
# unpack it's value (when **kwargs is request.form, some values
# will be a 1-element list)
if hasattr(value, '__iter__') and not isinstance(value, str):
# the ,= unpack of a singleton fails PEP8 (travis flake8 test)
value = value[0]

if property == 'password':
value = hash_pass(value) # we need bytes here (not plain str)
class Users(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(150), unique=True, nullable=False)
email = db.Column(db.String(150), unique=True, nullable=False)
password = db.Column(db.String(150), nullable=False)
starting_capital = db.Column(db.Float, nullable=False)

setattr(self, property, value)

def __repr__(self):
return str(self.username)
class OAuth(OAuthConsumerMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
provider = db.Column(db.String(50), nullable=False)
provider_user_id = db.Column(db.String(256), nullable=False)
user_id = db.Column(db.Integer, db.ForeignKey(Users.id), nullable=False)
user = db.relationship(Users)


@login_manager.user_loader
def user_loader(id):
return Users.query.filter_by(id=id).first()


@login_manager.request_loader
def request_loader(request):
username = request.form.get('username')
user = Users.query.filter_by(username=username).first()
return user if user else None

class OAuth(OAuthConsumerMixin, db.Model):
user_id = db.Column(db.Integer, db.ForeignKey("Users.id", ondelete="cascade"), nullable=False)
user = db.relationship(Users)
def load_user(user_id):
return Users.query.get(int(user_id))
24 changes: 6 additions & 18 deletions apps/authentication/oauth.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,31 +2,19 @@
"""
Copyright (c) 2019 - present AppSeed.us
"""

import os
from flask import current_app as app
from flask_login import current_user, login_user
from flask_dance.consumer import oauth_authorized
from flask_dance.contrib.github import github, make_github_blueprint
from flask_dance.consumer.storage.sqla import SQLAlchemyStorage
from flask import redirect, url_for, flash
from flask_dance.consumer import oauth_authorized, oauth_error
from flask_dance.contrib.github import make_github_blueprint, github
from flask_login import current_user, login_user, logout_user
from sqlalchemy.orm.exc import NoResultFound
from apps.config import Config
from .models import Users, db, OAuth
from flask import redirect, url_for
from flask import flash
from apps import db # Import only db here
from .models import Users, OAuth # Import models here

github_blueprint = make_github_blueprint(
client_id=Config.GITHUB_ID,
client_secret=Config.GITHUB_SECRET,
scope = 'user',
storage=SQLAlchemyStorage(
OAuth,
db.session,
user=current_user,
user_required=False,
),
)

@oauth_authorized.connect_via(github_blueprint)
def github_logged_in(blueprint, token):
info = github.get("/user")
Expand Down
Loading