Skip to content

Commit f725e19

Browse files
authored
Merge pull request #39 from DogukanUrker/main
merging with main
2 parents 00d4c7e + 4657a17 commit f725e19

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+1541
-308
lines changed

README.md

Lines changed: 48 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1-
# [flaskBlog📜](https://dogukanurker.com/flaskblog)
1+
# [flaskBlog](https://dogukanurker.com/flaskblog) [<img src="https://raw.githubusercontent.com/DogukanUrker/flaskBlog/main/images/Icon180.ico" style='border-radius: 0.5rem; widht:60px; height: 60px;' />](https://dogukanurker.com/flaskblog)
22

33
**English** | [Türkçe](docs/readme_tr.md)
44

5+
<img src="https://raw.githubusercontent.com/DogukanUrker/flaskBlog/main/images/GitHubBanner.png" style='border-radius: 0.5rem; widht:768px; height: 384px;' />
6+
57
Simple blog app built with Flask.
68
<br/>
79
[Contact](mailto:[email protected])<br/>
@@ -18,6 +20,7 @@ Simple blog app built with Flask.
1820

1921
## Features 💫
2022

23+
2124
| Feature | Status |
2225
| :--------------------- | :----: |
2326
| User Page ||
@@ -49,9 +52,7 @@ Simple blog app built with Flask.
4952
| Custom Profile Picture ||
5053
| User Verification ||
5154

52-
##
53-
54-
Requirements 📦
55+
## Requirements 📦
5556

5657
- Flask
5758
- Passlib
@@ -60,6 +61,45 @@ Requirements 📦
6061
- Flaskwebgui <sub><sup>( if you run desktop.py )</sup></sub>
6162
- Python 3.10 or newer
6263

64+
## Languages 🧑🏻‍💻
65+
66+
### Backend
67+
68+
- Python
69+
70+
### Frontend
71+
72+
- HTML
73+
- CSS
74+
- JavaScript
75+
76+
## Libraries 📚
77+
78+
### Backend
79+
80+
- OS
81+
- SSL
82+
- Socket
83+
- Smtplib
84+
- Secrets
85+
- SQLite3
86+
- Time
87+
- Random
88+
- DateTime
89+
- Email
90+
- Passlib
91+
- Flask
92+
- WTForms
93+
- Flask_WTF
94+
- FlaskWebGui <sub><sup>( if you run desktop.py )</sup></sub>
95+
96+
### Frontend
97+
98+
- jQuery
99+
- TailwindCSS
100+
- Tabler Icons
101+
- Summer Note
102+
63103
## Installation ⬇️
64104

65105
download source code from Github 💾
@@ -101,3 +141,7 @@ Password: admin
101141
### Support 💰
102142

