0
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
1 # -*- encoding: utf-8 -*- |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
2 # Description: |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
3 # Web stuff about the ProductTree |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
4 # |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
5 # Authors: |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
6 # BenoƮt Allard <benoit.allard@greenbone.net> |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
7 # |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
8 # Copyright: |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
9 # Copyright (C) 2014 Greenbone Networks GmbH |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
10 # |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
11 # This program is free software; you can redistribute it and/or |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
12 # modify it under the terms of the GNU General Public License |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
13 # as published by the Free Software Foundation; either version 2 |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
14 # of the License, or (at your option) any later version. |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
15 # |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
16 # This program is distributed in the hope that it will be useful, |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
17 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
18 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
19 # GNU General Public License for more details. |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
20 # |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
21 # You should have received a copy of the GNU General Public License |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
22 # along with this program; if not, write to the Free Software |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
23 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
24 |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
25 """\ |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
26 Web-stuff about the producttree |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
27 """ |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
28 |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
29 from functools import wraps |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
30 |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
31 from flask import Blueprint, render_template, redirect, url_for, abort, request, flash |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
32 |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
33 from farolluz.cvrf import (CVRFProductBranch, CVRFFullProductName, |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
34 CVRFRelationship, CVRFGroup) |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
35 from .session import document_required, get_current |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
36 |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
37 producttree = Blueprint('producttree', __name__) |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
38 |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
39 def producttree_required(f): |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
40 @wraps(f) |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
41 def decorated_function(*args, **kwargs): |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
42 if get_current()._producttree is None: |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
43 flash('Operation invalid without producttree', 'warning') |
22
|
44 return redirect(url_for('document.view')) |
0
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
45 return f(*args, **kwargs) |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
46 return decorated_function |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
47 |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
48 @producttree.route('/create', methods=['POST']) |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
49 @document_required |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
50 def create(): |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
51 get_current().createProductTree() |
45
|
52 return redirect(url_for('.view')) |
0
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
53 |
45
|
54 @producttree.route('/') |
|
55 @document_required |
|
56 @producttree_required |
|
57 def view(): |
|
58 return render_template('producttree/view.j2', |
|
59 producttree=get_current()._producttree) |
0
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
60 |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
61 @producttree.route('/branch/<path:path>/edit', methods=['GET', 'POST']) |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
62 @document_required |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
63 @producttree_required |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
64 def edit_branch(path): |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
65 path = [int(p) for p in path.split('/')] |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
66 cvrf = get_current() |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
67 ptree = cvrf._producttree |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
68 try: |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
69 branch = cvrf._producttree.getBranch(path) |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
70 except ValueError: |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
71 abort(404) |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
72 if request.method != 'POST': |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
73 branches = [('', '')] + [(b.getName(), b.getPath(True)) for b in ptree.getNotTerminalBranches(branch)] |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
74 return render_template('producttree/edit_branch.j2', branch=branch, branches=branches, types=branch.TYPES) |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
75 |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
76 pbranch = ptree |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
77 if request.form['parent']: |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
78 pbranch = ptree.getBranch([int(p) for p in request.form['parent'].split('/')]) |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
79 |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
80 if pbranch is not branch.getParent(): |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
81 # We have to 're-link' the element ... |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
82 # 1. unlink |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
83 branch.unlink() |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
84 # 2. set the new parent |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
85 branch._parentbranch = pbranch |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
86 # 3. add to the Tree (again) |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
87 ptree.addBranch(branch) |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
88 |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
89 branch._type = request.form['type'] |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
90 branch._name = request.form['name'] |
45
|
91 return redirect(url_for('.view')) |
0
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
92 |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
93 @producttree.route('/branch/add', methods=['GET', 'POST']) |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
94 @document_required |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
95 @producttree_required |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
96 def add_branch(): |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
97 cvrf = get_current() |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
98 ptree = cvrf._producttree |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
99 if request.method != 'POST': |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
100 branches = [('', '')] + [(b.getName(), b.getPath(True)) for b in ptree.getNotTerminalBranches()] |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
101 return render_template('producttree/edit_branch.j2', branch=CVRFProductBranch('', '', ptree), action='Add', branches=branches, types=CVRFProductBranch.TYPES) |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
102 |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
103 pbranch = ptree |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
104 if request.form['parent']: |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
105 pbranch = ptree.getBranch([int(p) for p in request.form['parent'].split('/')]) |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
106 branch = CVRFProductBranch(request.form['type'], request.form['name'], pbranch) |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
107 ptree.addBranch(branch) |
45
|
108 return redirect(url_for('.view')) |
0
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
109 |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
110 @producttree.route('/product/<productid>') |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
111 @document_required |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
112 @producttree_required |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
113 def view_product(productid): |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
114 cvrf = get_current() |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
115 try: |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
116 product = cvrf.getProductForID(productid) |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
117 except IndexError: |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
118 abort(404) |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
119 return render_template('producttree/view_product.j2', product=product, cvrf=cvrf) |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
120 |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
121 @producttree.route('/product/<productid>/edit', methods=['GET', 'POST']) |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
122 @document_required |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
123 @producttree_required |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
124 def edit_product(productid): |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
125 cvrf = get_current() |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
126 ptree = cvrf._producttree |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
127 try: |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
128 product = cvrf.getProductForID(productid) |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
129 except KeyError: |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
130 abort(404) |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
131 |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
132 if request.method != 'POST': |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
133 current_rel = '' |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
134 if product.isRelationship(): |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
135 current_rel = str(ptree._relationships.index(product.getCurrentRelationship())) |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
136 leaves = [('', '')] + [(b.getName(), b.getPath(True)) for b in ptree.getOrphanedBranches(product)] |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
137 rels = [('', '')] + [(ptree.getNameOfRelationship(r), str(i)) for i, r in ptree.getOrphanedRelationships(product)] |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
138 return render_template('producttree/edit_product.j2', product=product, action='Update', orphaned_leaves=leaves, orphaned_relationships=rels, current_rel=current_rel) |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
139 |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
140 if request.form['parent_branch'] and request.form['parent_relationship']: |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
141 flash('Cannot set a parent branch and parent relationship', 'danger') |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
142 return redirect(url_for('.edit_product', productid=productid)) |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
143 |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
144 oldp = product._parent |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
145 if request.form['parent_branch']: |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
146 pbranch = ptree.getBranch([int(p) for p in request.form['parent_branch'].split('/')]) |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
147 if pbranch is not oldp: |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
148 # Gonna be funny, needs re-link |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
149 product.unlink() |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
150 product._parent = pbranch |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
151 ptree.addProduct(product) |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
152 elif request.form['parent_relationship']: |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
153 prel = ptree._relationships[int(request.form['parent_relationship'])] |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
154 if prel is not oldp: |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
155 product.unlink() |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
156 product._parent = prel |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
157 ptree.addProduct(product) |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
158 else: |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
159 if ptree is not oldp: |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
160 product.unlink() |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
161 product._parent = ptree |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
162 ptree.addProduct(product) |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
163 |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
164 product._productid = request.form['productid'] |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
165 product._name = request.form['name'] |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
166 product._cpe = request.form['cpe'] or None |
45
|
167 return redirect(url_for('.view')) |
0
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
168 |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
169 @producttree.route('/product/add', methods=['GET', 'POST']) |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
170 @document_required |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
171 @producttree_required |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
172 def add_product(): |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
173 cvrf = get_current() |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
174 ptree = cvrf._producttree |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
175 |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
176 if request.method != 'POST': |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
177 product=CVRFFullProductName('', '', ptree) |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
178 leaves = [('', '')] + [(b.getName(), b.getPath(True)) for b in ptree.getOrphanedBranches()] |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
179 rels = [('', '')] + [(ptree.getNameOfRelationship(r), str(i)) for i, r in ptree.getOrphanedRelationships()] |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
180 return render_template('producttree/edit_product.j2', product=product, action='Add', orphaned_leaves=leaves, orphaned_relationships=rels, current_rel='') |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
181 |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
182 if request.form['parent_branch'] and request.form['parent_relationship']: |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
183 flash('Cannot set a parent branch and parent relationship', 'danger') |
62
|
184 return redirect(url_for('.add_product')) |
0
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
185 |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
186 parent = ptree |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
187 if request.form['parent_branch']: |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
188 parent = ptree.getBranch([int(p) for p in request.form['parent_branch'].split('/')]) |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
189 elif request.form['parent_relationship']: |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
190 parent = ptree._relationships[int(request.form['parent_relationship'])] |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
191 |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
192 product = CVRFFullProductName(request.form['productid'], request.form['name'], parent, request.form['cpe'] or None) |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
193 ptree.addProduct(product) |
45
|
194 return redirect(url_for('.view')) |
0
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
195 |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
196 @producttree.route('/relationship/<int:index>/edit', methods=['GET', 'POST']) |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
197 @document_required |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
198 @producttree_required |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
199 def edit_relationship(index): |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
200 cvrf = get_current() |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
201 ptree = cvrf._producttree |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
202 try: |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
203 rel = ptree._relationships[index] |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
204 except IndexError: |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
205 abort(404) |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
206 |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
207 if request.method != 'POST': |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
208 return render_template('producttree/edit_relationship.j2', productreference=rel._productreference, relationtype=rel._relationtype, relatestoproductreference=rel._relatestoproductreference, types=rel.TYPES) |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
209 |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
210 rel._productreference = request.form['productreference'] |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
211 rel._relationtype = request.form['relationtype'] |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
212 rel._relatestoproductreference = request.form['relatestoproductreference'] |
45
|
213 return redirect(url_for('.view')) |
0
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
214 |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
215 @producttree.route('/relationship/add', methods=['GET', 'POST']) |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
216 @document_required |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
217 @producttree_required |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
218 def add_relationship(): |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
219 cvrf = get_current() |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
220 ptree = cvrf._producttree |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
221 if len(ptree._products) < 2: |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
222 flash('You need to have at least two products to create a relationship', 'warning') |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
223 return redirect(url_for('.add_product')) |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
224 |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
225 if request.method != 'POST': |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
226 return render_template('producttree/edit_relationship.j2', action='Add', types=CVRFRelationship.TYPES) |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
227 |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
228 prodid1 = request.form['productreference'] |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
229 prodid2 = request.form['relatestoproductreference'] |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
230 |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
231 if prodid1 == prodid2: |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
232 flash('You cannot create a relationship with the same product twice', 'danger') |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
233 return redirect(url_for('.add_relationship')) |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
234 |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
235 rel = CVRFRelationship(prodid1, request.form['relationtype'], prodid2) |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
236 ptree.addRelationship(rel) |
45
|
237 return redirect(url_for('.view')) |
0
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
238 |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
239 @producttree.route('/group/<groupid>/edit', methods=['GET', 'POST']) |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
240 @document_required |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
241 @producttree_required |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
242 def edit_group(groupid): |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
243 try: |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
244 group = get_current().getGroupForID(groupid) |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
245 except KeyError: |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
246 abort(404) |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
247 if request.method != 'POST': |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
248 return render_template('producttree/edit_group.j2', groupid=group._groupid, description=group._description, productids=group._productids) |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
249 |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
250 group._groupid = request.form['groupid'] |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
251 group.setDescription(request.form['description'] or None) |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
252 group._productids = [] |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
253 for productid in request.form.getlist('products'): |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
254 group.addProductID(productid) |
45
|
255 return redirect(url_for('.view')) |
0
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
256 |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
257 @producttree.route('/group/add', methods=['GET', 'POST']) |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
258 @document_required |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
259 @producttree_required |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
260 def add_group(): |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
261 if request.method != 'POST': |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
262 return render_template('producttree/edit_group.j2', action='Add') |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
263 |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
264 group = CVRFGroup(request.form['groupid']) |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
265 group.setDescription(request.form['description'] or None) |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
266 for productid in request.form.getlist('products'): |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
267 group.addProductID(productid) |
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
268 get_current()._producttree.addGroup(group) |
45
|
269 return redirect(url_for('.view')) |