From 7a5b15e5a215c9a7e9e10875c6bbdd5efffdaaaa Mon Sep 17 00:00:00 2001
From: Prabhat Singh <59395410+TestPrab@users.noreply.github.com>
Date: Thu, 12 Aug 2021 12:40:25 +0530
Subject: [PATCH] Added Routes to BCF (#1644)
---
src/bcf/README.md | 19 +-
src/bcfserver/bcf/routes.py | 51 --
src/{bcfserver => foundationserver}/README.md | 0
.../bcfserver/bcf/project.json | 71 ++
src/foundationserver/bcfserver/bcf/routes.py | 733 ++++++++++++++++++
.../bcfserver/bcf/templates/base.html | 0
.../bcfserver/foundation}/forms.py | 0
.../bcfserver/foundation}/models.py | 0
.../bcfserver/foundation}/oauth2.py | 0
.../bcfserver/foundation}/routes.py | 34 +-
.../bcfserver/foundation}/templates/base.html | 14 +-
.../foundation}/templates/clientdata.html | 0
.../foundation}/templates/createclient.html | 0
.../foundation}/templates/index.html | 0
.../foundation}/templates/login.html | 2 +-
.../foundation}/templates/oauth.html | 0
.../foundation}/templates/ologin.html | 2 +-
.../foundation}/templates/register.html | 2 +-
src/{ => foundationserver}/bcfserver/run.py | 6 +-
.../requirements.txt | 0
20 files changed, 846 insertions(+), 88 deletions(-)
delete mode 100644 src/bcfserver/bcf/routes.py
rename src/{bcfserver => foundationserver}/README.md (100%)
create mode 100644 src/foundationserver/bcfserver/bcf/project.json
create mode 100644 src/foundationserver/bcfserver/bcf/routes.py
rename src/{ => foundationserver}/bcfserver/bcf/templates/base.html (100%)
rename src/{bcfserver/website => foundationserver/bcfserver/foundation}/forms.py (100%)
rename src/{bcfserver/website => foundationserver/bcfserver/foundation}/models.py (100%)
rename src/{bcfserver/website => foundationserver/bcfserver/foundation}/oauth2.py (100%)
rename src/{bcfserver/website => foundationserver/bcfserver/foundation}/routes.py (91%)
rename src/{bcfserver/website => foundationserver/bcfserver/foundation}/templates/base.html (88%)
rename src/{bcfserver/website => foundationserver/bcfserver/foundation}/templates/clientdata.html (100%)
rename src/{bcfserver/website => foundationserver/bcfserver/foundation}/templates/createclient.html (100%)
rename src/{bcfserver/website => foundationserver/bcfserver/foundation}/templates/index.html (100%)
rename src/{bcfserver/website => foundationserver/bcfserver/foundation}/templates/login.html (92%)
rename src/{bcfserver/website => foundationserver/bcfserver/foundation}/templates/oauth.html (100%)
rename src/{bcfserver/website => foundationserver/bcfserver/foundation}/templates/ologin.html (93%)
rename src/{bcfserver/website => foundationserver/bcfserver/foundation}/templates/register.html (94%)
rename src/{ => foundationserver}/bcfserver/run.py (79%)
rename src/{bcfserver => foundationserver}/requirements.txt (100%)
diff --git a/src/bcf/README.md b/src/bcf/README.md
index 5a7b66c03e..812c0d6f04 100644
--- a/src/bcf/README.md
+++ b/src/bcf/README.md
@@ -4,10 +4,10 @@ A simple Python implementation of BCF. The data model is described in `data.py`.
Manipulation of BCF-XML is available via `bcfxml.py` and manipulation of BCF-API
is available via `bcfapi.py`.
- - BCF-XML version 2.1: Fully supported
- - BCF-API version 2.1: Not supported, will probably tackle this after BCF-API v3.0
- - BCF-XML version 3.0: Almost fully supported, except for the documents module
- - BCF-API version 3.0: Almost fully supported, except for two requests.
+- BCF-XML version 2.1: Fully supported
+- BCF-API version 2.1: Not supported, will probably tackle this after BCF-API v3.0
+- BCF-XML version 3.0: Almost fully supported, except for the documents module
+- BCF-API version 3.0: Almost fully supported, except for two requests.
## bcfxml
@@ -73,9 +73,9 @@ auth_methods = foundation_client.get_auth_methods()
# Our library currently only implements the authorization_code flow
if "authorization_code" in auth_methods:
- auth_client.login()
+ foundation_client.login()
-bcf_client = BcfClient()
+bcf_client = BcfClient(foundation_client)
versions = foundation_client.get_versions()
for version in versions:
@@ -94,7 +94,8 @@ print(data)
```
## Todo List
-The remaining work that needs to be completed in `bcfxml.py` and `bcfapi.py`.
- * For `bcfxml.py` two xsds support is remaining namely 'documents.xsd` and `extensions.xsd`.
- * For `bcfapi.py` two requests that are `get_topics` and `get_comments` are remaining.
+The remaining work that needs to be completed in `bcfxml.py` and `bcfapi.py`.
+
+- For `bcfxml.py` two xsds support is remaining namely 'documents.xsd`and`extensions.xsd`.
+- For `bcfapi.py` two requests that are `get_topics` and `get_comments` are remaining.
diff --git a/src/bcfserver/bcf/routes.py b/src/bcfserver/bcf/routes.py
deleted file mode 100644
index 9e3230d8af..0000000000
--- a/src/bcfserver/bcf/routes.py
+++ /dev/null
@@ -1,51 +0,0 @@
-from flask import jsonify, url_for, redirect, render_template, request, session, flash
-from flask_login import login_user, logout_user, login_required, current_user
-from flask.blueprints import Blueprint
-from website.models import User, OAuth2AuthorizationCode, OAuth2Token, OAuth2Client
-from run import app, db
-import json
-
-bcf = Blueprint("bcf", __name__, template_folder="templates", url_prefix="/bcf/3.0")
-
-
-@bcf.route("/projects")
-def projects():
- Headers = str.split(request.headers["Authorization"])
- token = Headers[1]
- access_token = OAuth2Token.query.filter_by(access_token=token).first()
- print(access_token)
- if access_token:
- Body = {
- "project_id": "F445F4F2-4D02-4B2A-B612-5E456BEF9137",
- "name": "Example project 1",
- "authorization": {"project_actions": ["createTopic", "createDocument"]},
- }, {
- "project_id": "A233FBB2-3A3B-EFF4-C123-DE22ABC8414",
- "name": "Example project 2",
- "authorization": {"project_actions": []},
- }
- response = app.response_class(
- response=json.dumps(Body),
- status=200,
- mimetype="application/json",
- )
- return response
- else:
- message = {"error": "User not recognized"}
- response = app.response_class(
- response=jsonify(message),
- status=200,
- mimetype="application/json",
- )
- return response
-
-
-@bcf.route("/")
-@login_required
-def bcf_3():
- return "
BCF HOMPAGE
"
-
-
-@bcf.route("/projects/")
-def project_details(project_id):
- return "Project details"
diff --git a/src/bcfserver/README.md b/src/foundationserver/README.md
similarity index 100%
rename from src/bcfserver/README.md
rename to src/foundationserver/README.md
diff --git a/src/foundationserver/bcfserver/bcf/project.json b/src/foundationserver/bcfserver/bcf/project.json
new file mode 100644
index 0000000000..d1be22bd72
--- /dev/null
+++ b/src/foundationserver/bcfserver/bcf/project.json
@@ -0,0 +1,71 @@
+{
+ "Projects":[{
+ "project_id": "F445F4F2-4D02-4B2A-B612-5E456BEF9137",
+ "name": "Example project 1",
+ "authorization": {
+ "project_actions": [
+ "createTopic",
+ "createDocument"
+ ]
+ }
+ },
+ {
+ "project_id": "A233FBB2-3A3B-EFF4-C123-DE22ABC8414",
+ "name": "Example project 2",
+ "authorization": {
+ "project_actions": []
+ }
+ }],
+"Extensions":[{
+ "topic_type": [
+ "Information",
+ "Error"
+ ],
+ "topic_status": [
+ "Open",
+ "Closed",
+ "ReOpened"
+ ],
+ "topic_label": [
+ "Architecture",
+ "Structural",
+ "MEP"
+ ],
+ "snippet_type": [
+ ".ifc",
+ ".csv"
+ ],
+ "priority": [
+ "Low",
+ "Medium",
+ "High"
+ ],
+ "users": [
+ "Architect@example.com",
+ "BIM-Manager@example.com",
+ "bob_heater@example.com"
+ ],
+ "stage": [
+ "Preliminary Planning End",
+ "Construction Start",
+ "Construction End"
+ ],
+ "project_actions": [
+ "update",
+ "createTopic",
+ "createDocument"
+ ],
+ "topic_actions": [
+ "update",
+ "updateBimSnippet",
+ "updateRelatedTopics",
+ "updateDocumentReferences",
+ "updateFiles",
+ "createComment",
+ "createViewpoint"
+ ],
+ "comment_actions": [
+ "update"
+ ]
+}]
+}
\ No newline at end of file
diff --git a/src/foundationserver/bcfserver/bcf/routes.py b/src/foundationserver/bcfserver/bcf/routes.py
new file mode 100644
index 0000000000..1dc28e4ce7
--- /dev/null
+++ b/src/foundationserver/bcfserver/bcf/routes.py
@@ -0,0 +1,733 @@
+from operator import methodcaller
+from flask import jsonify, url_for, redirect, render_template, request, session, flash
+from flask_login import login_user, logout_user, login_required, current_user
+from flask.blueprints import Blueprint
+from foundation.models import User, OAuth2AuthorizationCode, OAuth2Token, OAuth2Client
+from run import app, db
+import json
+import os
+
+bcf = Blueprint("bcf", __name__, template_folder="templates", url_prefix="/bcf/3.0")
+my_absolute_dirpath = os.path.abspath(os.path.dirname(__file__))
+data = open(
+ f"{my_absolute_dirpath}/project.json",
+)
+jdata = json.load(data)
+
+
+def validate_client(request):
+ Headers = str.split(request.headers["Authorization"])
+ token = Headers[1]
+ access_token = OAuth2Token.query.filter_by(access_token=token).first()
+ if access_token:
+ return True
+ else:
+ return False
+
+
+def invalid_user():
+ message = {"error": "User not recognized"}
+ response = app.response_class(
+ response=json.dumps(message),
+ status=200,
+ mimetype="application/json",
+ )
+ return response
+
+
+def invalid_project():
+ message = {"error": "Project not found"}
+ response = app.response_class(
+ response=json.dumps(message),
+ status=400,
+ mimetype="application/json",
+ )
+ return response
+
+
+@bcf.route("/projects")
+def projects():
+ access_token = validate_client(request)
+ if access_token:
+ response = app.response_class(
+ response=jdata["Projects"],
+ status=200,
+ mimetype="application/json",
+ )
+ return response
+ else:
+ response = invalid_user()
+ return response
+
+
+@bcf.route("/")
+@login_required
+def bcf_3():
+ return "BCF HOMPAGE
"
+
+
+@bcf.route("/projects/")
+def project_details(project_id):
+ access_token = validate_client(request)
+ if access_token:
+ for i in jdata["Projects"]:
+ if (i["project_id"]) == project_id:
+ response = app.response_class(
+ response=i,
+ status=200,
+ mimetype="application/json",
+ )
+ return response
+ response = invalid_project()
+ return response
+ else:
+ response = invalid_user()
+ return response
+
+
+@bcf.route("/projects/", methods=["PUT"])
+def update_project(project_id):
+ access_token = validate_client(request)
+ if access_token and request.method == "PUT":
+ data = request.form["data"]
+ for i in jdata["Projects"]:
+ if (i["project_id"]) == project_id:
+ response = app.response_class(
+ response=data,
+ status=200,
+ mimetype="application/json",
+ )
+ return response
+ response = invalid_project()
+ return response
+ else:
+ response = invalid_user()
+ return response
+
+
+@bcf.route("/projects//extensions")
+def extensions(project_id):
+ access_token = validate_client(request)
+ if access_token:
+ for i in jdata["Projects"]:
+ if (i["project_id"]) == project_id:
+ response = app.response_class(
+ response=jdata["Extensions"],
+ status=200,
+ mimetype="application/json",
+ )
+ return response
+ response = invalid_project()
+ return response
+ else:
+ response = invalid_user()
+ return response
+
+
+@bcf.routes("/projects//topics")
+def topics(project_id):
+ access_token = validate_client(request)
+ if access_token:
+ for i in jdata["Projects"]:
+ if (i["project_id"]) == project_id:
+ response = app.response_class(
+ response=jdata["Topics"],
+ status=200,
+ mimetype="application/json",
+ )
+ return response
+ response = invalid_project()
+ return response
+ else:
+ response = invalid_user()
+ return response
+
+
+@bcf.routes("/projects//topics/", methods=["POST"])
+def topic_details(project_id, topic_id):
+ access_token = validate_client(request)
+ if access_token and request.method == "POST":
+ body = request.form["data"]
+ for i in jdata["Projects"]:
+ if (i["project_id"]) == project_id:
+ for j in jdata["Topics"]:
+ if (j["guid"]) == topic_id:
+ response = app.response_class(
+ response=body,
+ status=201,
+ mimetype="application/json",
+ )
+ return response
+ response = invalid_project()
+ return response
+ else:
+ response = invalid_user()
+ return response
+
+
+@bcf.routes("/projects//topics/")
+def topic_details(project_id, topic_id):
+ access_token = validate_client(request)
+ if access_token:
+ for i in jdata["Projects"]:
+ if (i["project_id"]) == project_id:
+ for j in jdata["Topics"]:
+ if (j["guid"]) == topic_id:
+ response = app.response_class(
+ response=j,
+ status=200,
+ mimetype="application/json",
+ )
+ return response
+ response = invalid_project()
+ return response
+ else:
+ response = invalid_user()
+ return response
+
+
+@bcf.route("/projects//topics/", methods=["PUT"])
+def update_topic(project_id, topic_id):
+ access_token = validate_client(request)
+ if access_token and request.method == "PUT":
+ data = request.form["data"]
+ for i in jdata["Projects"]:
+ if (i["project_id"]) == project_id:
+ for j in jdata["Topics"]:
+ if (j["guid"]) == topic_id:
+ response = app.response_class(
+ response=data,
+ status=200,
+ mimetype="application/json",
+ )
+ return response
+ response = invalid_project()
+ return response
+ else:
+ response = invalid_user()
+ return response
+
+
+@bcf.route("/projects//topics/", methods=["DELETE"])
+def delete_topic(project_id, topic_id):
+ access_token = validate_client(request)
+ if access_token and request.method == "DELETE":
+ for i in jdata["Projects"]:
+ if (i["project_id"]) == project_id:
+ for j in jdata["Topics"]:
+ if (j["guid"]) == topic_id:
+ message = {"DELETED"}
+ response = app.response_class(
+ response=json.dumps(message),
+ status=200,
+ mimetype="application/json",
+ )
+ return response
+ response = invalid_project()
+ return response
+ else:
+ response = invalid_user()
+ return response
+
+
+@bcf.route("/projects//topics//snippet", methods=["GET"])
+def get_snippet(project_id, topic_id):
+ access_token = validate_client(request)
+ if access_token and request.method == "GET":
+ for i in jdata["Projects"]:
+ if (i["project_id"]) == project_id:
+ for j in jdata["Topics"]:
+ if (j["guid"]) == topic_id:
+ response = app.response_class(
+ response=json.dumps("Snippet test successfull"),
+ status=200,
+ mimetype="application/json",
+ )
+ return response
+ response = invalid_project()
+ return response
+ else:
+ response = invalid_user()
+ return response
+
+
+@bcf.route("/projects//topics//snippet", methods=["PUT"])
+def update_snippet(project_id, topic_id):
+ access_token = validate_client(request)
+ if access_token and request.method == "PUT":
+ data = request.form["data"]
+ for i in jdata["Projects"]:
+ if (i["project_id"]) == project_id:
+ for j in jdata["Topics"]:
+ if (j["guid"]) == topic_id:
+ response = app.response_class(
+ response=data,
+ status=200,
+ mimetype="application/json",
+ )
+ return response
+ response = invalid_project()
+ return response
+ else:
+ response = invalid_user()
+ return response
+
+
+@bcf.route("/projects//files_information", methods=["GET"])
+def get_files_information(project_id):
+ access_token = validate_client(request)
+ if access_token and request.method == "GET":
+ for i in jdata["Projects"]:
+ if (i["project_id"]) == project_id:
+ response = app.response_class(
+ response=jdata["Files"],
+ status=200,
+ mimetype="application/json",
+ )
+ return response
+ response = invalid_project()
+ return response
+ else:
+ response = invalid_user()
+ return response
+
+
+@bcf.route("/projects//topics//files", methods=["GET"])
+def get_files(project_id, topic_id):
+ access_token = validate_client(request)
+ if access_token and request.method == "GET":
+ for i in jdata["Projects"]:
+ if (i["project_id"]) == project_id:
+ for j in jdata["Topics"]:
+ if (j["guid"]) == topic_id:
+ response = app.response_class(
+ response=json.dumps("Get request for files successfull"),
+ status=200,
+ mimetype="application/json",
+ )
+ return response
+ response = invalid_project()
+ return response
+ else:
+ response = invalid_user()
+ return response
+
+
+@bcf.route("/projects//topics//files", methods=["PUT"])
+def update_files(project_id, topic_id):
+ access_token = validate_client(request)
+ if access_token and request.method == "PUT":
+ data = request.form["data"]
+ for i in jdata["Projects"]:
+ if (i["project_id"]) == project_id:
+ for j in jdata["Topics"]:
+ if (j["guid"]) == topic_id:
+ response = app.response_class(
+ response=data,
+ status=200,
+ mimetype="application/json",
+ )
+ return response
+ response = invalid_project()
+ return response
+ else:
+ response = invalid_user()
+ return response
+
+
+@bcf.route("/projects//topics//comments", methods=["GET"])
+def get_comments(project_id, topic_id):
+ access_token = validate_client(request)
+ if access_token and request.method == "GET":
+ for i in jdata["Projects"]:
+ if (i["project_id"]) == project_id:
+ for j in jdata["Topics"]:
+ if (j["guid"]) == topic_id:
+ response = app.response_class(
+ response=jdata["Comments"],
+ status=200,
+ mimetype="application/json",
+ )
+ return response
+ response = invalid_project()
+ return response
+ else:
+ response = invalid_user()
+ return response
+
+
+@bcf.route("/projects//topics//comments", methods=["POST"])
+def create_comments(project_id, topic_id):
+ access_token = validate_client(request)
+ if access_token and request.method == "POST":
+ data = request.form["data"]
+ for i in jdata["Projects"]:
+ if (i["project_id"]) == project_id:
+ for j in jdata["Topics"]:
+ if (j["guid"]) == topic_id:
+ response = app.response_class(
+ response=data,
+ status=200,
+ mimetype="application/json",
+ )
+ return response
+ response = invalid_project()
+ return response
+ else:
+ response = invalid_user()
+ return response
+
+
+@bcf.route(
+ "/projects//topics//comments/", methods=["GET"]
+)
+def get_comment(project_id, topic_id, comment_id):
+ access_token = validate_client(request)
+ if access_token and request.method == "GET":
+ for i in jdata["Projects"]:
+ if (i["project_id"]) == project_id:
+ for j in jdata["Topics"]:
+ if (j["guid"]) == topic_id:
+ for k in jdata["Comments"]:
+ if (k["guid"]) == comment_id:
+ response = app.response_class(
+ response=k,
+ status=200,
+ mimetype="application/json",
+ )
+ return response
+ response = invalid_project()
+ return response
+ else:
+ response = invalid_user()
+ return response
+
+
+@bcf.route(
+ "/projects//topics//comments/", methods=["PUT"]
+)
+def update_comment(project_id, topic_id, comment_id):
+ access_token = validate_client(request)
+ if access_token and request.method == "PUT":
+ data = request.form["data"]
+ for i in jdata["Projects"]:
+ if (i["project_id"]) == project_id:
+ for j in jdata["Topics"]:
+ if (j["guid"]) == topic_id:
+ for k in jdata["Comments"]:
+ if (k["guid"]) == comment_id:
+ response = app.response_class(
+ response=data,
+ status=200,
+ mimetype="application/json",
+ )
+ return response
+ response = invalid_project()
+ return response
+ else:
+ response = invalid_user()
+ return response
+
+
+@bcf.route(
+ "/projects//topics//comments/", methods=["DELETE"]
+)
+def delete_comment(project_id, topic_id, comment_id):
+ access_token = validate_client(request)
+ if access_token and request.method == "DELETE":
+ for i in jdata["Projects"]:
+ if (i["project_id"]) == project_id:
+ for j in jdata["Topics"]:
+ if (j["guid"]) == topic_id:
+ for k in jdata["Comments"]:
+ if (k["guid"]) == comment_id:
+ message = {"DELETED"}
+ response = app.response_class(
+ response=json.dumps(message),
+ status=200,
+ mimetype="application/json",
+ )
+ return response
+ response = invalid_project()
+ return response
+ else:
+ response = invalid_user()
+ return response
+
+
+"""
+***Add ViewPoints Routes Here ***
+"""
+
+
+@bcf.route("/projects//topics//related_topics", methods=["GET"])
+def get_related_topics(project_id, topic_id):
+ access_token = validate_client(request)
+ if access_token and request.method == "GET":
+ for i in jdata["Projects"]:
+ if (i["project_id"]) == project_id:
+ for j in jdata["Topics"]:
+ if (j["guid"]) == topic_id:
+ response = app.response_class(
+ response=jdata["RelatedTopics"],
+ status=200,
+ mimetype="application/json",
+ )
+ return response
+ response = invalid_project()
+ return response
+ else:
+ response = invalid_user()
+ return response
+
+
+@bcf.route("/projects//topics//related_topics", methods=["PUT"])
+def update_related_topics(project_id, topic_id):
+ access_token = validate_client(request)
+ if access_token and request.method == "PUT":
+ data = request.form["data"]
+ for i in jdata["Projects"]:
+ if (i["project_id"]) == project_id:
+ for j in jdata["Topics"]:
+ if (j["guid"]) == topic_id:
+ response = app.response_class(
+ response=data,
+ status=200,
+ mimetype="application/json",
+ )
+ return response
+ response = invalid_project()
+ return response
+ else:
+ response = invalid_user()
+ return response
+
+
+@bcf.route(
+ "/projects//topics//document_references", methods=["GET"]
+)
+def get_document_references(project_id, topic_id):
+ access_token = validate_client(request)
+ if access_token and request.method == "GET":
+ for i in jdata["Projects"]:
+ if (i["project_id"]) == project_id:
+ for j in jdata["Topics"]:
+ if (j["guid"]) == topic_id:
+ response = app.response_class(
+ response=jdata["DocumentReferences"],
+ status=200,
+ mimetype="application/json",
+ )
+ return response
+ response = invalid_project()
+ return response
+ else:
+ response = invalid_user()
+ return response
+
+
+@bcf.route(
+ "/projects//topics//document_references", methods=["POST"]
+)
+def create_document_references(project_id, topic_id):
+ access_token = validate_client(request)
+ if access_token and request.method == "POST":
+ data = request.form["data"]
+ for i in jdata["Projects"]:
+ if (i["project_id"]) == project_id:
+ for j in jdata["Topics"]:
+ if (j["guid"]) == topic_id:
+ response = app.response_class(
+ response=data,
+ status=200,
+ mimetype="application/json",
+ )
+ return response
+ response = invalid_project()
+ return response
+ else:
+ response = invalid_user()
+ return response
+
+
+@bcf.route(
+ "/projects//topics//document_references/",
+ methods=["PUT"],
+)
+def update_document_references(project_id, topic_id, document_reference_id):
+ access_token = validate_client(request)
+ if access_token and request.method == "PUT":
+ data = request.form["data"]
+ for i in jdata["Projects"]:
+ if (i["project_id"]) == project_id:
+ for j in jdata["Topics"]:
+ if (j["guid"]) == topic_id:
+ for k in jdata["DocumentReferences"]:
+ if (k["guid"]) == document_reference_id:
+ response = app.response_class(
+ response=data,
+ status=200,
+ mimetype="application/json",
+ )
+ return response
+ response = invalid_project()
+ return response
+ else:
+ response = invalid_user()
+ return response
+
+
+@bcf.route("/projects//topics//documents", methods=["GET"])
+def get_documents(project_id, topic_id):
+ access_token = validate_client(request)
+ if access_token and request.method == "GET":
+ for i in jdata["Projects"]:
+ if (i["project_id"]) == project_id:
+ for j in jdata["Topics"]:
+ if (j["guid"]) == topic_id:
+ response = app.response_class(
+ response=jdata["Documents"],
+ status=200,
+ mimetype="application/json",
+ )
+ return response
+ response = invalid_project()
+ return response
+ else:
+ response = invalid_user()
+ return response
+
+
+@bcf.routes("/projects//topics//documents", methods=["POST"])
+def create_documents(project_id, topic_id):
+ access_token = validate_client(request)
+ if access_token and request.method == "POST":
+ data = request.form["data"]
+ for i in jdata["Projects"]:
+ if (i["project_id"]) == project_id:
+ for j in jdata["Topics"]:
+ if (j["guid"]) == topic_id:
+ response = app.response_class(
+ response=data,
+ status=200,
+ mimetype="application/json",
+ )
+ return response
+ response = invalid_project()
+ return response
+ else:
+ response = invalid_user()
+ return response
+
+
+@bcf.route(
+ "/projects//topics//documents/", methods=["GET"]
+)
+def get_document(project_id, topic_id, document_id):
+ access_token = validate_client(request)
+ if access_token and request.method == "GET":
+ for i in jdata["Projects"]:
+ if (i["project_id"]) == project_id:
+ for j in jdata["Topics"]:
+ if (j["guid"]) == topic_id:
+ for k in jdata["Documents"]:
+ if (k["guid"]) == document_id:
+ response = app.response_class(
+ response=k,
+ status=200,
+ mimetype="application/json",
+ )
+ return response
+ response = invalid_project()
+ return response
+ else:
+ response = invalid_user()
+ return response
+
+
+@bcf.route("/projects//topics/events", methods=["GET"])
+def get_events(project_id):
+ access_token = validate_client(request)
+ if access_token and request.method == "GET":
+ for i in jdata["Projects"]:
+ if (i["project_id"]) == project_id:
+ response = app.response_class(
+ response=jdata["Events"],
+ status=200,
+ mimetype="application/json",
+ )
+ return response
+ response = invalid_project()
+ return response
+ else:
+ response = invalid_user()
+ return response
+
+
+@bcf.route("/projects//topics//events", methods=["GET"])
+def get_topic_events(project_id, topic_id):
+ access_token = validate_client(request)
+ if access_token and request.method == "GET":
+ for i in jdata["Projects"]:
+ if (i["project_id"]) == project_id:
+ for j in jdata["Topics"]:
+ if (j["guid"]) == topic_id:
+ for k in jdata["Events"]:
+ if (k["topic_guid"]) == topic_id:
+ response = app.response_class(
+ response=k,
+ status=200,
+ mimetype="application/json",
+ )
+ return response
+ response = invalid_project()
+ return response
+ else:
+ response = invalid_user()
+ return response
+
+
+@bcf.route("/projects//topics/comments/events", methods=["GET"])
+def get_comments_events(project_id):
+ access_token = validate_client(request)
+ if access_token and request.method == "GET":
+ for i in jdata["Projects"]:
+ if (i["project_id"]) == project_id:
+ for j in jdata["Topics"]:
+ response = app.response_class(
+ response=jdata["EventComments"],
+ status=200,
+ mimetype="application/json",
+ )
+ return response
+ response = invalid_project()
+ return response
+ else:
+ response = invalid_user()
+ return response
+
+
+@bcf.route(
+ "/projects//topics//comments//events",
+ methods=["GET"],
+)
+def get_comment_events(project_id, topic_id, comment_id):
+ access_token = validate_client(request)
+ if access_token and request.method == "GET":
+ for i in jdata["Projects"]:
+ if (i["project_id"]) == project_id:
+ for j in jdata["Topics"]:
+ if (j["guid"]) == topic_id:
+ for k in jdata["EventComments"]:
+ if (k["comment_guid"]) == comment_id:
+ response = app.response_class(
+ response=k,
+ status=200,
+ mimetype="application/json",
+ )
+ return response
+ response = invalid_project()
+ return response
+ else:
+ response = invalid_user()
+ return response
diff --git a/src/bcfserver/bcf/templates/base.html b/src/foundationserver/bcfserver/bcf/templates/base.html
similarity index 100%
rename from src/bcfserver/bcf/templates/base.html
rename to src/foundationserver/bcfserver/bcf/templates/base.html
diff --git a/src/bcfserver/website/forms.py b/src/foundationserver/bcfserver/foundation/forms.py
similarity index 100%
rename from src/bcfserver/website/forms.py
rename to src/foundationserver/bcfserver/foundation/forms.py
diff --git a/src/bcfserver/website/models.py b/src/foundationserver/bcfserver/foundation/models.py
similarity index 100%
rename from src/bcfserver/website/models.py
rename to src/foundationserver/bcfserver/foundation/models.py
diff --git a/src/bcfserver/website/oauth2.py b/src/foundationserver/bcfserver/foundation/oauth2.py
similarity index 100%
rename from src/bcfserver/website/oauth2.py
rename to src/foundationserver/bcfserver/foundation/oauth2.py
diff --git a/src/bcfserver/website/routes.py b/src/foundationserver/bcfserver/foundation/routes.py
similarity index 91%
rename from src/bcfserver/website/routes.py
rename to src/foundationserver/bcfserver/foundation/routes.py
index 28f0e63b03..9fdb7957bb 100644
--- a/src/bcfserver/website/routes.py
+++ b/src/foundationserver/bcfserver/foundation/routes.py
@@ -11,8 +11,8 @@ import urllib
import json
from run import db, app
-website_obj = Blueprint(
- "website_obj",
+foundation_obj = Blueprint(
+ "foundation_obj",
__name__,
template_folder="templates",
)
@@ -22,13 +22,13 @@ def split_by_crlf(s):
return [v for v in s.splitlines() if v]
-@website_obj.route("/")
+@foundation_obj.route("/")
def homepage():
return render_template("index.html")
# return "homepage"
-@website_obj.route("/register", methods=["GET", "POST"])
+@foundation_obj.route("/register", methods=["GET", "POST"])
def register_page():
form = RegisterForm()
if form.validate_on_submit():
@@ -45,7 +45,7 @@ def register_page():
f"Account created successfully! {user_to_create.username}",
category="success",
)
- return redirect(url_for("website_obj.homepage"))
+ return redirect(url_for("foundation_obj.homepage"))
if form.errors != {}:
for err_msg in form.errors.values():
flash(
@@ -55,7 +55,7 @@ def register_page():
return render_template("register.html", form=form)
-@website_obj.route("/createclient", methods=["GET", "POST"])
+@foundation_obj.route("/createclient", methods=["GET", "POST"])
@login_required
def create_client():
grants = [
@@ -99,7 +99,7 @@ def create_client():
return render_template("createclient.html", form=form, grants=grants)
-@website_obj.route("/login", methods=["GET", "POST"])
+@foundation_obj.route("/login", methods=["GET", "POST"])
def login_page():
form = LoginForm()
if form.validate_on_submit():
@@ -108,7 +108,7 @@ def login_page():
attempted_password=form.password.data
):
login_user(attempted_user)
- return redirect(url_for("website_obj.homepage"))
+ return redirect(url_for("foundation_obj.homepage"))
else:
flash(
"Invalid Credentials",
@@ -118,14 +118,14 @@ def login_page():
return render_template("login.html", form=form)
-@website_obj.route("/logout")
+@foundation_obj.route("/logout")
def logoutpage():
logout_user()
flash("You have been logged out!", category="info")
- return redirect(url_for("website_obj.homepage"))
+ return redirect(url_for("foundation_obj.homepage"))
-@website_obj.route("/foundation/1.0/auth")
+@foundation_obj.route("/foundation/1.0/auth")
def foundation_auth():
data = {
"oauth2_auth_url": "http://127.0.0.1:5000/oauth/authorize",
@@ -138,7 +138,7 @@ def foundation_auth():
return response
-@website_obj.route("/foundation/versions")
+@foundation_obj.route("/foundation/versions")
def foundation_versions():
Body = {
"versions": [
@@ -167,7 +167,7 @@ def foundation_versions():
return response
-@website_obj.route("/outh/login", methods=["GET", "POST"])
+@foundation_obj.route("/outh/login", methods=["GET", "POST"])
def oauth_login():
form = LoginForm()
if form.validate_on_submit():
@@ -185,7 +185,7 @@ def oauth_login():
state = request.args.get("state")
return redirect(
url_for(
- "website_obj.authorize",
+ "foundation_obj.authorize",
client_id=client_id,
redirect_uri=redirect_uri,
state=state,
@@ -199,7 +199,7 @@ def oauth_login():
return render_template("ologin.html", form=form)
-@website_obj.route("/oauth/authorize", methods=["GET", "POST"])
+@foundation_obj.route("/oauth/authorize", methods=["GET", "POST"])
def authorize():
client_id = request.args.get("client_id")
redirect_uri = request.args.get("redirect_uri")
@@ -209,7 +209,7 @@ def authorize():
query = request.query_string
return redirect(
url_for(
- "website_obj.oauth_login",
+ "foundation_obj.oauth_login",
client_id=client_id,
redirect_uri=redirect_uri,
state=state,
@@ -252,7 +252,7 @@ def authorize():
return render_template("oauth.html")
-@website_obj.route("/oauth/token", methods=["POST"])
+@foundation_obj.route("/oauth/token", methods=["POST"])
def issue_token():
try:
code = request.form["code"]
diff --git a/src/bcfserver/website/templates/base.html b/src/foundationserver/bcfserver/foundation/templates/base.html
similarity index 88%
rename from src/bcfserver/website/templates/base.html
rename to src/foundationserver/bcfserver/foundation/templates/base.html
index f6a2a2df7c..534b7f5c43 100644
--- a/src/bcfserver/website/templates/base.html
+++ b/src/foundationserver/bcfserver/foundation/templates/base.html
@@ -30,7 +30,7 @@
-
- Home (current)
@@ -47,14 +47,16 @@
Welcome, {{ current_user.username }}
-
- Logout
-
Create Client
@@ -62,14 +64,16 @@
{% else %}
-
- Login
-
Register
diff --git a/src/bcfserver/website/templates/clientdata.html b/src/foundationserver/bcfserver/foundation/templates/clientdata.html
similarity index 100%
rename from src/bcfserver/website/templates/clientdata.html
rename to src/foundationserver/bcfserver/foundation/templates/clientdata.html
diff --git a/src/bcfserver/website/templates/createclient.html b/src/foundationserver/bcfserver/foundation/templates/createclient.html
similarity index 100%
rename from src/bcfserver/website/templates/createclient.html
rename to src/foundationserver/bcfserver/foundation/templates/createclient.html
diff --git a/src/bcfserver/website/templates/index.html b/src/foundationserver/bcfserver/foundation/templates/index.html
similarity index 100%
rename from src/bcfserver/website/templates/index.html
rename to src/foundationserver/bcfserver/foundation/templates/index.html
diff --git a/src/bcfserver/website/templates/login.html b/src/foundationserver/bcfserver/foundation/templates/login.html
similarity index 92%
rename from src/bcfserver/website/templates/login.html
rename to src/foundationserver/bcfserver/foundation/templates/login.html
index 010509d5be..057494d54a 100644
--- a/src/bcfserver/website/templates/login.html
+++ b/src/foundationserver/bcfserver/foundation/templates/login.html
@@ -15,7 +15,7 @@
Do not have an account?
Register
diff --git a/src/bcfserver/website/templates/oauth.html b/src/foundationserver/bcfserver/foundation/templates/oauth.html
similarity index 100%
rename from src/bcfserver/website/templates/oauth.html
rename to src/foundationserver/bcfserver/foundation/templates/oauth.html
diff --git a/src/bcfserver/website/templates/ologin.html b/src/foundationserver/bcfserver/foundation/templates/ologin.html
similarity index 93%
rename from src/bcfserver/website/templates/ologin.html
rename to src/foundationserver/bcfserver/foundation/templates/ologin.html
index 708f5498e7..277f795cff 100644
--- a/src/bcfserver/website/templates/ologin.html
+++ b/src/foundationserver/bcfserver/foundation/templates/ologin.html
@@ -16,7 +16,7 @@
Do not have an account?
Register
diff --git a/src/bcfserver/website/templates/register.html b/src/foundationserver/bcfserver/foundation/templates/register.html
similarity index 94%
rename from src/bcfserver/website/templates/register.html
rename to src/foundationserver/bcfserver/foundation/templates/register.html
index f45b0c45f5..2aa75c7c2e 100644
--- a/src/bcfserver/website/templates/register.html
+++ b/src/foundationserver/bcfserver/foundation/templates/register.html
@@ -18,7 +18,7 @@
Already have an account?
Login
diff --git a/src/bcfserver/run.py b/src/foundationserver/bcfserver/run.py
similarity index 79%
rename from src/bcfserver/run.py
rename to src/foundationserver/bcfserver/run.py
index 3e13150778..d1cb4c7c5d 100644
--- a/src/bcfserver/run.py
+++ b/src/foundationserver/bcfserver/run.py
@@ -10,14 +10,14 @@ login_manager = LoginManager(app)
bcrypt = Bcrypt(app)
app.config["SECRET_KEY"] = "f613729206685405cde0e388"
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///sqlite.db"
-login_manager.login_view = "website_obj.login_page"
+login_manager.login_view = "foundation_obj.login_page"
login_manager.login_message_category = "info"
-from website.routes import website_obj
+from foundation.routes import foundation_obj
from bcf.routes import bcf
-app.register_blueprint(website_obj)
+app.register_blueprint(foundation_obj)
app.register_blueprint(bcf)
diff --git a/src/bcfserver/requirements.txt b/src/foundationserver/requirements.txt
similarity index 100%
rename from src/bcfserver/requirements.txt
rename to src/foundationserver/requirements.txt