def update_site(site_id): new_site = request.json # Verify incoming site. It must exist, groups must exist, plans must exist. site = Site.get_site(site_id) if not site: return jsonify(success=False, reason='no-such-site') for group in new_site.get('groups', []): if not Group.get_group(group): return jsonify(success=False, reason='unknown-group') for plan_name in new_site.get('plans', []): if not Plan.get_plan(plan_name): return jsonify(success=False, reason='unknown-plan') if 'groups' in new_site: # purge groups for group in site.groups: site.groups.remove(group) # insert desired groups for group_name in new_site.get('groups', []): site.groups.append(Group.get_group(group_name)) if 'plans' in new_site: #purge plans for plan in site.plans: site.plans.remove(plan) #add new plans for plan_name in new_site['plans']: site.plans.append(Plan.get_plan(plan_name)) db.session.commit() # Return the updated site site = Site.get_site(site_id) if not site: return jsonify(success=False, reason='no-such-site') return jsonify(success=True, site=site.dict())
def get_scans(): limit = request.args.get('limit', 3) if limit: limit = int(limit) site_id = request.args.get('site_id') site = Site.get_site(site_id) if not site: return jsonify(success=False, reason='no-such-site') scanlist = list(site.scans) scanlist.sort(key=lambda x : x.created, reverse = True) scanlist = scanlist[:limit] results = map(lambda x : summarize_scan(x), scanlist) return jsonify(success=True, scans=results)
def create_site(): site = request.json # Verify incoming site: url must be valid, groups must exist, plans must exist if not _check_site_url(site.get('url')): return jsonify(success=False, reason='invalid-url') if not site.get('url', None): return jsonify(success=False, reason='missing-required-field') for group in site.get('groups', []): if not Group.get_group(group): return jsonify(success=False, reason='unknown-group') for plan_name in site.get('plans', []): if not Plan.get_plan(plan_name): return jsonify(success=False, reason='unknown-plan') if Site.get_site_by_url(site['url']) is not None: return jsonify(success=False, reason='site-already-exists') # Create the site new_site = Site(site['url']) for plan in site.get('plans', []): new_site.plans.append(Plan.get_plan(plan)) new_site.created = datetime.datetime.utcnow() for group in site.get('groups', []): new_site.groups.append(Group.get_group(group)) if site.get('verification',{}).get('enabled',False): new_site.verification_enabled = True new_site.verification_value = str(uuid.uuid4()) else: new_site.verification_enabled = False new_site.verification_value = None db.session.add(new_site) db.session.commit() new_site = Site.get_site(new_site.site_uuid) # Return the new site return jsonify(success=True, site=new_site.dict())
def get_site(site_id): site = Site.get_site(site_id) if not site: return jsonify(success=False, reason='no-such-site') return jsonify(success=True, site=site.dict())
def _find_groups_for_site(site): return Site.get_site(site).groups