Exemple #1
0
from celery.exceptions import TaskRevokedError
from celery.execute import send_task
from celery.signals import celeryd_after_setup
from celery.task.control import revoke
from celery.utils.log import get_task_logger
from pymongo import MongoClient
import requests
from twisted.internet import reactor
from twisted.internet.error import ProcessDone, ProcessTerminated, ProcessExitedAlready
from twisted.internet.protocol import ProcessProtocol

from minion.backend import ownership
from minion.backend.utils import backend_config, scan_config, scannable


cfg = backend_config()
celery = Celery('tasks', broker=cfg['celery']['broker'], backend=cfg['celery']['backend'])

# If the config does not mention mongo then we do not set it up. That is ok because
# that will only happen in plugin-workers that do not need direct mongodb access.
if cfg.get('mongodb') is not None:
    mongodb = MongoClient(host=cfg['mongodb']['host'], port=cfg['mongodb']['port'])
    db = mongodb.minion
    plans = db.plans
    scans = db.scans

logger = get_task_logger(__name__)


def find_session(scan, session_id):
    for session in scan['sessions']:
Exemple #2
0
#!/usr/bin/env python

import calendar
import functools
import importlib
import json
import operator

from flask import abort, Flask, jsonify, request, session
from pymongo import MongoClient

import minion.backend.utils as backend_utils
import minion.backend.tasks as tasks

backend_config = backend_utils.backend_config()

mongo_client = MongoClient(host=backend_config['mongodb']['host'], port=backend_config['mongodb']['port'])
invites = mongo_client.minion.invites
groups = mongo_client.minion.groups
plans = mongo_client.minion.plans
scans = mongo_client.minion.scans
sites = mongo_client.minion.sites
users = mongo_client.minion.users

def api_guard(*decor_args):
    """ Decorate a view function to be protected by requiring
    a secret key in X-Minion-Backend-Key header for the decorated
    backend API. If 'key' is False or not found in the config file,
    the decorator will assume no protection is needed and will grant
    access to all incoming request.
Exemple #3
0
from celery.app.control import Control
from celery.exceptions import TaskRevokedError
from celery.execute import send_task
from celery.signals import celeryd_after_setup
from celery.task.control import revoke
from celery.utils.log import get_task_logger
from pymongo import MongoClient
import requests
from twisted.internet import reactor
from twisted.internet.error import ProcessDone, ProcessTerminated, ProcessExitedAlready
from twisted.internet.protocol import ProcessProtocol

from minion.backend import ownership
from minion.backend.utils import backend_config, scan_config, scannable

cfg = backend_config()
celery = Celery('tasks',
                broker=cfg['celery']['broker'],
                backend=cfg['celery']['backend'])

# If the config does not mention mongo then we do not set it up. That is ok because
# that will only happen in plugin-workers that do not need direct mongodb access.
if cfg.get('mongodb') is not None:
    mongodb = MongoClient(host=cfg['mongodb']['host'],
                          port=cfg['mongodb']['port'])
    db = mongodb.minion
    plans = db.plans
    scans = db.scans

logger = get_task_logger(__name__)
Exemple #4
0
from flask import Flask
from pymongo import MongoClient

import minion.backend.utils as backend_utils

test_app = Flask(__name__)
@test_app.route('/')
def basic_app():
    res = make_response('')
    res.headers['X-Content-Type-Options'] = 'nosniff'
    res.headers['X-Frame-Options'] = 'SAMEORIGIN'
    res.headers['X-XSS-Protection'] = '1; mode=block'
    res.headers['Content-Security-Policy'] = 'default-src *'
    return res

BACKEND_KEY = backend_utils.backend_config()['api'].get('key')
BASE = 'http://localhost:8383'
APIS = {'users':
            {'POST': '/users',
             'GET': '/users'},
        'user':
            {'DELETE': '/users/{user_email}',
             'GET': '/users/{user_email}',
             'POST': '/users/{user_email}'},
        'login':
            {'PUT': '/login'},
        'invites':
            {'POST': '/invites',
             'GET': '/invites'},
        'invite': 
            {'POST': '/invites/{id}/control',
import functools
import importlib
import inspect
import json
import pkgutil
import operator

from flask import abort, Flask, jsonify, request, session
from pymongo import MongoClient

from minion.backend.app import app
import minion.backend.utils as backend_utils
import minion.backend.tasks as tasks
from minion.plugins.base import AbstractPlugin

backend_config = backend_utils.backend_config()

mongo_client = MongoClient(host=backend_config['mongodb']['host'], port=backend_config['mongodb']['port'])
invites = mongo_client.minion.invites
groups = mongo_client.minion.groups
plans = mongo_client.minion.plans
scans = mongo_client.minion.scans
sites = mongo_client.minion.sites
users = mongo_client.minion.users
scanschedules = mongo_client.minion.scanschedule
siteCredentials = mongo_client.minion.siteCredentials

def api_guard(*decor_args):
    """ Decorate a view function to be protected by requiring
    a secret key in X-Minion-Backend-Key header for the decorated
    backend API. If 'key' is False or not found in the config file,
Exemple #6
0
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

import os
import json
import requests
import unittest

from pymongo import MongoClient

import minion.backend.utils as backend_utils

BACKEND_KEY = backend_utils.backend_config()['api'].get('key')

class Resource(object):
    """ Base class for each backend endpoint.

    To subclass, the constructor must call super on
    this parent class. Access self.session to get
    a requests object.

    """

    domain = "http://localhost:8383"
    json_header = {"content-type": "application/json"}
    backend_header = {"x-minion-backend-key": BACKEND_KEY}

    def __init__(self):
        self.session = self._create_session()