Skip to content

Commit 144b56e

Browse files
author
eshaan7
committed
flask-admin added, admin views added
1 parent 82b73eb commit 144b56e

File tree

7 files changed

+47
-10
lines changed

7 files changed

+47
-10
lines changed

src/FlaskRTBCTF/__init__.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,32 @@
22
from flask_sqlalchemy import SQLAlchemy
33
from flask_bcrypt import Bcrypt
44
from flask_login import LoginManager
5+
from flask_admin import Admin
56
from flask_mail import Mail
67
from FlaskRTBCTF.config import Config
78
import os
89

910
db = SQLAlchemy()
1011
bcrypt = Bcrypt()
1112
login_manager = LoginManager()
13+
admin_manager = Admin()
1214
login_manager.login_view = 'users.login'
1315
login_manager.login_message_category = 'info'
1416
mail = Mail()
1517

16-
1718
def create_app(config_class=Config):
1819
app = Flask(__name__)
1920
app.config.from_object(Config)
2021

2122
db.init_app(app)
2223
bcrypt.init_app(app)
2324
login_manager.init_app(app)
25+
admin_manager.init_app(app)
26+
# Add model views
27+
from FlaskRTBCTF.admin.views import MyModelView
28+
from FlaskRTBCTF.models import User, Score
29+
admin_manager.add_view(MyModelView(User, db.session))
30+
admin_manager.add_view(MyModelView(Score, db.session))
2431
mail.init_app(app)
2532

2633
from flask_sslify import SSLify

src/FlaskRTBCTF/admin/__init__.py

Whitespace-only changes.

src/FlaskRTBCTF/admin/views.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
''' Admin Model Views '''
2+
3+
from flask import abort
4+
from flask_login import current_user
5+
from flask_admin.contrib.sqla import ModelView
6+
7+
class MyModelView(ModelView):
8+
9+
def is_accessible(self):
10+
if not current_user.is_authenticated or not current_user.isAdmin:
11+
# permission denied
12+
abort(403)
13+
if current_user.isAdmin:
14+
return True
15+
return False
16+
17+
def _handle_view(self, name, **kwargs):
18+
"""
19+
Override builtin _handle_view in order to redirect users when a view is
20+
not accessible.
21+
"""
22+
if not self.is_accessible():
23+
if current_user.is_authenticated:
24+
# permission denied
25+
abort(403)
26+
#else:
27+
# login
28+
# return redirect(url_for('user.login', next=request.url))

src/FlaskRTBCTF/config.py

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,20 @@
11
import os
22

3+
''' Flask related Configurations. Note: DO NOT FORGET TO CHANGE SECRET_KEY ! '''
4+
35
class Config:
46
SECRET_KEY = 'you-will-never-guess' # os.environ.get('SECRET_KEY')
57
SQLALCHEMY_DATABASE_URI = 'sqlite:///site.db' # os.environ.get('SQLALCHEMY_DATABASE_URI')
68
SQLALCHEMY_TRACK_MODIFICATIONS = False
7-
DEBUG = False
9+
DEBUG = False # Turn DEBUG OFF before deployment
810
MAIL_SERVER = 'smtp.googlemail.com'
911
MAIL_PORT = 587
1012
MAIL_USE_TLS = True
1113
MAIL_USERNAME = os.environ.get('EMAIL_USER')
1214
MAIL_PASSWORD = os.environ.get('EMAIL_PASS')
1315

16+
''' CTF related Configuration '''
17+
1418
ctfname = "RootTheBox CTF"
1519
RunningTime = '{ "from": "3:00 PM 7th July 2019", "to": "12:00 AM 8th July 2019", "TimeZone": "IST" }'
1620
box = '{ "name": "My Awesome Pwnable Box", "ip": "127.0.0.1", "os": "Linux", "points": { "user": 10, "root": 20 }, "hardness": "You tell" }'
@@ -19,10 +23,4 @@ class Config:
1923
userScore = 10
2024
rootScore = 20
2125

22-
'''
23-
Creating site.db file
24-
$ source venv/bin/activate
25-
$ python3 # open python interpreter
26-
>>> from FlaskRTBCTF import db, create_app
27-
>>> db.create_all(app=create_app())
28-
'''
26+
# NOTE: CHANGE DEFAULT ADMIN CREDENTIALS in create_db.py !!!

src/FlaskRTBCTF/models.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ class User(db.Model, UserMixin):
1515
username = db.Column(db.String(40), unique=True, nullable=False)
1616
email = db.Column(db.String(120), unique=True, nullable=False)
1717
password = db.Column(db.String(60), nullable=False)
18+
confirmed_at = db.Column(db.DateTime())
19+
isAdmin = db.Column(db.Boolean, default=False)
1820

1921
def get_reset_token(self, expires_sec=1800):
2022
s = Serializer(current_app.config['SECRET_KEY'], expires_sec)
@@ -42,6 +44,8 @@ class Score(db.Model):
4244

4345
def __repr__(self):
4446
return f"Score('{self.userid}', '{self.score}')"
47+
48+
4549

4650

4751

src/FlaskRTBCTF/site.db

-20 KB
Binary file not shown.

src/FlaskRTBCTF/users/routes.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ def login():
4040
if form.validate_on_submit():
4141
user = User.query.filter_by(username=form.username.data).first()
4242
if user and bcrypt.check_password_hash(user.password, form.password.data):
43-
login_user(user, remember=form.remember.data)
43+
login_user(user, remember=form.remember.data, force=True)
4444
next_page = request.args.get('next')
4545
return redirect(next_page) if next_page else redirect(url_for('main.home'))
4646
else:

0 commit comments

Comments
 (0)