Esempio n. 1
0
def ansible_play():
    data = json.loads(request.get_data())
    path = data["path"]
    remote_user = data["remote_user"]
    remote_pass = data.get("remote_pass")
    remote_port = int(data.get("remote_port", "22"))
    run_hosts = data["hosts"]
    is_sync = data["sync"]
    private_keyfile = data.get("private_keyfile")
    if private_keyfile is None and remote_pass is None:
        return baseapi.failed("must set keyfile or password")
    if private_keyfile is not None:
        keyfile_path = os.path.join(current_config.DATA_PATH, "keyfile",
                                    uuid.uuid4().hex)
        with open(keyfile_path, 'w') as f:
            f.write(private_keyfile)
        os.chmod(keyfile_path, stat.S_IRWXU)
    else:
        keyfile_path = None
    forks = 10 if data.get("forks") is None else data.get("forks")
    response = "ok"
    if is_sync:
        response = baseapi.play(path, remote_user, remote_pass, remote_port,
                                run_hosts, keyfile_path, forks)
    else:
        executor.submit(baseapi.play, path, remote_user, remote_pass,
                        remote_port, run_hosts, keyfile_path, forks)
    if keyfile_path is not None and os.path.exists(keyfile_path):
        os.remove(keyfile_path)
    return baseapi.success(response)
Esempio n. 2
0
def contato():
    current_datetime = datetime.now()
    configuration = Configuration.query.first()
    categories = Category.query.join(
        Post, Post.category_id == Category.id).filter(
            and_(Post.entry_date <= current_datetime,
                 Post.departure_date >= current_datetime,
                 Post.status == 'approved')).order_by(asc(
                     Category.name)).all()
    categories_highlighted = Category.query.filter(
        (Category.is_highlighted == 1)).order_by(asc(Category.name)).all()
    users = User.query.order_by(asc(User.first_name)).all()

    form = ContactForm(request.form)
    if form.validate_on_submit():
        try:
            executor.submit(send_email, form)
            flash('Mensagem enviada com sucesso.', 'success')
            return redirect(url_for('site.contato', _anchor='formulario'))
        except:
            flash(
                'Desculpe, ocorreu um problema ao tentar enviar sua mensagem.',
                'warning')

    return render_template('site/contato.html',
                           form=form,
                           configuration=configuration,
                           categories=categories,
                           categories_highlighted=categories_highlighted,
                           users=users), 200
Esempio n. 3
0
def send_bulk_email_to_class(class_id):
    if current_user.is_authenticated and app.models.is_admin(current_user.username):
        turma = Turma.query.get(class_id)

        # Check if current user is registered as a class manager
        if app.classes.models.check_if_turma_id_belongs_to_a_teacher (turma.id, current_user.id) is False:
            abort (403)

        users = app.classes.models.get_class_enrollment_from_class_id(class_id)
        user_emails = ''
        for enrollment, turma, user in users:
            user_emails += ' ' + user.email

        form = ClassBulkEmailForm()
        if form.validate_on_submit():
            subject = form.subject.data
            body = render_template(
                'email/blank_template.html',
                body = form.body.data,
                subject = subject,
                app_name = current_app.config['APP_NAME']
                )
            executor.submit(app.email_model.send_email(user_emails, subject, body))
            flash ('Sent a bulk email to all students in ' + turma.turma_label)
            return redirect(url_for('classes.class_admin'))
        return render_template('classes/bulk_email_class.html', title='Send a message to the class',
                               turma = turma,
                               users = users,
                               form = form)
    abort (403)
Esempio n. 4
0
def register_admin():
    if current_user.is_authenticated and app.models.is_admin(
            current_user.username):
        form = forms.AdminRegistrationForm()
        if form.validate_on_submit():
            user = User(username=form.username.data,
                        email=form.email.data,
                        is_admin=True,
                        registered=datetime.now())
            db.session.add(user)
            db.session.commit()

            # Send the email confirmation link, with link to set a password
            subject = "WorkUp - your account is almost ready"
            token = app.email_model.ts.dumps(
                str(form.email.data), salt=current_app.config["TS_SALT"])
            recover_url = url_for('user.reset_with_token',
                                  token=token,
                                  _external=True)
            html = render_template('email/set_password.html',
                                   recover_url=recover_url,
                                   username=form.username.data)
            executor.submit(app.email_model.send_email, user.email, subject,
                            html)

            flash(
                'An email has been sent to the new user with further instructions.',
                'success')
            return redirect(url_for('user.login'))
        return render_template('user/register_admin.html',
                               title='Register Admin',
                               form=form)
    else:
        abort(403)
