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)
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
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)
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)
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)
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
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()
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()
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)
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)
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)
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)
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'))
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)
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
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)
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
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'))