def diff_create(hash_session): logTraffic(CLOUD_URL, endpoint='/private/<hash_session>/diff/create') if fk.request.method == 'POST': access_resp = access_manager.check_cloud(hash_session) current_user = access_resp[1] if current_user is None: return fk.Response('Unauthorized action on this endpoint.', status.HTTP_401_UNAUTHORIZED) else: logAccess(CLOUD_URL, 'cloud', '/private/<hash_session>/diff/create') if fk.request.data: data = json.loads(fk.request.data) record_from_id = data.get("record_from", "") record_to_id = data.get("record_to", "") method = data.get("method", "undefined") proposition = data.get("proposition", "undefined") status = data.get("status", "undefined") comments = data.get("comments", []) if record_from_id == "" or record_to_id == "": return cloud_response( 400, 'Diff not created.', "Both record from and to be provided.") else: try: record_from = RecordModel.objects.with_id( record_from_id) record_to = RecordModel.objects.with_id(record_to_id) if record_to and record_from: diff = DiffModel(created_at=str( datetime.datetime.utcnow()), sender=current_user, targeted=current_user, record_from=record_from, record_to=record_to) diff.method = method diff.proposition = proposition diff.status = status diff.comments = comments diff.save() return cloud_response( 201, 'Diff successfully created.', "The diff was created.") else: return fk.Response( 'Both record from and to have to exist.', status.HTTP_404_NOT_FOUND) except: return fk.Response( str(traceback.print_exc()), status.HTTP_500_INTERNAL_SERVER_ERROR) else: return fk.Response('No content provided for the creation.', status.HTTP_204_NO_CONTENT) else: return fk.redirect('{0}:{1}/error/?code=405'.format( VIEW_HOST, VIEW_PORT))
def diff_create(): logTraffic(CLOUD_URL, endpoint='/private/diff/create') hash_session = basicAuthSession(fk.request) if fk.request.method == 'POST': access_resp = access_manager.check_cloud(hash_session, ACC_SEC, CNT_SEC) current_user = access_resp[1] if current_user is None: return fk.Response('Unauthorized action on this endpoint.', status.HTTP_401_UNAUTHORIZED) else: logAccess(CLOUD_URL, 'cloud', '/private/diff/create') if fk.request.data: data = json.loads(fk.request.data) record_from_id = data.get("record_from", "") record_to_id = data.get("record_to", "") method = data.get("method", "undefined") proposition = data.get("proposition", "undefined") status = data.get("status", "undefined") comments = data.get("comments", []) if record_from_id == "" or record_to_id == "": return cloud_response(400, 'Diff not created.', "Both record from and to be provided.") else: try: record_from = RecordModel.objects.with_id(record_from_id) record_to = RecordModel.objects.with_id(record_to_id) if current_user.group != "admin": if record_from.project.owner == current_user: sender_user = current_user receiver_user = record_to.project.owner else: sender_user = record_to.project.owner receiver_user = record_from.project.owner else: sender_user = record_from.project.owner receiver_user = record_to.project.owner if record_to and record_from: diff = DiffModel(created_at=str(datetime.datetime.utcnow()), sender=sender_user, targeted=receiver_user, record_from=record_from, record_to=record_to) diff.method = method diff.proposition = proposition diff.status = status diff.comments = comments diff.save() return cloud_response(201, 'Diff successfully created.', "The diff was created.") else: return fk.Response('Both record from and to have to exist.', status.HTTP_404_NOT_FOUND) except: return fk.Response(str(traceback.print_exc()), status.HTTP_500_INTERNAL_SERVER_ERROR) else: return fk.Response('No content provided for the creation.', status.HTTP_204_NO_CONTENT) else: return fk.redirect('{0}:{1}/error/?code=405'.format(VIEW_HOST, VIEW_PORT))
def diff_remove(hash_session, diff_id): logTraffic(CLOUD_URL, endpoint='/private/<hash_session>/diff/remove/<diff_id>') if fk.request.method in ['GET', 'DELETE']: access_resp = access_manager.check_cloud(hash_session) current_user = access_resp[1] if current_user is not None: try: logAccess(CLOUD_URL, 'cloud', '/private/<hash_session>/diff/remove/<diff_id>') diff = DiffModel.objects.with_id(diff_id) except: print(str(traceback.print_exc())) return fk.Response(str(traceback.print_exc()), status.HTTP_500_INTERNAL_SERVER_ERROR) if diff is None: return fk.Response('Unable to find this diff.', status.HTTP_404_NOT_FOUND) else: if diff.sender == current_user or diff.targeted == current_user: diff.delete() logStat(deleted=True, diff=diff) return cloud_response( 200, 'Deletion succeeded', 'The diff %s was succesfully deleted.' % diff_id) else: return fk.Response('Unauthorized action on this diff.', status.HTTP_401_UNAUTHORIZED) else: return fk.Response('Unauthorized action on this diff.', status.HTTP_401_UNAUTHORIZED) else: return fk.Response('Endpoint does not support this HTTP method.', status.HTTP_405_METHOD_NOT_ALLOWED)
def env_next(project_id): logTraffic(CLOUD_URL, endpoint='/private/env/next/<project_id>') hash_session = basicAuthSession(fk.request) if fk.request.method == 'POST': access_resp = access_manager.check_cloud(hash_session, ACC_SEC, CNT_SEC) current_user = access_resp[1] if current_user is None: return fk.redirect('{0}:{1}/error/?code=401'.format(VIEW_HOST, VIEW_PORT)) else: logAccess(CLOUD_URL, 'cloud', '/private/env/next/<project_id>') try: project = ProjectModel.objects.with_id(project_id) except: print(str(traceback.print_exc())) if project is None: return fk.Response('Unable to find the referenced project.', status.HTTP_404_NOT_FOUND) else: if fk.request.data: data = json.loads(fk.request.data) try: env = EnvironmentModel(created_at=str(datetime.datetime.utcnow())) application_name = data.get("app", None) if application_name and application_name != '': application = ApplicationModel.objects(name=application_name).first() if application: application.records = application.records + 1 application.save() if str(current_user.id) not in application.users: application.users.append(str(current_user.id)) application.save() env.application = application group = data.get("group", "unknown") system = data.get("system", "undefined") env.group = group env.system = system env.save() version = VersionModel(created_at=str(datetime.datetime.utcnow())) system = data.get("version", "unknown") version.system = system version.save() env.version = version env.save() bundle = BundleModel(created_at=str(datetime.datetime.utcnow())) bundle.scope = 'local' bundle.save() env.bundle = bundle env.save() project.history.append(str(env.id)) project.save() project_content = json.loads(project.summary_json()) project_content["env"] = {"bundle-id":str(bundle.id)} return cloud_response(201, 'Environment successfully created.', project_content) except: print(str(traceback.print_exc())) return fk.Response(str(traceback.print_exc()), status.HTTP_500_INTERNAL_SERVER_ERROR) else: return fk.Response('No content provided for the creation.', status.HTTP_204_NO_CONTENT) else: return fk.redirect('{0}:{1}/error/?code=405'.format(VIEW_HOST, VIEW_PORT))
def project_remove(hash_session, project_id): logTraffic(CLOUD_URL, endpoint='/private/<hash_session>/project/remove/<project_id>') if fk.request.method in ['GET', 'DELETE']: access_resp = access_manager.check_cloud(hash_session) current_user = access_resp[1] if current_user is not None: logAccess(CLOUD_URL, 'cloud', '/private/<hash_session>/project/remove/<project_id>') project = ProjectModel.objects.with_id(project_id) if project == None or (project != None and project.owner != current_user): return fk.Response('Unauthorized action on this project.', status.HTTP_401_UNAUTHORIZED) else: storage_manager.delete_project_files(project, logStat) project.delete() logStat(deleted=True, project=project) return cloud_response( 200, 'Deletion succeeded', 'The project %s was succesfully deleted.' % project_id) else: return fk.Response('Unauthorized action on this project.', status.HTTP_401_UNAUTHORIZED) else: return fk.Response('Endpoint does not support this HTTP method.', status.HTTP_405_METHOD_NOT_ALLOWED)
def diff_remove(diff_id): logTraffic(CLOUD_URL, endpoint='/private/diff/remove/<diff_id>') hash_session = basicAuthSession(fk.request) if fk.request.method in ['GET', 'DELETE']: access_resp = access_manager.check_cloud(hash_session, ACC_SEC, CNT_SEC) current_user = access_resp[1] if current_user is not None: try: logAccess(CLOUD_URL, 'cloud', '/private/diff/remove/<diff_id>') diff = DiffModel.objects.with_id(diff_id) except: print(str(traceback.print_exc())) return fk.Response(str(traceback.print_exc()), status.HTTP_500_INTERNAL_SERVER_ERROR) if diff is None: return fk.Response('Unable to find this diff.', status.HTTP_404_NOT_FOUND) else: if diff.sender == current_user or diff.targeted == current_user or current_user.group == "admin": diff.delete() logStat(deleted=True, diff=diff) return cloud_response(200, 'Deletion succeeded', 'The diff %s was succesfully deleted.'%diff_id) else: return fk.Response('Unauthorized action on this diff.', status.HTTP_401_UNAUTHORIZED) else: return fk.Response('Unauthorized action on this diff.', status.HTTP_401_UNAUTHORIZED) else: return fk.Response('Endpoint does not support this HTTP method.', status.HTTP_405_METHOD_NOT_ALLOWED)
def env_remove(env_id): logTraffic(CLOUD_URL, endpoint='/private/env/remove/<env_id>') hash_session = basicAuthSession(fk.request) if fk.request.method in ['GET', 'DELETE']: access_resp = access_manager.check_cloud(hash_session, ACC_SEC, CNT_SEC) current_user = access_resp[1] if current_user is None: return fk.Response('Unauthorized action on this environment.', status.HTTP_401_UNAUTHORIZED) else: try: logAccess(CLOUD_URL, 'cloud', '/private/env/remove/<env_id>') env = EnvironmentModel.objects.with_id(env_id) except: print(str(traceback.print_exc())) if env is None: return fk.Response('Unable to find this environment.', status.HTTP_404_NOT_FOUND) else: # result = storage_manager.delete_env_files(env) # if result: # implement project history en removal: project.history.append(str(env.id)) count = 0 for project in ProjectModel.objects(owner=current_user): try: project.history.remove(str(env_id)) project.save() count = count + 1 except: pass if count > 0: env.delete() return cloud_response(200, 'Deletion succeeded', 'The environment %s was succesfully deleted.'%env_id) else: return fk.Response('Endpoint does not support this HTTP method.', status.HTTP_405_METHOD_NOT_ALLOWED)
def record_create(project_id): logTraffic(CLOUD_URL, endpoint='/private/record/create/<project_id>') hash_session = basicAuthSession(fk.request) if fk.request.method == 'POST': access_resp = access_manager.check_cloud(hash_session, ACC_SEC, CNT_SEC) current_user = access_resp[1] if current_user is None: return fk.Response('Unauthorized action on this endpoint.', status.HTTP_401_UNAUTHORIZED) else: logAccess(fk, access_resp[1], CLOUD_URL, 'cloud', '/private/record/create/<project_id>') if current_user.quota >= current_user.max_quota*1024*1024*1024: return fk.Response('You have exceeded your allowed maximum quota.', status.HTTP_401_UNAUTHORIZED) try: project = ProjectModel.objects.with_id(project_id) except: print(str(traceback.print_exc())) if project is None: return fk.Response('Unable to find the referenced project.', status.HTTP_404_NOT_FOUND) else: if project.owner == current_user or current_user.group == "admin": if fk.request.data: data = json.loads(fk.request.data) try: record = RecordModel(created_at=str(datetime.datetime.utcnow()), project=project) tags = data.get("tags", "") rationels = data.get("rationels", "") status = data.get("status", "unknown") content = data.get("content", "no content") access = data.get("access", project.access) record.tags = [tags] record.rationels = [rationels] record.status = status record.access = access record.extend = {"uploaded":content} record.save() if len(project.history) > 0: head = project.history[-1] env = EnvironmentModel.objects.with_id(head) if env: record.environment = env record.save() # project_content = {"project":json.loads(project.summary_json())} # records = [] # for r in RecordModel.objects(project=project): # records.append(r) # project_content["activity"] = {"number":len(records), "records":[{"id":str(record.id), "created":str(record.created_at), "updated":str(record.updated_at), "status":str(record.status)} for record in records]} return cloud_response(201, 'Record successfully created.', json.loads(project.summary_json())) except: print(str(traceback.print_exc())) return fk.Response('Failure to process. Contact admin if it persists.', status.HTTP_500_INTERNAL_SERVER_ERROR) else: return fk.Response('No content provided for the creation.', status.HTTP_204_NO_CONTENT) else: return fk.Response('Unauthorized action on this record.', status.HTTP_401_UNAUTHORIZED) else: return fk.Response('Endpoint does not support this HTTP method.', status.HTTP_405_METHOD_NOT_ALLOWED)
def record_create(hash_session, project_id): logTraffic(CLOUD_URL, endpoint='/private/<hash_session>/record/create/<project_id>') if fk.request.method == 'POST': access_resp = access_manager.check_cloud(hash_session) current_user = access_resp[1] if current_user is None: return fk.Response('Unauthorized action on this endpoint.', status.HTTP_401_UNAUTHORIZED) else: logAccess(CLOUD_URL, 'cloud', '/private/<hash_session>/record/create/<project_id>') try: project = ProjectModel.objects.with_id(project_id) except: print(str(traceback.print_exc())) if project is None: return fk.Response('Unable to find the referenced project.', status.HTTP_404_NOT_FOUND) else: if project.owner == current_user: if fk.request.data: data = json.loads(fk.request.data) try: record = RecordModel(created_at=str( datetime.datetime.utcnow()), project=project) tags = data.get("tags", "") rationels = data.get("rationels", "") status = data.get("status", "unknown") content = data.get("content", "no content") access = data.get("access", "public") record.tags = [tags] record.rationels = [rationels] record.status = status record.access = access record.extend = {"uploaded": content} record.save() return cloud_response( 201, 'Record successfully created.', "The record was created.") except: print(str(traceback.print_exc())) return fk.Response( str(traceback.print_exc()), status.HTTP_500_INTERNAL_SERVER_ERROR) else: return fk.Response( 'No content provided for the creation.', status.HTTP_204_NO_CONTENT) else: return fk.Response('Unauthorized action on this record.', status.HTTP_401_UNAUTHORIZED) else: return fk.Response('Endpoint does not support this HTTP method.', status.HTTP_405_METHOD_NOT_ALLOWED)
def env_create(record_id): logTraffic(CLOUD_URL, endpoint='/private/env/create/<record_id>') hash_session = basicAuthSession(fk.request) if fk.request.method == 'POST': access_resp = access_manager.check_cloud(hash_session, ACC_SEC, CNT_SEC) current_user = access_resp[1] if current_user is None: return fk.redirect('{0}:{1}/error/?code=401'.format(VIEW_HOST, VIEW_PORT)) else: logAccess(fk, access_resp[1], CLOUD_URL, 'cloud', '/private/env/create/<record_id>') try: record = RecordModel.objects.with_id(record_id) except: print(str(traceback.print_exc())) if record is None: return fk.Response('Unable to find the referenced record.', status.HTTP_404_NOT_FOUND) else: if fk.request.data: data = json.loads(fk.request.data) try: env = EnvironmentModel(created_at=str(datetime.datetime.utcnow())) application_name = data.get("app", None) if application_name and application_name != '': application = ApplicationModel.objects(name=application_name).first() if application: # Maybe not put record increment here. application.records = application.records + 1 application.save() if str(current_user.id) not in application.users: application.users.append(str(current_user.id)) application.save() env.application = application group = data.get("group", "unknown") system = data.get("system", "undefined") env.group = group env.system = system env.save() project = record.project if record.environment: project.history.remove(str(record.environment.id)) record.environment = env record.save() project.history.append(str(env.id)) project.save() return cloud_response(201, 'Environment successfully created.', project.history) except: print(str(traceback.print_exc())) return fk.Response('Failure to process. Contact admin if it persists.', status.HTTP_500_INTERNAL_SERVER_ERROR) else: return fk.Response('No content provided for the creation.', status.HTTP_204_NO_CONTENT) else: return fk.redirect('{0}:{1}/error/?code=405'.format(VIEW_HOST, VIEW_PORT))
def project_create(hash_session): logTraffic(CLOUD_URL, endpoint='/private/<hash_session>/project/create') if fk.request.method == 'POST': access_resp = access_manager.check_cloud(hash_session) current_user = access_resp[1] if current_user is not None: logAccess(CLOUD_URL, 'cloud', '/private/<hash_session>/project/create') if fk.request.data: data = json.loads(fk.request.data) try: name = data.get("name", "") description = data.get("description", "") goals = data.get("goals", "") access = data.get("access", 'public') group = data.get("group", "undefined") tags = data.get("tags", "") environment = data.get("environment", {}) query_project = ProjectModel.objects(owner=current_user, name=name).first() if query_project is None: project = ProjectModel(created_at=str( datetime.datetime.utcnow()), owner=current_user, name=name) project.description = description project.access = access project.goals = goals project.group = group project.tags = [tags] project.save() return cloud_response(201, 'Project successfully created.', "The project was created.") else: return fk.Response( 'A project with this name already exists.', status.HTTP_403_FORBIDDEN) except: print(str(traceback.print_exc())) return fk.Response(str(traceback.print_exc()), status.HTTP_500_INTERNAL_SERVER_ERROR) else: return fk.Response('No content provided for the creation.', status.HTTP_204_NO_CONTENT) else: return fk.Response('Unauthorized action on this project.', status.HTTP_401_UNAUTHORIZED) else: return fk.Response('Endpoint does not support this HTTP method.', status.HTTP_405_METHOD_NOT_ALLOWED)
def env_create(hash_session, record_id): logTraffic(CLOUD_URL, endpoint='/private/<hash_session>/env/create/<record_id>') if fk.request.method == 'POST': access_resp = access_manager.check_cloud(hash_session) current_user = access_resp[1] if current_user is None: return fk.redirect('{0}:{1}/error/?code=401'.format(VIEW_HOST, VIEW_PORT)) else: logAccess(CLOUD_URL, 'cloud', '/private/<hash_session>/env/create/<record_id>') try: record = RecordModel.objects.with_id(record_id) except: print(str(traceback.print_exc())) if record is None: return fk.Response('Unable to find the referenced record.', status.HTTP_404_NOT_FOUND) else: if fk.request.data: data = json.loads(fk.request.data) try: env = EnvironmentModel(created_at=str(datetime.datetime.utcnow())) application_name = data.get("app", None) if application_name and application_name != '': application = ApplicationModel.objects(name=application_name).first() if application: application.records = application.records + 1 application.save() if str(current_user.id) not in application.users: application.users.append(str(current_user.id)) application.save() env.application = application group = data.get("group", "unknown") system = data.get("system", "undefined") env.group = group env.system = system env.save() project = record.project if record.environment: project.history.remove(str(record.environment.id)) record.environment = env record.save() project.history.append(str(env.id)) project.save() return cloud_response(201, 'Environment successfully created.', project.history) except: print(str(traceback.print_exc())) return fk.Response(str(traceback.print_exc()), status.HTTP_500_INTERNAL_SERVER_ERROR) else: return fk.Response('No content provided for the creation.', status.HTTP_204_NO_CONTENT) else: return fk.redirect('{0}:{1}/error/?code=405'.format(VIEW_HOST, VIEW_PORT))
def record_remove(record_id): logTraffic(CLOUD_URL, endpoint='/private/record/remove/<record_id>') hash_session = basicAuthSession(fk.request) if fk.request.method in ['GET', 'DELETE']: access_resp = access_manager.check_cloud(hash_session, ACC_SEC, CNT_SEC) current_user = access_resp[1] if current_user is None: return fk.Response('Unauthorized action on this record.', status.HTTP_401_UNAUTHORIZED) else: try: logAccess(CLOUD_URL, 'cloud', '/private/record/remove/<record_id>') record = RecordModel.objects.with_id(record_id) except: print(str(traceback.print_exc())) if record is None: return fk.Response('Unable to find this record.', status.HTTP_404_NOT_FOUND) return fk.redirect('{0}:{1}/error/?code=204'.format( VIEW_HOST, VIEW_PORT)) else: if record.project.owner == current_user or current_user.group == "admin": storage_manager.delete_record_files(record, logStat) logStat(deleted=True, record=record) env_id = None if record.environment: env_id = str(record.environment.id) record.delete() if env_id: try: record.project.history.remove(env_id) record.project.save() except: pass return cloud_response( 200, 'Deletion succeeded', 'The record %s was succesfully deleted.' % record_id) else: return fk.Response('Unauthorized action on this record.', status.HTTP_401_UNAUTHORIZED) else: return fk.Response('Endpoint does not support this HTTP method.', status.HTTP_405_METHOD_NOT_ALLOWED)
def project_remove(project_id): logTraffic(CLOUD_URL, endpoint='/private/project/remove/<project_id>') hash_session = basicAuthSession(fk.request) if fk.request.method in ['GET', 'DELETE']: access_resp = access_manager.check_cloud(hash_session, ACC_SEC, CNT_SEC) current_user = access_resp[1] if current_user is not None: logAccess(CLOUD_URL, 'cloud', '/private/project/remove/<project_id>') project = ProjectModel.objects.with_id(project_id) if project == None or (project != None and project.owner != current_user and current_user.group != "admin"): return fk.Response('Unauthorized action on this project.', status.HTTP_401_UNAUTHORIZED) else: storage_manager.delete_project_files(project, logStat) project.delete() logStat(deleted=True, project=project) return cloud_response(200, 'Deletion succeeded', 'The project %s was succesfully deleted.'%project_id) else: return fk.Response('Unauthorized action on this project.', status.HTTP_401_UNAUTHORIZED) else: return fk.Response('Endpoint does not support this HTTP method.', status.HTTP_405_METHOD_NOT_ALLOWED)
def project_create(): logTraffic(CLOUD_URL, endpoint='/private/project/create') hash_session = basicAuthSession(fk.request) if fk.request.method == 'POST': access_resp = access_manager.check_cloud(hash_session, ACC_SEC, CNT_SEC) current_user = access_resp[1] if current_user is not None: logAccess(fk, access_resp[1], CLOUD_URL, 'cloud', '/private/project/create') if current_user.quota >= current_user.max_quota*1024*1024*1024: return fk.Response('You have exceeded your allowed maximum quota.', status.HTTP_401_UNAUTHORIZED) if fk.request.data: data = json.loads(fk.request.data) try: name = data.get("name", "") description = data.get("description", "") goals = data.get("goals", "") access = data.get("access", 'public') group = data.get("group", "undefined") tags = data.get("tags", "") environment = data.get("environment", {}) query_project = ProjectModel.objects(owner=current_user, name=name).first() if query_project is None: project = ProjectModel(created_at=str(datetime.datetime.utcnow()), owner=current_user, name=name) project.description = description project.access = access project.goals = goals project.group = group project.tags = [tags] project.save() return cloud_response(201, 'Project successfully created.', project.info()) else: return fk.Response('A project with this name already exists.', status.HTTP_403_FORBIDDEN) except: print(str(traceback.print_exc())) return fk.Response('Failure to process. Contact admin if it persists.', status.HTTP_500_INTERNAL_SERVER_ERROR) else: return fk.Response('No content provided for the creation.', status.HTTP_204_NO_CONTENT) else: return fk.Response('Unauthorized action on this project.', status.HTTP_401_UNAUTHORIZED) else: return fk.Response('Endpoint does not support this HTTP method.', status.HTTP_405_METHOD_NOT_ALLOWED)
def record_remove(record_id): logTraffic(CLOUD_URL, endpoint='/private/record/remove/<record_id>') hash_session = basicAuthSession(fk.request) if fk.request.method in ['GET', 'DELETE']: access_resp = access_manager.check_cloud(hash_session, ACC_SEC, CNT_SEC) current_user = access_resp[1] if current_user is None: return fk.Response('Unauthorized action on this record.', status.HTTP_401_UNAUTHORIZED) else: try: logAccess(CLOUD_URL, 'cloud', '/private/record/remove/<record_id>') record = RecordModel.objects.with_id(record_id) except: print(str(traceback.print_exc())) if record is None: return fk.Response('Unable to find this record.', status.HTTP_404_NOT_FOUND) return fk.redirect('{0}:{1}/error/?code=204'.format(VIEW_HOST, VIEW_PORT)) else: if record.project.owner == current_user or current_user.group == "admin": storage_manager.delete_record_files(record, logStat) logStat(deleted=True, record=record) env_id = None if record.environment: env_id = str(record.environment.id) record.delete() if env_id: try: record.project.history.remove(env_id) record.project.save() except: pass return cloud_response(200, 'Deletion succeeded', 'The record %s was succesfully deleted.'%record_id) else: return fk.Response('Unauthorized action on this record.', status.HTTP_401_UNAUTHORIZED) else: return fk.Response('Endpoint does not support this HTTP method.', status.HTTP_405_METHOD_NOT_ALLOWED)
def record_create(project_id): logTraffic(CLOUD_URL, endpoint='/private/record/create/<project_id>') hash_session = basicAuthSession(fk.request) if fk.request.method == 'POST': access_resp = access_manager.check_cloud(hash_session, ACC_SEC, CNT_SEC) current_user = access_resp[1] if current_user is None: return fk.Response('Unauthorized action on this endpoint.', status.HTTP_401_UNAUTHORIZED) else: logAccess(CLOUD_URL, 'cloud', '/private/record/create/<project_id>') try: project = ProjectModel.objects.with_id(project_id) except: print(str(traceback.print_exc())) if project is None: return fk.Response('Unable to find the referenced project.', status.HTTP_404_NOT_FOUND) else: if project.owner == current_user or current_user.group == "admin": if fk.request.data: data = json.loads(fk.request.data) try: record = RecordModel(created_at=str( datetime.datetime.utcnow()), project=project) tags = data.get("tags", "") rationels = data.get("rationels", "") status = data.get("status", "unknown") content = data.get("content", "no content") access = data.get("access", "public") record.tags = [tags] record.rationels = [rationels] record.status = status record.access = access record.extend = {"uploaded": content} record.save() if len(project.history) > 0: head = project.history[-1] env = EnvironmentModel.objects.with_id(head) if env: record.environment = env record.save() # project_content = {"project":json.loads(project.summary_json())} # records = [] # for r in RecordModel.objects(project=project): # records.append(r) # project_content["activity"] = {"number":len(records), "records":[{"id":str(record.id), "created":str(record.created_at), "updated":str(record.updated_at), "status":str(record.status)} for record in records]} return cloud_response( 201, 'Record successfully created.', json.loads(project.summary_json())) except: print(str(traceback.print_exc())) return fk.Response( str(traceback.print_exc()), status.HTTP_500_INTERNAL_SERVER_ERROR) else: return fk.Response( 'No content provided for the creation.', status.HTTP_204_NO_CONTENT) else: return fk.Response('Unauthorized action on this record.', status.HTTP_401_UNAUTHORIZED) else: return fk.Response('Endpoint does not support this HTTP method.', status.HTTP_405_METHOD_NOT_ALLOWED)
def env_next(project_id): logTraffic(CLOUD_URL, endpoint='/private/env/next/<project_id>') hash_session = basicAuthSession(fk.request) if fk.request.method == 'POST': access_resp = access_manager.check_cloud(hash_session, ACC_SEC, CNT_SEC) current_user = access_resp[1] if current_user is None: return fk.redirect('{0}:{1}/error/?code=401'.format(VIEW_HOST, VIEW_PORT)) else: logAccess(fk, access_resp[1], CLOUD_URL, 'cloud', '/private/env/next/<project_id>') if current_user.quota >= current_user.max_quota*1024*1024*1024: return fk.Response('You have exceeded your allowed maximum quota.', status.HTTP_401_UNAUTHORIZED) try: project = ProjectModel.objects.with_id(project_id) except: print(str(traceback.print_exc())) if project is None: return fk.Response('Unable to find the referenced project.', status.HTTP_404_NOT_FOUND) else: if project.owner != current_user: return fk.Response('Unauthorized action on this project.', status.HTTP_401_UNAUTHORIZED) if fk.request.data: data = json.loads(fk.request.data) try: env = EnvironmentModel(created_at=str(datetime.datetime.utcnow())) application_name = data.get("app", None) if application_name and application_name != '': application = ApplicationModel.objects(name=application_name).first() if application: application.records = application.records + 1 application.save() if str(current_user.id) not in application.users: application.users.append(str(current_user.id)) application.save() env.application = application group = data.get("group", "unknown") system = data.get("system", "undefined") env.group = group env.system = system env.save() version = VersionModel(created_at=str(datetime.datetime.utcnow())) system = data.get("version", "unknown") vc_location = data.get("version-location") vc_baselines = vc_location.split("|") if len(vc_baselines) > 0: version.baseline = vc_baselines[0] if len(vc_baselines) > 1: version.marker = vc_baselines[1] version.system = system version.save() env.version = version env.save() bundle = BundleModel(created_at=str(datetime.datetime.utcnow())) scope = data.get("env-location", "unknown") bundle.scope = scope if scope == "remote": bundle.storage = data.get("bundle-location", "unknown") bundle.save() env.bundle = bundle env.save() project.history.append(str(env.id)) project.save() project_content = json.loads(project.summary_json()) project_content["env"] = {"bundle-id":str(bundle.id)} return cloud_response(201, 'Environment successfully created.', project_content) except: print(str(traceback.print_exc())) return fk.Response('Failure to process. Contact admin if it persists.', status.HTTP_500_INTERNAL_SERVER_ERROR) else: return fk.Response('No content provided for the creation.', status.HTTP_204_NO_CONTENT) else: return fk.redirect('{0}:{1}/error/?code=405'.format(VIEW_HOST, VIEW_PORT))