Skip to content

Commit e3e93e5

Browse files
Merge pull request #116 from VineetBala-AOT/main
Adding cors allowed origin to api end points
2 parents badbef8 + 70f0e78 commit e3e93e5

File tree

12 files changed

+98
-51
lines changed

12 files changed

+98
-51
lines changed

condition-api/src/condition_api/resources/amendment.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,16 @@
1515

1616
from http import HTTPStatus
1717

18-
from flask_restx import Namespace, Resource, cors
18+
from flask_cors import cross_origin
19+
from flask_restx import Namespace, Resource
1920

2021
from marshmallow import ValidationError
2122

2223
from condition_api.models.document import Document
2324
from condition_api.schemas.amendment import AmendmentSchema
2425
from condition_api.services.amendment_service import AmendmentService
2526
from condition_api.utils.roles import EpicConditionRole
26-
from condition_api.utils.util import cors_preflight
27+
from condition_api.utils.util import allowedorigins, cors_preflight
2728

2829
from .apihelper import Api as ApiHelper
2930
from ..auth import auth
@@ -47,7 +48,7 @@ class AmendmentsResource(Resource):
4748
@API.response(code=HTTPStatus.OK, model=amendment_model, description="Create amendments")
4849
@API.response(HTTPStatus.BAD_REQUEST, "Bad Request")
4950
@auth.has_one_of_roles([EpicConditionRole.VIEW_CONDITIONS.value])
50-
@cors.crossdomain(origin="*")
51+
@cross_origin(origins=allowedorigins())
5152
def post(document_id):
5253
"""Create a new amendment."""
5354
try:

condition-api/src/condition_api/resources/attribute_key.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,15 @@
1717

1818
from flask import request
1919

20-
from flask_restx import Namespace, Resource, cors
20+
from flask_cors import cross_origin
21+
from flask_restx import Namespace, Resource
2122

2223
from marshmallow import ValidationError
2324

2425
from condition_api.schemas.attribute_key import AttributeKeySchema
2526
from condition_api.services.attribute_key_service import AttributeKeyService
2627
from condition_api.utils.roles import EpicConditionRole
27-
from condition_api.utils.util import cors_preflight
28+
from condition_api.utils.util import allowedorigins, cors_preflight
2829

2930
from .apihelper import Api as ApiHelper
3031
from ..auth import auth
@@ -48,7 +49,7 @@ class AttributeKeyResource(Resource):
4849
@API.response(code=HTTPStatus.CREATED, model=attributes_model, description="Get attribute keys")
4950
@API.response(HTTPStatus.BAD_REQUEST, "Bad Request")
5051
@auth.has_one_of_roles([EpicConditionRole.VIEW_CONDITIONS.value])
51-
@cors.crossdomain(origin="*")
52+
@cross_origin(origins=allowedorigins())
5253
def get(condition_id):
5354
"""Fetch attribute keys."""
5455
management_plan_id = request.args.get("management_plan_id", type=int)

condition-api/src/condition_api/resources/condition.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@
1616
from http import HTTPStatus
1717

1818
from flask import request
19-
20-
from flask_restx import Namespace, Resource, cors
19+
from flask_cors import cross_origin
20+
from flask_restx import Namespace, Resource
2121

2222
from marshmallow import ValidationError
2323

@@ -28,7 +28,7 @@
2828
ProjectDocumentConditionDetailSchema, ProjectDocumentConditionSchema
2929
from condition_api.services.condition_service import ConditionService
3030
from condition_api.utils.roles import EpicConditionRole
31-
from condition_api.utils.util import cors_preflight
31+
from condition_api.utils.util import allowedorigins, cors_preflight
3232