Esempio n. 5
0
def importStart():
    """
    启动导入
    :return:
    """
    uuid = createUID()
    jsonDatas = request.get_json()
    fileName = jsonDatas["fileName"]
    executor.submit(importCSVToDB, fileName, uuid)
    status = {"status": 1, "taskid": uuid}
    return json.dumps(status)
Esempio n. 6
0
 def spawn_future_concurency_thread(self, func, kwargs_data):
     try:
         executor.submit(func, **kwargs_data)
         # executor.submit(func, 1)
         # executor.submit(func, 2)
         # executor.submit(func, 3)
         # executor.submit(func, 4)
         # executor.submit(func, 5)
         return True
     except:
         e = sys.exc_info()[0]
         err_logger.logger().error(e)
         return False
def recuperar():
    if session.get('user_id', None) != None:
        return redirect(url_for('dashboard.dash'))
    configuration = Configuration.query.first()
    form = RequestResetForm()
    if form.validate_on_submit():
        user = User.query.filter_by(email=form.email.data).first()
        executor.submit(send_reset_email, user)
        flash(
            'Um email foi enviado com instruções para a recuperação de sua senha',
            'info')
        return redirect(url_for('login.inicio'))
    return render_template('recover.html',
                           form=form,
                           configuration=configuration), 200
Esempio n. 8
0
def save_comment_file_upload(file, comment_id):
    original_filename = secure_filename(file.filename)
    random_filename = save_file(file)

    executor.submit(get_thumbnail, random_filename)

    # Update DB after file has saved
    new_teacher_peer_review_file = CommentFileUpload(
        original_filename=original_filename,
        filename=random_filename,
        comment_id=comment_id,
        user_id=current_user.id,
        timestamp=datetime.now())
    db.session.add(new_teacher_peer_review_file)
    db.session.commit()
Esempio n. 9
0
def save_assignment_file (file, assignment_id, user_id = False):
	original_filename = secure_filename(file.filename)
	random_filename = save_file (file)
	
	executor.submit(get_thumbnail, random_filename)
	
	# Update SQL after file has saved
	new_upload = Upload(original_filename = original_filename, filename = random_filename, assignment_id = assignment_id, timestamp = datetime.now())
	
	if user_id:
		new_upload.user_id = user_id
	else:
		new_upload.user_id = current_user.id
		
	db.session.add(new_upload)
	db.session.commit()
Esempio n. 10
0
def new_library_upload(file, title, description, target_turmas,
                       email_students):
    """
    Add a new library file to the database
    """
    random_filename = app.files.models.save_file(file)
    original_filename = app.files.models.get_secure_filename(file.filename)
    library_upload = LibraryUpload(original_filename=original_filename,
                                   filename=random_filename,
                                   title=title,
                                   description=description,
                                   user_id=current_user.id)
    db.session.add(library_upload)
    db.session.flush(
    )  # Needed to access the library_upload.id in the next step

    # Add the file for each class
    for turma_id in target_turmas:
        new_class_library_file = ClassLibraryFile(
            library_upload_id=library_upload.id, turma_id=turma_id)
        db.session.add(new_class_library_file)
        db.session.commit()

        # Send async emails if wanted
        if email_students:
            users = app.classes.models.get_class_enrollment_from_class_id(
                turma_id)
            url = url_for('files.class_library', _external=True)
            usernames_and_emails = []
            title = title
            for enrollment, turma, user in users:
                usernames_and_emails.append({
                    'username': user.username,
                    'email': user.email
                })
            app_name = current_app.config['APP_NAME']
            thr = Thread(target=send_async_assignment_notification_to_class,
                         args=[
                             current_app._get_current_object(),
                             usernames_and_emails, turma_id, title, url,
                             app_name
                         ])
            thr.start()

    # Generate thumbnail
    executor.submit(get_thumbnail, library_upload.filename)