103143
<a href="https://dogukanurker.com/donate" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/arial-red.png" alt="Buy Me A Coffee" style="height: 60px !important;width: 217px !important;" ></a>
144+
145+
### Star History ✨
146+
147+
[![Star History Chart](https://api.star-history.com/svg?repos=dogukanurker/flaskblog&type=Date)](https://star-history.com/#dogukanurker/flaskblog&Date)

app.py

Lines changed: 64 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from helpers import message
22

3+
message(breaker=True)
34
message("3", "APP IS STARTING...")
45

56

@@ -23,7 +24,6 @@
2324
from routes.verifyUser import verifyUserBlueprint
2425
from routes.adminPanel import adminPanelBlueprint
2526
from routes.createPost import createPostBlueprint
26-
from routes.setUserRole import setUserRoleBlueprint
2727
from routes.passwordReset import passwordResetBlueprint
2828
from routes.changeUserName import changeUserNameBlueprint
2929
from routes.changePassword import changePasswordBlueprint
@@ -41,16 +41,31 @@
4141
LOG_IN,
4242
APP_HOST,
4343
APP_NAME,
44+
APP_PORT,
4445
DEBUG_MODE,
4546
TAILWIND_UI,
4647
REGISTRATION,
4748
LOG_FILE_ROOT,
4849
APP_ROOT_PATH,
4950
APP_SECRET_KEY,
5051
SESSION_PERMANENT,
51-
APP_PORT,
5252
)
53-
53+
from helpers import (
54+
RECAPTCHA,
55+
RECAPTCHA_LOGIN,
56+
RECAPTCHA_COMMENT,
57+
RECAPTCHA_SIGN_UP,
58+
RECAPTCHA_SITE_KEY,
59+
RECAPTCHA_POST_EDIT,
60+
RECAPTCHA_SECRET_KEY,
61+
RECAPTCHA_VERIFY_URL,
62+
RECAPTCHA_VERIFY_USER,
63+
RECAPTCHA_POST_CREATE,
64+
RECAPTCHA_PASSWORD_RESET,
65+
RECAPTCHA_PASSWORD_CHANGE,
66+
RECAPTCHA_USERNAME_CHANGE,
67+
RECAPTCHA_PROFILE_PICTURE_CHANGE,
68+
)
5469
from UISelector import TEMPLATE_FOLDER, STATIC_FOLDER
5570

5671
app = Flask(
@@ -64,6 +79,7 @@
6479
app.config["SESSION_PERMANENT"] = SESSION_PERMANENT
6580
csrf = CSRFProtect(app)
6681

82+
message(breaker=True)
6783
message("1", f"APP DEBUG MODE: {DEBUG_MODE}")
6884
message("3", f"APP NAME: {APP_NAME}")
6985
message("3", f"APP HOST: {APP_HOST}")
@@ -74,8 +90,42 @@
7490
message("3", f"LOG FILE ROOT: {LOG_FILE_ROOT}")
7591
message("3", f"LOG IN: {LOG_IN}")
7692
message("3", f"REGISTRATION: {REGISTRATION}")
93+
message(breaker=True)
7794

7895

96+
match RECAPTCHA:
97+
case True:
98+
match RECAPTCHA_SITE_KEY == "" or RECAPTCHA_SECRET_KEY == "":
99+
case True:
100+
message(
101+
"1",
102+
f"RECAPTCHA KEYS IS UNVALID THIS MAY CAUSE THE APPLICATION TO CRASH",
103+
)
104+
message(
105+
"1",
106+
f"PLEASE CHECK YOUR RECAPTCHA KEYS OR SET RECAPTCHA TO FALSE FROM TRUE IN 'constants.py'",
107+
)
108+
case False:
109+
message("2", "RECAPTCHA IS ON")
110+
message("3", f"RECAPTCHA RECAPTCHA_SITE_KEY KEY: {RECAPTCHA_SITE_KEY}")
111+
message("3", f"RECAPTCHA SECRET KEY: {RECAPTCHA_SECRET_KEY}")
112+
message("3", f"RECAPTCHA VERIFY URL: {RECAPTCHA_VERIFY_URL}")
113+
message("6", f"RECAPTCHA LOGIN: {RECAPTCHA_LOGIN}")
114+
message("6", f"RECAPTCHA SIGN UP: {RECAPTCHA_SIGN_UP }")
115+
message("6", f"RECAPTCHA POST CREATE: {RECAPTCHA_POST_CREATE}")
116+
message("6", f"RECAPTCHA POST EDIT: {RECAPTCHA_POST_EDIT }")
117+
message("6", f"RECAPTCHA COMMENT: {RECAPTCHA_COMMENT}")
118+
message("6", f"RECAPTCHA PASSWORD RESET: {RECAPTCHA_PASSWORD_RESET}")
119+
message("6", f"RECAPTCHA PASSWORD CHANGE: {RECAPTCHA_PASSWORD_CHANGE}")
120+
message("6", f"RECAPTCHA USERNAME CHANGE: {RECAPTCHA_USERNAME_CHANGE}")
121+
message("6", f"RECAPTCHA VERIFY USER: {RECAPTCHA_VERIFY_USER}")
122+
message(
123+
"6",
124+
f"RECAPTCHA PROFILE PICTURE CHANGE: {RECAPTCHA_PROFILE_PICTURE_CHANGE}",
125+
)
126+
case False:
127+
message("1", f"RECAPTCHA IS OFF")
128+
message(breaker=True)
79129
match TAILWIND_UI:
80130
case True:
81131
message("4", f"UI MODE: TAILWIND-CSS")
@@ -85,10 +135,12 @@
85135
message("4", f"TEMPLATE FOLDER: {TEMPLATE_FOLDER}")
86136
message("4", f"STATIC FOLDER: {STATIC_FOLDER}")
87137

138+
message(breaker=True)
88139
dbFolder()
89140
usersTable()
90141
postsTable()
91142
commentsTable()
143+
message(breaker=True)
92144

93145

94146
@app.context_processor
@@ -102,8 +154,14 @@ def notFound(e):
102154
return render_template("404.html"), 404
103155

104156

157+
@app.errorhandler(401)
158+
def unauthorized(e):
159+
message("1", "401 UNAUTHORIZED ERROR")
160+
return render_template("401.html"), 401
161+
162+
105163
@app.errorhandler(CSRFError)
106-
def handle_csrf_error(e):
164+
def csrfError(e):
107165
message("1", "CSRF ERROR")
108166
return render_template("csrfError.html", reason=e.description), 400
109167

@@ -121,7 +179,6 @@ def handle_csrf_error(e):
121179
app.register_blueprint(adminPanelBlueprint)
122180
app.register_blueprint(createPostBlueprint)
123181
app.register_blueprint(verifyUserBlueprint)
124-
app.register_blueprint(setUserRoleBlueprint)
125182
app.register_blueprint(passwordResetBlueprint)
126183
app.register_blueprint(changeUserNameBlueprint)
127184
app.register_blueprint(changePasswordBlueprint)
@@ -136,5 +193,7 @@ def handle_csrf_error(e):
136193
case "__main__":
137194
message("2", "APP STARTED SUCCESSFULLY")
138195
message("2", f"RUNNING ON http://{APP_HOST}:{APP_PORT}")
196+
message(breaker=True)
139197
app.run(debug=DEBUG_MODE, host=APP_HOST, port=APP_PORT)
198+
message(breaker=True)
140199
message("1", "APP SHUT DOWN")

constants.py

Lines changed: 47 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
from helpers import secrets, socket
22

3+
4+
### GENERAL APP SETTINGS ###
35
APP_NAME = "flaskblog" # NAME OF THE FLASK APP.
46
APP_ROOT_PATH = "." # THE PATH TO THE ROOT OF THE APP FILES.
57
APP_HOST = socket.gethostbyname(
@@ -11,9 +13,52 @@
1113
LOG_IN = True # TURN ON/OFF USER LOG IN UP.
1214
REGISTRATION = True # TURN ON/OFF USER SIGN UP.
1315
LOG_FILE_ROOT = "log.log" # ROOT OF THE LOG FILE FROM WHERE MESSAGES ARE PRINTED FROM THE MESSAGE MODULE.
16+
APP_SECRET_KEY = secrets.token_urlsafe(32) # FLASK APP'S SECRET KEY.
17+
SESSION_PERMANENT = True # FLASK APP'S SESSIONS.
18+
BREAKER_TEXT = "===================================================================================================="
19+
20+
### DATABASE SETTINGS ###
1421
DB_FOLDER_ROOT = "db" # ROOT OF THE DATABASE FOLDER WHERE .db FILES ARE LOCATED.
1522
DB_USERS_ROOT = DB_FOLDER_ROOT + "/users.db" # ROOT OF THE USERS DATABASE.
1623
DB_POSTS_ROOT = DB_FOLDER_ROOT + "/posts.db" # ROOT OF THE POSTS DATABASE.
1724
DB_COMMENTS_ROOT = DB_FOLDER_ROOT + "/comments.db" # ROOT OF THE COMMENTS DATABASE.
18-
APP_SECRET_KEY = secrets.token_urlsafe(32) # FLASK APP'S SECRET KEY.
19-
SESSION_PERMANENT = True # FLASK APP'S SESSIONS.
25+
26+
27+
### RECAPTCHA SETTINGS ###
28+
RECAPTCHA = False # TURN ON/OFF RECAPTCHA VERIFICATION. MORE INFO ABOUT RECAPTCHA: https://developers.google.com/recaptcha/docs/v3
29+
RECAPTCHA_SITE_KEY = "" # RECAPTCHA SITE KEY. SIGN UP FOR API KEY PAIR: http://www.google.com/recaptcha/admin
30+
RECAPTCHA_SECRET_KEY = "" # RECAPTCHA SECRET KEY. SIGN UP FOR API KEY PAIR: http://www.google.com/recaptcha/admin
31+
RECAPTCHA_VERIFY_URL = "https://www.google.com/recaptcha/api/siteverify" # RECAPTCHA VERIFY URL. DO NOT NEED TO CHANGE THIS.
32+
33+
# IF RECAPTCHA = False, YOU DO NOT NEED TO CHANGE THESE VARIABLES:
34+
RECAPTCHA_LOGIN = True # TURN ON/OFF RECAPTCHA VERIFICATION FOR "LOGIN" ACTION.
35+
RECAPTCHA_SIGN_UP = True # TURN ON/OFF RECAPTCHA VERIFICATION FOR "SIGNUP" ACTION.
36+
RECAPTCHA_POST_CREATE = (
37+
True # TURN ON/OFF RECAPTCHA VERIFICATION FOR "CREATE POST" ACTION.
38+
)
39+
RECAPTCHA_POST_EDIT = True # TURN ON/OFF RECAPTCHA VERIFICATION FOR "EDIT POST" ACTION.
40+
RECAPTCHA_POST_DELETE = (
41+
True # TURN ON/OFF RECAPTCHA VERIFICATION FOR "DELETE POST" ACTION.
42+
)
43+
RECAPTCHA_COMMENT = True # TURN ON/OFF RECAPTCHA VERIFICATION FOR "COMMENT" ACTION.
44+
RECAPTCHA_COMMENT_DELETE = (
45+
True # TURN ON/OFF RECAPTCHA VERIFICATION FOR "DELETE COMMENT" ACTION.
46+
)
47+
RECAPTCHA_PASSWORD_RESET = (
48+
True # TURN ON/OFF RECAPTCHA VERIFICATION FOR "PASSWORD RESET" ACTION.
49+
)
50+
RECAPTCHA_PASSWORD_CHANGE = (
51+
True # TURN ON/OFF RECAPTCHA VERIFICATION FOR "PASSWORD CHANGE" ACTION.
52+
)
53+
RECAPTCHA_USERNAME_CHANGE = (
54+
True # TURN ON/OFF RECAPTCHA VERIFICATION FOR "USERNAME CHANGE" ACTION.
55+
)
56+
RECAPTCHA_VERIFY_USER = (
57+
True # TURN ON/OFF RECAPTCHA VERIFICATION FOR "VERIFY USER" ACTION.
58+
)
59+
RECAPTCHA_DELETE_USER = (
60+
True # TURN ON/OFF RECAPTCHA VERIFICATION FOR "DELETE USER" ACTION.
61+
)
62+
RECAPTCHA_PROFILE_PICTURE_CHANGE = (
63+
True # TURN ON/OFF RECAPTCHA VERIFICATION FOR "PROFILE PICTURE CHANGE" ACTION.
64+
)

0 commit comments

Comments
 (0)