def reject_deletion(project_name: str, user_email: str) -> bool:
    response = False
    project = project_name.lower()
    if is_request_deletion_user(project,
                                user_email) and project_name == project:
        data = project_dal.get_attributes(
            project, ['project_status', 'historic_deletion'])
        historic_deletion = cast(List[Dict[str, str]],
                                 data.get('historic_deletion', []))
        if data.get('project_status') == 'PENDING_DELETION':
            tzn = pytz.timezone(settings.TIME_ZONE)  # type: ignore
            today = datetime.now(tz=tzn).today()
            new_state = {
                'date': today.strftime('%Y-%m-%d %H:%M:%S'),
                'user': user_email.lower(),
                'state': 'REJECTED'
            }
            historic_deletion.append(new_state)
            new_data = {
                'project_status': 'ACTIVE',
                'historic_deletion': historic_deletion
            }
            response = project_dal.update(project, new_data)
        else:
            raise NotPendingDeletion()
    else:
        raise PermissionDenied()
    return response
def request_deletion(project_name: str, user_email: str) -> bool:
    project = project_name.lower()
    response = False
    if user_domain.get_project_access(user_email,
                                      project) and project_name == project:
        data = project_dal.get_attributes(
            project, ['project_status', 'historic_deletion'])
        historic_deletion = cast(List[Dict[str, str]],
                                 data.get('historic_deletion', []))
        if data.get('project_status') not in ['DELETED', 'PENDING_DELETION']:
            tzn = pytz.timezone(settings.TIME_ZONE)  # type: ignore
            today = datetime.now(tz=tzn).today()
            deletion_date = (
                today + timedelta(days=30)).strftime('%Y-%m-%d') + ' 23:59:59'
            new_state = {
                'date': today.strftime('%Y-%m-%d %H:%M:%S'),
                'deletion_date': deletion_date,
                'user': user_email.lower(),
            }
            historic_deletion.append(new_state)
            new_data: ProjectType = {
                'historic_deletion': historic_deletion,
                'project_status': 'PENDING_DELETION'
            }
            response = project_dal.update(project, new_data)
        else:
            raise AlreadyPendingDeletion()
    else:
        raise PermissionDenied()
    return response
Exemplo n.º 3
0
def mask(project_name: str) -> NamedTuple:
    project_name = project_name.lower()
    project = project_dal.get_attributes(
        project_name, ['environments', 'files', 'repositories'])
    Status: NamedTuple = namedtuple(
        'Status',
        'are_files_removed files_result environments_result repositories_result'
    )
    are_files_removed = all([
        resources_dal.remove_file(file_name)
        for file_name in resources_dal.search_file(f'{project_name}/')
    ])
    files_result = project_dal.update(
        project_name, {
            'files': [{
                'fileName': 'Masked',
                'description': 'Masked',
                'uploader': 'Masked'
            } for file_resource in project.get('files', [])]
        })
    environments_result = project_dal.update(
        project_name, {
            'environments': [{
                'urlEnv': 'Masked'
            } for file_resource in project.get('environments', [])]
        })
    repositories_result = project_dal.update(
        project_name, {
            'repositories': [{
                'protocol': 'Masked',
                'urlRepo': 'Masked'
            } for file_resource in project.get('repositories', [])]
        })
    success = cast(
        NamedTuple,
        Status(are_files_removed, files_result, environments_result,
               repositories_result))
    return success
Exemplo n.º 4
0
def update_indicators():
    """Update in dynamo indicators."""
    rollbar.report_message(
        'Warning: Function to update indicators in DynamoDB is running', 'warning')
    projects = project_domain.get_active_projects()
    for project in projects:
        indicators = get_project_indicators(project)
        try:
            response = project_dal.update(project, indicators)
            if response:
                util.invalidate_cache(project)
            else:
                rollbar.report_message(
                    'Error: An error ocurred updating indicators of '
                    'the project {project} in dynamo'.format(project=project),
                    'error')
        except ClientError:
            rollbar.report_message(
                'Error: An error ocurred updating '
                'indicators of the project {project}'.format(project=project),
                'error')
def remove_project(project_name: str, user_email: str) -> NamedTuple:
    """Delete project information."""
    project = project_name.lower()
    Status: NamedTuple = namedtuple(
        'Status',
        'are_findings_masked are_users_removed is_project_finished are_resources_removed'
    )
    response = Status(False, False, False, False)
    data = project_dal.get_attributes(project, ['project_status'])
    validation = False
    if user_email:
        validation = is_alive(project) and user_domain.get_project_access(
            user_email, project)
    if (not user_email and data.get('project_status')
            == 'PENDING_DELETION') or validation:
        tzn = pytz.timezone(settings.TIME_ZONE)  # type: ignore
        today = datetime.now(tz=tzn).today().strftime('%Y-%m-%d %H:%M:%S')
        are_users_removed = remove_all_users_access(project)
        are_findings_masked: Union[bool, List[bool]] = [
            finding_domain.mask_finding(finding_id)
            for finding_id in list_findings(project) + list_drafts(project)
        ]
        if are_findings_masked == []:
            are_findings_masked = True
        update_data: Dict[str, Union[str, List[str], object]] = {
            'project_status': 'FINISHED',
            'deletion_date': today
        }
        is_project_finished = project_dal.update(project, update_data)
        are_resources_removed = all(
            list(cast(List[bool], resources_domain.mask(project))))
        util.invalidate_cache(project)
        response = Status(are_findings_masked, are_users_removed,
                          is_project_finished, are_resources_removed)
    else:
        raise PermissionDenied()
    return cast(NamedTuple, response)
def update(project_name: str, data: ProjectType) -> bool:
    return project_dal.update(project_name, data)