3333
from .apihelper import Api as ApiHelper
3434
from ..auth import auth
@@ -53,7 +53,7 @@ class ConditionDetailsResource(Resource):
5353
@API.response(code=HTTPStatus.CREATED, model=condition_model, description="Get conditions")
5454
@API.response(HTTPStatus.BAD_REQUEST, "Bad Request")
5555
@auth.has_one_of_roles([EpicConditionRole.VIEW_CONDITIONS.value])
56-
@cors.crossdomain(origin="*")
56+
@cross_origin(origins=allowedorigins())
5757
def get(project_id, document_id, condition_id):
5858
"""Fetch conditions and condition attributes by project ID."""
5959
try:
@@ -82,7 +82,7 @@ class ConditionDetailsPatchResource(Resource):
8282
code=HTTPStatus.OK, model=condition_model, description="Edit conditions"
8383
)
8484
@API.response(HTTPStatus.BAD_REQUEST, "Bad Request")
85-
@cors.crossdomain(origin="*")
85+
@cross_origin(origins=allowedorigins())
8686
@auth.has_one_of_roles([EpicConditionRole.VIEW_CONDITIONS.value])
8787
def patch(condition_id):
8888
"""Edit condition data."""
@@ -117,7 +117,7 @@ class ConditionDetailResource(Resource):
117117
@API.response(code=HTTPStatus.CREATED, model=condition_model, description="Get conditions")
118118
@API.response(HTTPStatus.BAD_REQUEST, "Bad Request")
119119
@auth.has_one_of_roles([EpicConditionRole.VIEW_CONDITIONS.value])
120-
@cors.crossdomain(origin="*")
120+
@cross_origin(origins=allowedorigins())
121121
def get(project_id, document_id):
122122
"""Fetch conditions and condition attributes by project ID."""
123123
try:
@@ -140,7 +140,7 @@ def get(project_id, document_id):
140140
@API.response(code=HTTPStatus.OK, model=condition_model, description="Create condition")
141141
@API.response(HTTPStatus.BAD_REQUEST, "Bad Request")
142142
@auth.has_one_of_roles([EpicConditionRole.VIEW_CONDITIONS.value])
143-
@cors.crossdomain(origin="*")
143+
@cross_origin(origins=allowedorigins())
144144
def post(project_id, document_id):
145145
"""Create a new condition."""
146146
try:
@@ -165,7 +165,7 @@ class ConditionResource(Resource):
165165
@API.response(code=HTTPStatus.CREATED, model=condition_model, description="Get conditions")
166166
@API.response(HTTPStatus.BAD_REQUEST, "Bad Request")
167167
@auth.has_one_of_roles([EpicConditionRole.VIEW_CONDITIONS.value])
168-
@cors.crossdomain(origin="*")
168+
@cross_origin(origins=allowedorigins())
169169
def get(condition_id):
170170
"""Fetch conditions and condition attributes by condition ID."""
171171
try:
@@ -187,7 +187,7 @@ def get(condition_id):
187187
code=HTTPStatus.OK, model=condition_model, description="Edit conditions"
188188
)
189189
@API.response(HTTPStatus.BAD_REQUEST, "Bad Request")
190-
@cors.crossdomain(origin="*")
190+
@cross_origin(origins=allowedorigins())
191191
@auth.has_one_of_roles([EpicConditionRole.VIEW_CONDITIONS.value])
192192
def patch(condition_id):
193193
"""Edit condition data."""
@@ -219,7 +219,7 @@ def patch(condition_id):
219219
code=HTTPStatus.OK, model=condition_model, description="Delete conditions"
220220
)
221221
@API.response(HTTPStatus.BAD_REQUEST, "Bad Request")
222-
@cors.crossdomain(origin="*")
222+
@cross_origin(origins=allowedorigins())
223223
@auth.has_one_of_roles([EpicConditionRole.VIEW_CONDITIONS.value])
224224
def delete(condition_id):
225225
"""Remove condition data."""

condition-api/src/condition_api/resources/condition_attribute.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,15 @@
1616
from http import HTTPStatus
1717

1818
from flask import request
19-
from flask_restx import Namespace, Resource, cors
19+
from flask_cors import cross_origin
20+
from flask_restx import Namespace, Resource
2021

2122
from marshmallow import ValidationError
2223

