def show_group(avg): data = get_group_data(avg) if not data: return not_found() group = data['group'] advisories = data['advisories'] if not current_user.role.is_reporter: advisories = list(filter(lambda advisory: advisory.publication == Publication.published, advisories)) issues = data['issues'] packages = data['packages'] issue_types = data['issue_types'] versions = data['versions'] issue_type = 'multiple issues' if len(issue_types) > 1 else issue_types[0] pkgnames = list(set(sorted([pkg.pkgname for pkg in packages]))) form = AdvisoryForm() form.advisory_type.data = issue_type return render_template('group.html', title='{} - {}'.format(group, ' '.join(pkgnames)), form=form, group=group, packages=packages, issues=issues, advisories=advisories, versions=versions, Status=Status, issue_type=issue_type, bug_data=get_bug_data(issues, packages, versions, group), advisories_pending=data['advisories_pending'], can_edit=user_can_edit_group(advisories), can_delete=user_can_delete_group(advisories), can_handle_advisory=user_can_handle_advisory())
def delete_group(avg): avg_id = avg.replace('AVG-', '') entries = (db.session.query( CVEGroup, CVE, CVEGroupPackage, Advisory).filter(CVEGroup.id == avg_id).join( CVEGroupEntry, CVEGroup.issues).join(CVE, CVEGroupEntry.cve).join( CVEGroupPackage, CVEGroup.packages).outerjoin( Advisory, Advisory.group_package_id == CVEGroupPackage.id)).all() if not entries: return not_found() group = entries[0][0] issues = set() packages = set() advisories = set() for group, issue, pkg, advisory in entries: issues.add(issue) packages.add(pkg) if advisory: advisories.add(advisory) if not user_can_delete_group(advisories): return forbidden() issues = sorted(issues, key=lambda item: item.id) packages = sorted(packages, key=lambda item: item.pkgname) advisories = sorted(advisories, key=lambda item: item.id, reverse=True) form = ConfirmForm() title = 'Delete {}'.format(avg) if not form.validate_on_submit(): return render_template('form/delete_group.html', title=title, heading=title, form=form, group=group, issues=issues, packages=packages) if not form.confirm.data: return redirect('/{}'.format(group)) db.session.delete(group) db.session.commit() flash('Deleted {}'.format(group)) return redirect('/')