diff --git a/atst/handler.py b/atst/handler.py deleted file mode 100644 index 2e9d9462..00000000 --- a/atst/handler.py +++ /dev/null @@ -1,42 +0,0 @@ -import tornado.web -from atst.sessions import SessionNotFoundError -from atst.domain.users import Users - -helpers = {"assets": None} - - -class BaseHandler(tornado.web.RequestHandler): - def get_template_namespace(self): - ns = super(BaseHandler, self).get_template_namespace() - helpers["config"] = self.application.config - ns.update(helpers) - return ns - - @tornado.gen.coroutine - def login(self, user): - db_user = yield self._get_user_permissions(user["id"]) - user["atat_permissions"] = db_user.atat_permissions - user["atat_role"] = db_user.atat_role.name - session_id = self.sessions.start_session(user) - self.set_secure_cookie("atat", session_id) - return self.redirect("/home") - - @tornado.gen.coroutine - def _get_user_permissions(self, user_id): - user_repo = Users(self.db_session) - user = user_repo.get_or_create(user_id, atat_role_name="developer") - return user - - def get_current_user(self): - cookie = self.get_secure_cookie("atat") - if cookie: - try: - session = self.application.sessions.get_session(cookie) - except SessionNotFoundError: - self.clear_cookie("atat") - return None - - else: - return None - - return session["user"] diff --git a/atst/handlers/__init__.py b/atst/handlers/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/atst/handlers/dev.py b/atst/handlers/dev.py deleted file mode 100644 index 8beeb983..00000000 --- a/atst/handlers/dev.py +++ /dev/null @@ -1,62 +0,0 @@ -import tornado.gen - -from atst.handler import BaseHandler -from atst.domain.users import Users - -_DEV_USERS = { - "sam": { - "id": "164497f6-c1ea-4f42-a5ef-101da278c012", - "first_name": "Sam", - "last_name": "Seeceepio", - "atat_role": "ccpo", - }, - "amanda": { - "id": "cce17030-4109-4719-b958-ed109dbb87c8", - "first_name": "Amanda", - "last_name": "Adamson", - "atat_role": "default", - }, - "brandon": { - "id": "66ebf7b8-cbf0-4ed8-a102-5f105330df75", - "first_name": "Brandon", - "last_name": "Buchannan", - "atat_role": "default", - }, - "christina": { - "id": "7707b9f2-5945-49ae-967a-be65baa88baf", - "first_name": "Christina", - "last_name": "Collins", - "atat_role": "default", - }, - "dominick": { - "id": "6978ac0c-442a-46aa-a0c3-ff17b5ec2a8c", - "first_name": "Dominick", - "last_name": "Domingo", - "atat_role": "default", - }, - "erica": { - "id": "596fd001-bb1d-4adf-87d8-fa2312e882de", - "first_name": "Erica", - "last_name": "Eichner", - "atat_role": "default", - }, -} - - -class Dev(BaseHandler): - def initialize(self, action, sessions, db_session): - self.db_session = db_session - self.action = action - self.sessions = sessions - self.users_repo = Users(db_session) - - @tornado.gen.coroutine - def get(self): - role = self.get_argument("username", "amanda") - user = _DEV_USERS[role] - yield self._set_user_permissions(user["id"], user["atat_role"]) - yield self.login(user) - - @tornado.gen.coroutine - def _set_user_permissions(self, user_id, role): - return self.users_repo.get_or_create(user_id, atat_role_name=role) diff --git a/atst/handlers/login_redirect.py b/atst/handlers/login_redirect.py deleted file mode 100644 index 7746e934..00000000 --- a/atst/handlers/login_redirect.py +++ /dev/null @@ -1,38 +0,0 @@ -import tornado -from atst.handler import BaseHandler - - -class LoginRedirect(BaseHandler): - def initialize(self, authnid_client, sessions, db_session): - self.db_session = db_session - self.authnid_client = authnid_client - self.sessions = sessions - - @tornado.gen.coroutine - def get(self): - token = self.get_query_argument("bearer-token") - if token: - user = yield self._fetch_user_info(token) - if user: - yield self.login(user) - else: - self.write_error(401) - - url = self.get_login_url() - self.redirect(url) - - @tornado.gen.coroutine - def _fetch_user_info(self, token): - try: - response = yield self.authnid_client.post( - "/validate", json={"token": token} - ) - if response.code == 200: - return response.json["user"] - - except tornado.httpclient.HTTPError as error: - if error.response.code == 401: - return None - - else: - raise error diff --git a/atst/handlers/main.py b/atst/handlers/main.py deleted file mode 100644 index 737d3bd7..00000000 --- a/atst/handlers/main.py +++ /dev/null @@ -1,11 +0,0 @@ -import tornado -from atst.handler import BaseHandler - - -class Main(BaseHandler): - def initialize(self, page): - self.page = page - - @tornado.web.authenticated - def get(self): - self.render("%s.html.to" % self.page, page=self.page) diff --git a/atst/handlers/request.py b/atst/handlers/request.py deleted file mode 100644 index 6918526e..00000000 --- a/atst/handlers/request.py +++ /dev/null @@ -1,44 +0,0 @@ -import tornado -import pendulum - -from atst.handler import BaseHandler -from atst.domain.requests import Requests - - -def map_request(user, request): - time_created = pendulum.instance(request.time_created) - is_new = time_created.add(days=1) > pendulum.now() - - return { - "order_id": request.id, - "is_new": is_new, - "status": request.status, - "app_count": 1, - "date": time_created.format("M/DD/YYYY"), - "full_name": "{} {}".format(user["first_name"], user["last_name"]), - } - - -class Request(BaseHandler): - def initialize(self, page, db_session): - self.page = page - self.db_session = db_session - self.requests = Requests(db_session) - - @tornado.web.authenticated - @tornado.gen.coroutine - def get(self): - user = self.get_current_user() - requests = yield self.fetch_requests(user) - mapped_requests = [map_request(user, request) for request in requests] - self.render("requests.html.to", page=self.page, requests=mapped_requests) - - @tornado.gen.coroutine - def fetch_requests(self, user): - requests = [] - if "review_and_approve_jedi_workspace_request" in user["atat_permissions"]: - requests = self.requests.get_many() - else: - requests = self.requests.get_many(creator_id=user["id"]) - - return requests diff --git a/atst/handlers/request_financial_verification.py b/atst/handlers/request_financial_verification.py deleted file mode 100644 index e6061c39..00000000 --- a/atst/handlers/request_financial_verification.py +++ /dev/null @@ -1,64 +0,0 @@ -import tornado - -from atst.handler import BaseHandler -from atst.forms.financial import FinancialForm -from atst.domain.requests import Requests -from atst.domain.pe_numbers import PENumbers - - -class RequestFinancialVerification(BaseHandler): - def initialize(self, page, db_session): - self.page = page - self.requests_repo = Requests(db_session) - self.pe_numbers_repo = PENumbers(db_session) - - def get_existing_request(self, request_id): - return self.requests_repo.get(request_id) - - @tornado.web.authenticated - @tornado.gen.coroutine - def get(self, request_id=None): - existing_request = self.get_existing_request(request_id) - form = FinancialForm(data=existing_request.body.get("financial_verification")) - self.render( - "requests/financial_verification.html.to", - page=self.page, - f=form, - request_id=request_id, - ) - - @tornado.gen.coroutine - def update_request(self, request_id, form_data): - request_data = { - "creator_id": self.current_user["id"], - "request": {"financial_verification": form_data}, - } - return self.requests_repo.update(request_id, request_data) - - @tornado.web.authenticated - @tornado.gen.coroutine - def post(self, request_id=None): - self.check_xsrf_cookie() - post_data = self.request.arguments - existing_request = self.get_existing_request(request_id) - form = FinancialForm(post_data) - - rerender_args = dict(request_id=request_id, f=form) - - if form.validate(): - yield self.update_request(request_id, form.data) - # pylint: disable=E1121 - valid = yield form.perform_extra_validation( - existing_request.body.get("financial_verification"), - self.pe_numbers_repo, - ) - if valid: - self.redirect( - self.application.default_router.reverse_url( - "financial_verification_submitted" - ) - ) - else: - self.render("requests/financial_verification.html.to", **rerender_args) - else: - self.render("requests/financial_verification.html.to", **rerender_args) diff --git a/atst/handlers/request_new.py b/atst/handlers/request_new.py deleted file mode 100644 index f9f204f0..00000000 --- a/atst/handlers/request_new.py +++ /dev/null @@ -1,228 +0,0 @@ -import tornado -from collections import defaultdict - -from atst.handler import BaseHandler -from atst.forms.request import RequestForm -from atst.forms.org import OrgForm -from atst.forms.poc import POCForm -from atst.forms.review import ReviewForm -from atst.domain.requests import Requests -from atst.domain.pe_numbers import PENumbers - - -class RequestNew(BaseHandler): - def initialize(self, page, db_session): - self.page = page - self.requests_repo = Requests(db_session) - self.pe_numbers_repo = PENumbers(db_session) - - def get_existing_request(self, request_id): - if request_id is None: - return None - request = self.requests_repo.get(request_id) - return request - - @tornado.web.authenticated - @tornado.gen.coroutine - def post(self, screen=1, request_id=None): - self.check_xsrf_cookie() - screen = int(screen) - post_data = self.request.arguments - current_user = self.get_current_user() - existing_request = self.get_existing_request(request_id) - jedi_flow = JEDIRequestFlow( - self.requests_repo, - self.pe_numbers_repo, - screen, - post_data=post_data, - request_id=request_id, - current_user=current_user, - existing_request=existing_request, - ) - - rerender_args = dict( - f=jedi_flow.form, - data=post_data, - page=self.page, - screens=jedi_flow.screens, - current=screen, - next_screen=jedi_flow.next_screen, - request_id=jedi_flow.request_id, - ) - - if jedi_flow.validate(): - jedi_flow.create_or_update_request() - valid = yield jedi_flow.validate_warnings() - if valid: - if jedi_flow.next_screen > len(jedi_flow.screens): - where = "/requests" - else: - where = self.application.default_router.reverse_url( - "request_form_update", - jedi_flow.next_screen, - jedi_flow.request_id, - ) - self.redirect(where) - else: - self.render("requests/screen-%d.html.to" % int(screen), **rerender_args) - else: - self.render("requests/screen-%d.html.to" % int(screen), **rerender_args) - - @tornado.web.authenticated - @tornado.gen.coroutine - def get(self, screen=1, request_id=None): - screen = int(screen) - request = None - - if request_id: - request = self.requests_repo.get(request_id) - - jedi_flow = JEDIRequestFlow( - self.requests_repo, - self.pe_numbers_repo, - screen, - request, - request_id=request_id, - ) - - self.render( - "requests/screen-%d.html.to" % int(screen), - f=jedi_flow.form, - data=jedi_flow.current_step_data, - page=self.page, - screens=jedi_flow.screens, - current=screen, - next_screen=screen + 1, - request_id=request_id, - can_submit=jedi_flow.can_submit, - ) - - -class JEDIRequestFlow(object): - def __init__( - self, - pe_numbers_repo, - current_step, - request=None, - post_data=None, - request_id=None, - current_user=None, - existing_request=None, - ): - self.pe_numbers_repo = pe_numbers_repo - - self.requests_repo = requests_repo - self.pe_numbers_repo = pe_numbers_repo - - self.current_step = current_step - self.request = request - - self.post_data = post_data - self.is_post = self.post_data is not None - - self.request_id = request_id - self.form = self._form() - - self.current_user = current_user - self.existing_request = existing_request - - def _form(self): - if self.is_post: - return self.form_class()(self.post_data) - elif self.request: - return self.form_class()(data=self.current_step_data) - else: - return self.form_class()() - - def validate(self): - return self.form.validate() - - @tornado.gen.coroutine - def validate_warnings(self): - existing_request_data = ( - self.existing_request and self.existing_request.body.get(self.form_section) - ) or None - - valid = yield self.form.perform_extra_validation( - existing_request_data, self.pe_numbers_repo - ) - return valid - - @property - def current_screen(self): - return self.screens[self.current_step - 1] - - @property - def form_section(self): - return self.current_screen["section"] - - def form_class(self): - return self.current_screen["form"] - - @property - def current_step_data(self): - data = {} - - if self.is_post: - data = self.post_data - - if self.request: - if self.form_section == "review_submit": - data = self.request.body - else: - data = self.request.body.get(self.form_section, {}) - - return defaultdict(lambda: defaultdict(lambda: "Input required"), data) - - @property - def can_submit(self): - return self.request and self.request.status != "incomplete" - - @property - def next_screen(self): - return self.current_step + 1 - - @property - def screens(self): - return [ - { - "title": "Details of Use", - "section": "details_of_use", - "form": RequestForm, - "subitems": [ - { - "title": "Overall request details", - "id": "overall-request-details", - }, - {"title": "Cloud Resources", "id": "cloud-resources"}, - {"title": "Support Staff", "id": "support-staff"}, - ], - "show": True, - }, - { - "title": "Information About You", - "section": "information_about_you", - "form": OrgForm, - "show": True, - }, - { - "title": "Primary Point of Contact", - "section": "primary_poc", - "form": POCForm, - "show": True, - }, - { - "title": "Review & Submit", - "section": "review_submit", - "form": ReviewForm, - "show": True, - }, - ] - - def create_or_update_request(self): - request_data = {self.form_section: self.form.data} - if self.request_id: - self.requests_repo.update(self.request_id, request_data) - else: - request = self.requests_repo.create(self.current_user["id"], request_data) - self.request_id = request.id diff --git a/atst/handlers/request_submit.py b/atst/handlers/request_submit.py deleted file mode 100644 index 116e996a..00000000 --- a/atst/handlers/request_submit.py +++ /dev/null @@ -1,20 +0,0 @@ -import tornado - -from atst.handler import BaseHandler -from atst.domain.requests import Requests - - -class RequestsSubmit(BaseHandler): - def initialize(self, db_session): - self.db_session = db_session - self.requests_repo = Requests(db_session) - - @tornado.web.authenticated - @tornado.gen.coroutine - def post(self, request_id): - request = self.requests_repo.get(request_id) - request = yield self.requests_repo.submit(request) - if request.status == "approved": - self.redirect("/requests?modal=True") - else: - self.redirect("/requests") diff --git a/atst/handlers/root.py b/atst/handlers/root.py deleted file mode 100644 index ec68bfcc..00000000 --- a/atst/handlers/root.py +++ /dev/null @@ -1,9 +0,0 @@ -from atst.handler import BaseHandler - - -class Root(BaseHandler): - def initialize(self, page): - self.page = page - - def get(self): - self.render("%s.html.to" % self.page, page=self.page) diff --git a/atst/handlers/workspace.py b/atst/handlers/workspace.py deleted file mode 100644 index 2f1b5dd6..00000000 --- a/atst/handlers/workspace.py +++ /dev/null @@ -1,17 +0,0 @@ -import tornado - -from atst.handler import BaseHandler -from atst.domain.workspaces import Projects - - -class Workspace(BaseHandler): - def initialize(self): - self.projects_repo = Projects() - - @tornado.web.authenticated - @tornado.gen.coroutine - def get(self, workspace_id): - projects = self.projects_repo.get_many(workspace_id) - self.render( - "workspace_projects.html.to", workspace_id=workspace_id, projects=projects - ) diff --git a/atst/handlers/workspace_members.py b/atst/handlers/workspace_members.py deleted file mode 100644 index fcf8110c..00000000 --- a/atst/handlers/workspace_members.py +++ /dev/null @@ -1,17 +0,0 @@ -import tornado - -from atst.handler import BaseHandler -from atst.domain.workspaces import Members - - -class WorkspaceMembers(BaseHandler): - def initialize(self): - self.members_repo = Members() - - @tornado.web.authenticated - @tornado.gen.coroutine - def get(self, workspace_id): - members = self.members_repo.get_many(workspace_id) - self.render( - "workspace_members.html.to", workspace_id=workspace_id, members=members - ) diff --git a/atst/handlers/workspaces.py b/atst/handlers/workspaces.py deleted file mode 100644 index b6fa1dbe..00000000 --- a/atst/handlers/workspaces.py +++ /dev/null @@ -1,22 +0,0 @@ -from atst.handler import BaseHandler -import tornado - -mock_workspaces = [ - { - "name": "Unclassified IaaS and PaaS for Defense Digital Service (DDS)", - "id": "5966187a-eff9-44c3-aa15-4de7a65ac7ff", - "task_order": {"number": 123456}, - "user_count": 23, - } -] - - -class Workspaces(BaseHandler): - def initialize(self, page, db_session): - self.page = page - self.db_session = db_session - - @tornado.gen.coroutine - @tornado.web.authenticated - def get(self): - self.render("workspaces.html.to", page=self.page, workspaces=mock_workspaces)