2324
from condition_api.schemas.condition_attribute import ConditionAttributesSchema
2425
from condition_api.services.condition_attribute_service import ConditionAttributeService
2526
from condition_api.utils.roles import EpicConditionRole
26-
from condition_api.utils.util import cors_preflight
27+
from condition_api.utils.util import allowedorigins, cors_preflight
2728

2829
from .apihelper import Api as ApiHelper
2930
from ..auth import auth
@@ -48,7 +49,7 @@ class ConditionAttributeaResource(Resource):
4849
code=HTTPStatus.OK, model=condition_model, description="Edit condition attributes"
4950
)
5051
@API.response(HTTPStatus.BAD_REQUEST, "Bad Request")
51-
@cors.crossdomain(origin="*")
52+
@cross_origin(origins=allowedorigins())
5253
@auth.has_one_of_roles([EpicConditionRole.VIEW_CONDITIONS.value])
5354
def patch(condition_id):
5455
"""Edit condition attributes data."""
@@ -68,7 +69,7 @@ def patch(condition_id):
6869
code=HTTPStatus.OK, model=condition_model, description="Delete condition attributes"
6970
)
7071
@API.response(HTTPStatus.BAD_REQUEST, "Bad Request")
71-
@cors.crossdomain(origin="*")
72+
@cross_origin(origins=allowedorigins())
7273
@auth.has_one_of_roles([EpicConditionRole.VIEW_CONDITIONS.value])
7374
def delete(condition_id):
7475
"""Remove condition attribute data."""

condition-api/src/condition_api/resources/consolidated_condition.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,14 @@
1616
from http import HTTPStatus
1717

1818
from flask import request
19-
20-
from flask_restx import Namespace, Resource, cors
19+
from flask_cors import cross_origin
20+
from flask_restx import Namespace, Resource
2121

2222
from marshmallow import ValidationError
2323

2424
from condition_api.services import authorization
2525
from condition_api.services.condition_service import ConditionService
26-
from condition_api.utils.util import cors_preflight
26+
from condition_api.utils.util import allowedorigins, cors_preflight
2727

2828
from .apihelper import Api as ApiHelper
2929
from ..auth import auth
@@ -42,7 +42,7 @@ class ConditionResource(Resource):
4242
@ApiHelper.swagger_decorators(API, endpoint_description="Get consolidated conditions by project id")
4343
@API.response(HTTPStatus.BAD_REQUEST, "Bad Request")
4444
@auth.optional
45-
@cors.crossdomain(origin="*")
45+
@cross_origin(origins=allowedorigins())
4646
def get(project_id):
4747
"""Fetch consolidated conditions and condition attributes by project ID."""
4848
try:

condition-api/src/condition_api/resources/document.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@
1616
from http import HTTPStatus
1717

1818
from flask import request
19-
20-
from flask_restx import Namespace, Resource, cors
19+
from flask_cors import cross_origin
20+
from flask_restx import Namespace, Resource
2121

2222
from marshmallow import ValidationError
2323

@@ -26,7 +26,7 @@
2626
from condition_api.schemas.document import DocumentSchema, DocumentTypeSchema
2727
from condition_api.services.document_service import DocumentService
2828
from condition_api.utils.roles import EpicConditionRole
29-
from condition_api.utils.util import cors_preflight
29+
from condition_api.utils.util import allowedorigins, cors_preflight
3030