Esempio n. 11
0
def new_library_upload_from_form (form):
	file = form.library_upload_file.data
	random_filename = app.files.models.save_file(file)
	original_filename = app.files.models.get_secure_filename(file.filename)
	library_upload = LibraryUpload (original_filename=original_filename,
											   filename = random_filename,
											   title = form.title.data,
											   description = form.description.data,
											   user_id = current_user.id)
	db.session.add(library_upload)
	db.session.flush() # Needed to access the library_upload.id in the next step
	
	for turma_id in form.target_turmas.data:
		new_class_library_file = ClassLibraryFile(library_upload_id = library_upload.id, turma_id = turma_id)
		db.session.add(new_class_library_file)
		db.session.commit()
		
	# Generate thumbnail
	executor.submit(get_thumbnail, library_upload.filename)
Esempio n. 12
0
def new_absence_justification_from_form(form, lesson_id):
    file = form.absence_justification_file.data
    random_filename = app.files.models.save_file(file)
    original_filename = app.files.models.get_secure_filename(file.filename)

    new_absence_justification = AbsenceJustificationUpload(
        user_id=current_user.id,
        original_filename=original_filename,
        filename=random_filename,
        justification=form.justification.data,
        lesson_id=lesson_id,
        timestamp=datetime.now())

    db.session.add(new_absence_justification)
    db.session.commit()

    # Generate thumbnail
    executor.submit(app.files.models.get_thumbnail,
                    new_absence_justification.filename)
Esempio n. 13
0
def send_new_confirmation_email(user_id):
    if current_user.is_authenticated and app.models.is_admin(
            current_user.username):
        user = User.query.filter_by(id=user_id).first_or_404()
        subject = "WorkUp - please confirm your email address"
        token = app.email_model.ts.dumps(str(user.email),
                                         salt=current_app.config["TS_SALT"])
        confirm_url = url_for('user.confirm_email',
                              token=token,
                              _external=True)

        html = render_template('email/activate.html',
                               confirm_url=confirm_url,
                               username=user.username)
        executor.submit(app.email_model.send_email, user.email, subject, html)
        flash(
            'A new confirmation email has been sent to ' + user.username +
            ' with further instructions.', 'success')
        return redirect(url_for('user.manage_students'))
    abort(403)
Esempio n. 14
0
def service_scan():
    subnet = request.args.get("subnet")
    rest = bool(request.args.get('rest'))
    scan_range = ScanRange.get_scanrange(subnet)
    exporters = list()
    for exporter in scan_range.exporters:
        exporters.append(Exporter.get_exporter(exporter))
    ip_network = IPNetwork(subnet)
    for exporter in exporters:
        additional_meta = {
            'subnet': subnet,
            'subnet_name': scan_range.name,
            'exporter': exporter.name
        }
        func = partial(process_service, exporter, additional_meta)
        executor.submit(func)
        executor.map(func, ip_network)
        flash('Scan completed: {}'.format(subnet), 'message')
    if rest:
        return '', 200
    return redirect(url_for('subnets.subnets'))
Esempio n. 15
0
def reset():
    form = app.user.forms.EmailForm()
    if form.validate_on_submit():
        user = User.query.filter_by(email=form.email.data).first_or_404()
        subject = "Password reset requested"
        token = app.email_model.ts.dumps(
            user.email, salt=current_app.config["TS_RECOVER_SALT"])

        recover_url = url_for('user.reset_with_token',
                              token=token,
                              _external=True)
        html = render_template('email/recover.html',
                               recover_url=recover_url,
                               username=user.username)

        executor.submit(app.email_model.send_email, user.email, subject, html)
        flash(
            'An email has been sent to your inbox with a link to recover your password.',
            'info')
        return redirect(url_for('main.index'))

    return render_template('user/reset.html', form=form)
