Exemplo n.º 1
0
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))
Exemplo n.º 2
0
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))
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
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))
Exemplo n.º 5
0
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)
Exemplo n.º 6
0
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)
Exemplo n.º 7
0
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)
Exemplo n.º 8
0
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)
Exemplo n.º 9
0
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)
Exemplo n.º 10
0
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))
Exemplo n.º 11
0
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)
Exemplo n.º 12
0
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))
Exemplo n.º 13
0
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)
Exemplo n.º 14
0
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)
Exemplo n.º 15
0
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)
Exemplo n.º 16
0
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)
Exemplo n.º 17
0
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)
Exemplo n.º 18
0
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))