3131
from .apihelper import Api as ApiHelper
3232
from ..auth import auth
@@ -50,7 +50,7 @@ class DocumentsResource(Resource):
5050
@API.response(code=HTTPStatus.OK, model=document_model, description="Create documents")
5151
@API.response(HTTPStatus.BAD_REQUEST, "Bad Request")
5252
@auth.has_one_of_roles([EpicConditionRole.VIEW_CONDITIONS.value])
53-
@cors.crossdomain(origin="*")
53+
@cross_origin(origins=allowedorigins())
5454
def post(project_id):
5555
"""Create a new document."""
5656
try:
@@ -71,7 +71,7 @@ def post(project_id):
7171
@API.response(code=HTTPStatus.OK, model=document_model, description="Get all documents")
7272
@API.response(HTTPStatus.BAD_REQUEST, "Bad Request")
7373
@auth.has_one_of_roles([EpicConditionRole.VIEW_CONDITIONS.value])
74-
@cors.crossdomain(origin="*")
74+
@cross_origin(origins=allowedorigins())
7575
def get(project_id):
7676
"""Get all documents."""
7777
try:
@@ -94,7 +94,7 @@ class DocumentTypeResource(Resource):
9494
@API.response(code=HTTPStatus.OK, model=document_model, description="Get all document type")
9595
@API.response(HTTPStatus.BAD_REQUEST, "Bad Request")
9696
@auth.has_one_of_roles([EpicConditionRole.VIEW_CONDITIONS.value])
97-
@cors.crossdomain(origin="*")
97+
@cross_origin(origins=allowedorigins())
9898
def get():
9999
"""Get all document type."""
100100
try:
@@ -117,7 +117,7 @@ class DocumentResource(Resource):
117117
@API.response(code=HTTPStatus.CREATED, model=document_model, description="Get document details")
118118
@API.response(HTTPStatus.BAD_REQUEST, "Bad Request")
119119
@auth.has_one_of_roles([EpicConditionRole.VIEW_CONDITIONS.value])
120-
@cors.crossdomain(origin="*")
120+
@cross_origin(origins=allowedorigins())
121121
def get(document_id):
122122
"""Fetch document details by document ID."""
123123
try:
@@ -136,7 +136,7 @@ def get(document_id):
136136
code=HTTPStatus.OK, model=document_model, description="Edit document"
137137
)
138138
@API.response(HTTPStatus.BAD_REQUEST, "Bad Request")
139-
@cors.crossdomain(origin="*")
139+
@cross_origin(origins=allowedorigins())
140140
@auth.has_one_of_roles([EpicConditionRole.VIEW_CONDITIONS.value])
141141
def patch(document_id):
142142
"""Edit document label."""

condition-api/src/condition_api/resources/document_category.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,15 @@
1515

1616
from http import HTTPStatus
1717

18-
from flask_restx import Namespace, Resource, cors
18+
from flask_cors import cross_origin
19+
from flask_restx import Namespace, Resource
1920

2021
from marshmallow import ValidationError
2122

2223
from condition_api.schemas.document_category import DocumentCategorySchema
2324
from condition_api.services.document_service import DocumentService
2425
from condition_api.utils.roles import EpicConditionRole
25-
from condition_api.utils.util import cors_preflight
26+
from condition_api.utils.util import allowedorigins, cors_preflight
2627

2728
from .apihelper import Api as ApiHelper
2829
from ..auth import auth
@@ -46,7 +47,7 @@ class DocumentCategoryResource(Resource):
4647
@API.response(code=HTTPStatus.OK, model=document_model, description="Get documents")
4748
@API.response(HTTPStatus.BAD_REQUEST, "Bad Request")
4849
@auth.has_one_of_roles([EpicConditionRole.VIEW_CONDITIONS.value])
49-
@cors.crossdomain(origin="*")
50+
@cross_origin(origins=allowedorigins())
5051
def get(project_id, category_id):
5152
"""Fetch all documents for a specific document category."""
5253
try:

condition-api/src/condition_api/resources/management_plan.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,16 @@
1515

1616
from http import HTTPStatus
1717

18-
from flask_restx import Namespace, Resource, cors
18+
from flask_cors import cross_origin
19+
from flask_restx import Namespace, Resource
1920

2021
from marshmallow import ValidationError
2122

2223
from condition_api.models.management_plan import ManagementPlan
2324
from condition_api.schemas.management_plan import ManagementPlanSchema
2425
from condition_api.services.management_plan import ManagementPlanService
2526
from condition_api.utils.roles import EpicConditionRole
26-
from condition_api.utils.util import cors_preflight
27+
from condition_api.utils.util import allowedorigins, cors_preflight
2728

