summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHombreLaser <sebastian-440@live.com>2024-02-08 18:21:12 -0600
committerHombreLaser <sebastian-440@live.com>2024-02-08 18:21:12 -0600
commite91a86a714686a22149b55c9d5f0210cec8fef52 (patch)
treeac7212b106dac7a357b3f5a1a834b17f431f07bc
parenta4dbf1cd8d0769b1ff1e0d99217f92b28b92e0d4 (diff)
Add CORS
-rw-r--r--config/__init__.py17
-rw-r--r--main.py1
-rw-r--r--requests.http2
-rw-r--r--requirements.txt2
-rw-r--r--src/controllers/comments_controller.py19
-rw-r--r--src/controllers/replies_controller.py2
-rw-r--r--src/queries/comments_query.py11
-rw-r--r--src/services/create_comment_service.py12
-rw-r--r--static/js/client.js (renamed from static/js/main.js)3
-rw-r--r--static/js/controllers/comments_controller.js (renamed from static/js/comments/comment_form.js)2
-rw-r--r--templates/comments/form.jinja4
11 files changed, 45 insertions, 30 deletions
diff --git a/config/__init__.py b/config/__init__.py
index 24ff968..6a623cf 100644
--- a/config/__init__.py
+++ b/config/__init__.py
@@ -1,6 +1,8 @@
import tomllib
import re
+from flask_cors import CORS
import sqlalchemy.exc as sqlalchemy_exceptions
+from sqlalchemy import select
from src.database import db, init_db
from src.database.models import Blog
@@ -14,6 +16,7 @@ def initialize(app):
# Check the config file for any blog domains.
initialize_blogs(app)
initialize_blueprints(app)
+ initialize_cors_policies(app)
def database_connection_string(app):
@@ -44,6 +47,20 @@ def initialize_blogs(app):
break
+def configured_blogs(app):
+ statement = select(Blog.domain).where(Blog.domain.in_(user_config['Blogs']['domains']))
+ with app.app_context():
+ return [r for r, in db.session.execute(statement)]
+
+
+def initialize_cors_policies(app):
+ allowed_origins = configured_blogs(app)
+ cors_settings = {'resources': {r"/api/*": {'origins': allowed_origins},
+ r"/static/*": {'origins': allowed_origins}}
+ }
+ CORS(app, **cors_settings)
+
+
def initialize_blueprints(app):
import src.controllers as app_controllers
diff --git a/main.py b/main.py
index 0016370..6912a5a 100644
--- a/main.py
+++ b/main.py
@@ -2,6 +2,7 @@ from flask import Flask
from src.database import db
import config
+
app = Flask(__name__)
# Initialize database, blog domains...
diff --git a/requests.http b/requests.http
index 6f76bbb..85d50a1 100644
--- a/requests.http
+++ b/requests.http
@@ -1,4 +1,4 @@
-POST http://localhost:5000/what/a/good/post/comments
+POST http://localhost:5000/api/comments?path=/what/a/good/post
Content-Type: application/json
{
"email": "awesome@example.org",
diff --git a/requirements.txt b/requirements.txt
index a963528..9b8e0d4 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,5 +1,7 @@
Flask
Flask-Migrate
Flask-SQLAlchemy
+Flask-WTF
+flask-cors
PyMySQL
scrypt
diff --git a/src/controllers/comments_controller.py b/src/controllers/comments_controller.py
index 9d6f02e..706c213 100644
--- a/src/controllers/comments_controller.py
+++ b/src/controllers/comments_controller.py
@@ -8,25 +8,28 @@ comments_blueprint = Blueprint('comments_controller',
query = CommentsQuery()
-@comments_blueprint.post('/<path:post>/comments/')
-def create(post):
- service = CreateCommentService(request.get_json(), post)
+@comments_blueprint.post('/api/comments')
+def create():
+ service = CreateCommentService(request.args | request.get_json())
status_code = service.call()
if status_code == 404:
abort(404)
return render_template('comments/index.jinja',
- page=query.comments_of_post(post))
+ page=query.comments_of_post(
+ request.args.get('path')
+ ))
-@comments_blueprint.get('/<path:post>/comments/new')
-def new(post):
+@comments_blueprint.get('/api/comments/new')
+def new():
return render_template('comments/form.jinja')
-@comments_blueprint.get('/<path:post>/comments/')
-def index(post):
+@comments_blueprint.get('/api/comments')
+def index():
+ post = request.args.get('path')
page = query.comments_of_post(post)
if page.total == 0:
diff --git a/src/controllers/replies_controller.py b/src/controllers/replies_controller.py
index 9228b5c..d7be3d0 100644
--- a/src/controllers/replies_controller.py
+++ b/src/controllers/replies_controller.py
@@ -6,7 +6,7 @@ replies_blueprint = Blueprint('replies_controller',
'__replies_controller__')
-@replies_blueprint.post('/comments/<int:comment_id>/replies')
+@replies_blueprint.post('/api/comments/<int:comment_id>/replies')
def create(comment_id):
breakpoint()
service = CreateReplyService(request.get_json(), comment_id)
diff --git a/src/queries/comments_query.py b/src/queries/comments_query.py
index 834bd6a..4bdf31f 100644
--- a/src/queries/comments_query.py
+++ b/src/queries/comments_query.py
@@ -7,13 +7,10 @@ class CommentsQuery(BaseQuery):
def __init__(self):
super().__init__(Comment)
- def all_comments(self, page=1, per_page=10, max_per_page=15):
- return db.paginate(db.select(Comment), page=page, per_page=per_page,
- max_per_page=max_per_page)
+ def all_comments(self):
+ return db.paginate(db.select(Comment))
- def comments_of_post(self, post, page=1, per_page=10, max_per_page=15):
+ def comments_of_post(self, post):
return db.paginate(
- db.select(Comment).where(Comment.post == post),
- page=page, per_page=per_page,
- max_per_page=max_per_page
+ db.select(Comment).where(Comment.post == self._post),
)
diff --git a/src/services/create_comment_service.py b/src/services/create_comment_service.py
index 97cf726..ef8b105 100644
--- a/src/services/create_comment_service.py
+++ b/src/services/create_comment_service.py
@@ -5,12 +5,12 @@ from src.services.comment_creation_callbacks import CommentCreationCallbacks
class CreateCommentService:
- def __init__(self, comment_data, post):
- self._post = post
- self._domain = comment_data.get('domain')
- self._content = comment_data.get('content')
- self._email = comment_data.get('email')
- self._author = comment_data.get('author')
+ def __init__(self, params):
+ self._post = params.get('path')
+ self._domain = params.get('domain')
+ self._content = params.get('content')
+ self._email = params.get('email')
+ self._author = params.get('author')
self._blog_id = self._get_blog_id()
def _get_blog_id(self):
diff --git a/static/js/main.js b/static/js/client.js
index cfb02dc..d782871 100644
--- a/static/js/main.js
+++ b/static/js/client.js
@@ -1,5 +1,4 @@
-import CommentForm from "./comments/comment_form";
-
+import { CommentsController} from "./comments/comments_controller.js";
const post = window.location.pathname;
const domain = window.location.hostname;
diff --git a/static/js/comments/comment_form.js b/static/js/controllers/comments_controller.js
index 6edde9f..611b2ee 100644
--- a/static/js/comments/comment_form.js
+++ b/static/js/controllers/comments_controller.js
@@ -1,4 +1,4 @@
-class CommentForm {
+export class CommentsController {
constructor(domain, post) {
this.domain = domain;
this.post = post;
diff --git a/templates/comments/form.jinja b/templates/comments/form.jinja
index 4934149..8666c2d 100644
--- a/templates/comments/form.jinja
+++ b/templates/comments/form.jinja
@@ -15,7 +15,3 @@
<input type="submit" value="Submit" />
</div>
</form>
-
-<script type="text/javascript" src="{{ url_for('static', filename='js/comments/comment_form.js') }}"
- type="module"
-></script>