Esempio n. 16
0
def sendFeedback():
    data = request.json
    try:
        subject = data['subject']
        message = data['message']
        returnEmail = data['returnEmail']
    except:
        return jsonify({'message': 'Expected subject, message and returnEmail'}), 400

    user = decode_auth_token(request.headers['Authorization'][7:])

    infoUser = '******'
    infoUser = infoUser + '\n Id: ' + user['sub']
    infoUser = infoUser + '\n Nome: ' + user['name']
    infoUser = infoUser + '\n Email: ' + returnEmail

    message = message + infoUser

    messageInfo = {
        'subject': subject,
        'message': message,
        'password': app.config['EMAIL_PASS'],
        'from': app.config['EMAIL_FROM'],
        'to': app.config['EMAIL_TO']
    }

    serverInfo = {
        'host': app.config['EMAIL_HOST'],
        'port': app.config['EMAIL_PORT']
    }

    try:
        #executa em background
        executor.submit(send_email.send, messageInfo, serverInfo)
        return jsonify({'message': 'Feedback encaminhado com sucesso!'}), 201
    except:
        return { 'message': 'Erro ao enviar Feedback' }, 400
Esempio n. 17
0
def suiteRun():
    logger.debug('收到suiteRun指令,进入suiteRun函数')
    print('进入执行分支')
    global flag, owner
    flag = 1
    jsonstr = request.json
    g.sequence = jsonstr.get("sequence")
    g.taskList = jsonstr.get("taskList")
    g.key = jsonstr.get("key")
    print('准备传递的key:', g.key)

    #开始执行测试,向redis发送running状态
    try:
        payload = {
            'type': 'security',
            'subType': 'nmap',
            'status': 'running',
            'owner': owner
        }
        sendStatusToRedis(payload)
        print("开始执行测试")
        executor = ThreadPoolExecutor()
        task = executor.submit(do_update, g.key, g.sequence, g.taskList)

        #向redis发送实时状态,测试执行完,实时状态变为idle
        owner = ''
        payload = {
            'type': 'security',
            'subType': 'nmap',
            'status': 'idle',
            'owner': owner
        }
        sendStatusToRedis(payload)
        print(task.result())
        return task.result()
    except Exception:
        print("执行测试过程出现异常!")
        logger.critical("执行测试过程出现异常,程序即将退出")
        exit(0)
Esempio n. 18
0
def render_post_register_by_type(post_type, title):
    configuration = Configuration.query.first()
    form = PostForm(request.form)
    titulo = title

    if post_type == 'ad':
        if session.get('user_role', '') == 'user':
            form.status.validators = []

    form.category_id.choices = [('', 'Selecione')]
    try:
        categories = Category.query.all()
        for category in categories:
            form.category_id.choices.append((str(category.id), category.name))
    except:
        pass

    if form.validate_on_submit():
        try:
            form.user_id = session.get('user_id', '')

            # cria o post com os dados do formulário
            post = Post(
                form.title.data,
                form.description.data,
                form.content.data,
                post_type,
                '',
                form.entry_date.data,
                form.departure_date.data,
                None,
                form.user_id,
                None
            )

            if post_type == 'ad':
                if session.get('user_role', '') == 'user':
                    post.status = 'pending'
                else:
                    post.status = form.status.data
            else:
                post.status = form.status.data

            if form.image_id.data != '':
                post.image_id = form.image_id.data

            #adiciona a tag no banco
            tags = form.tag.data
            array_tags = tags.split(',')
            for t in array_tags:
                if t.strip() == '':
                    continue
                tag = Tag.query.filter((Tag.name==t)).first()
                if tag:
                    post.tags.append(tag)
        
                else:
                    tag = Tag(t)
                    post.tags.append(tag)

            if form.category_id.data != '':
                post.category_id = form.category_id.data

            db.session.add(post)
            db.session.commit()

            if post_type == 'news':
                executor.submit(send_post_email, 'Novo cadastro de notícia', 'O usuário ' + session.get('user_name', '') + ' cadastrou uma nova notícia.')
                app.logger.warning(' %s cadastrou a notícia %s', session.get('user_name', ''), post.title)
                flash('Notícia cadastrada com sucesso', 'success')
                return redirect(url_for('posts.noticias_index'))
            elif post_type == 'notice':
                executor.submit(send_post_email, 'Novo cadastro de aviso', 'O usuário ' + session.get('user_name', '') + ' cadastrou um novo aviso.')
                app.logger.warning(' %s cadastrou o aviso %s', session.get('user_name', ''), post.title)
                flash('Aviso cadastrado com sucesso', 'success')
                return redirect(url_for('posts.avisos_index'))
            elif post_type == 'ad':
                executor.submit(send_post_email, 'Novo cadastro de anúncio', 'O usuário ' + session.get('user_name', '') + ' cadastrou um novo anúncio.')
                app.logger.warning(' %s cadastrou o anúncio %s', session.get('user_name', ''), post.title)
                flash('Anúncio cadastrado com sucesso', 'success')
                return redirect(url_for('posts.anuncios_index'))
        except:
            # remove qualquer vestígio do usuário da sessin e flash message 
            db.session.rollback()
            if post_type == 'news':
                flash('Erro ao tentar cadastrar a notícia', 'danger')
            elif post_type == 'notice':
                flash('Erro ao tentar cadastrar o aviso', 'danger')
            elif post_type == 'ad':
                flash('Erro ao tentar cadastrar o anúncio', 'danger')

    return render_template('/posts/formulario.html', titulo=titulo, form=form, configuration=configuration), 200