2829
from .apihelper import Api as ApiHelper
2930
from ..auth import auth
@@ -48,7 +49,7 @@ class ManagementPlanResource(Resource):
4849
code=HTTPStatus.OK, model=management_plan_model, description="Edit management plan"
4950
)
5051
@API.response(HTTPStatus.BAD_REQUEST, "Bad Request")
51-
@cors.crossdomain(origin="*")
52+
@cross_origin(origins=allowedorigins())
5253
@auth.has_one_of_roles([EpicConditionRole.VIEW_CONDITIONS.value])
5354
def patch(plan_id):
5455
"""Edit management plan data."""
@@ -66,7 +67,7 @@ def patch(plan_id):
6667
code=HTTPStatus.OK, model=management_plan_model, description="Delete management plans"
6768
)
6869
@API.response(HTTPStatus.BAD_REQUEST, "Bad Request")
69-
@cors.crossdomain(origin="*")
70+
@cross_origin(origins=allowedorigins())
7071
@auth.has_one_of_roles([EpicConditionRole.VIEW_CONDITIONS.value])
7172
def delete(plan_id):
7273
"""Remove management plan data."""

condition-api/src/condition_api/resources/project.py

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,15 @@
1515

1616
from http import HTTPStatus
1717

18-
from flask_restx import Namespace, Resource, cors
18+
from flask_cors import cross_origin
19+
from flask_restx import Namespace, Resource
1920

2021
from marshmallow import ValidationError
2122

2223
from condition_api.schemas.project import ProjectSchema
2324
from condition_api.services.project_service import ProjectService
2425
from condition_api.utils.roles import EpicConditionRole
25-
from condition_api.utils.util import cors_preflight
26+
from condition_api.utils.util import allowedorigins, cors_preflight
2627

2728
from .apihelper import Api as ApiHelper
2829
from ..auth import auth
@@ -46,7 +47,7 @@ class ProjectsResource(Resource):
4647
@API.response(code=HTTPStatus.OK, model=projects_model, description="Get projects")
4748
@API.response(HTTPStatus.BAD_REQUEST, "Bad Request")
4849
@auth.has_one_of_roles([EpicConditionRole.VIEW_CONDITIONS.value])
49-
@cors.crossdomain(origin="*")
50+
@cross_origin(origins=allowedorigins())
5051
def get():
5152
"""Fetch projects and related documents."""
5253
try:
@@ -60,3 +61,28 @@ def get():
6061
return projects_schema.dump(project_data), HTTPStatus.OK
6162
except ValidationError as err:
6263
return {"message": str(err)}, HTTPStatus.BAD_REQUEST
64+
65+
66+
@cors_preflight("GET, OPTIONS")
67+
@API.route("/with-approved-conditions", methods=["GET", "OPTIONS"])
68+
class ApprovedProjectsResource(Resource):
69+
"""Resource for fetching all projects with approved conditions."""
70+
71+
@staticmethod
72+
@ApiHelper.swagger_decorators(API, endpoint_description="Get all projects with approved conditions")
73+
@API.response(code=HTTPStatus.OK, model=projects_model, description="Get projects with approved conditions")
74+
@API.response(HTTPStatus.BAD_REQUEST, "Bad Request")
75+
@auth.require
76+
@cross_origin(origins=allowedorigins())
77+
def get():
78+
"""Fetch projects with approved conditions."""
79+
try:
80+
project_data = ProjectService.get_projects_with_approved_conditions()
81+
if not project_data:
82+
return {"message": "No projects found"}, HTTPStatus.NOT_FOUND
83+
84+
results = [{"epic_guid": pid[0]} for pid in project_data]
85+
86+
return results, HTTPStatus.OK
87+
except ValidationError as err:
88+
return {"message": str(err)}, HTTPStatus.BAD_REQUEST

0 commit comments

Comments
 (0)