Esempio n. 19
0
def register():
    if current_user.is_authenticated and app.models.is_admin(
            current_user.username) is not True:
        return redirect(url_for('main.index'))
    if current_app.config[
            'REGISTRATION_IS_OPEN'] == True or current_user.is_authenticated and app.models.is_admin(
                current_user.username):
        form = app.user.forms.RegistrationForm()

        if current_user.is_authenticated and app.models.is_admin(
                current_user.username):
            del form.password
            del form.signUpCode

        form.target_turmas.choices = [(turma.id, turma.turma_label)
                                      for turma in Turma.query.all()]
        if form.validate_on_submit():
            if form.signUpCode and form.signUpCode.data in current_app.config[
                    'SIGNUP_CODES'] or current_user.is_authenticated and app.models.is_admin(
                        current_user.username):
                user = User(username=form.username.data,
                            email=form.email.data,
                            student_number=form.student_number.data,
                            registered=datetime.now())
                if current_user.is_authenticated is not True:
                    user.set_password(form.password.data)

                db.session.add(user)
                db.session.flush(
                )  # Access the new user.id field in the next step
                for turma_id in form.target_turmas.data:
                    app.assignments.models.enroll_user_in_class(
                        user.id, turma_id)
                db.session.commit()

                subject = "WorkUp - your account is almost ready"
                token = app.email_model.ts.dumps(
                    str(form.email.data), salt=current_app.config["TS_SALT"])
                if current_user.is_authenticated and app.models.is_admin(
                        current_user.username):
                    # Send the email confirmation link, with link to set a password
                    recover_url = url_for('user.reset_with_token',
                                          token=token,
                                          _external=True)
                    html = render_template('email/set_password.html',
                                           recover_url=recover_url,
                                           username=form.username.data)
                    flash(
                        'An email has been sent to the new user with further instructions.',
                        'success')
                else:
                    # Send the email confirmation link
                    confirm_url = url_for('user.confirm_email',
                                          token=token,
                                          _external=True)
                    html = render_template('email/activate.html',
                                           confirm_url=confirm_url,
                                           username=form.username.data)
                    flash(
                        'An email has been sent to you with further instructions.',
                        'success')
                executor.submit(app.email_model.send_email, user.email,
                                subject, html)
                return redirect(url_for('user.login'))
            else:
                flash('Please ask your tutor for sign-up instructions.',
                      'warning')
                return redirect(url_for('user.login'))
        return render_template('user/register.html',
                               title='Register',
                               form=form)
    else:
        flash('Sign up is currently closed.', 'warning')
        return redirect(url_for('main.index'))