def edit_mirror(mirror_id: int): mirror_detail = PushMirror.query.filter_by( id=mirror_id, user=current_user).first_or_404() form = EditForm(flask.request.form, id=mirror_detail.id, project_mirror=mirror_detail.project_mirror, note=mirror_detail.note, is_force_update=mirror_detail.is_force_update, is_prune_mirrors=mirror_detail.is_prune_mirrors, project=mirror_detail.project.gitlab_id) if flask.request.method == 'POST' and form.validate(): project_mirror_str = form.project_mirror.data.strip() project_mirror = GitRemote(project_mirror_str) target = GitRemote(project_mirror_str) if target.vcs_protocol == ProtocolEnum.SSH: # If protocol is SSH we need to convert URL to use USER RSA pair target = GitRemote( convert_url_for_user(project_mirror_str, current_user)) # PullMirror mirror_detail.project_mirror = project_mirror_str mirror_detail.project = process_project(form.project.data) # Mirror mirror_detail.is_force_update = form.is_force_update.data mirror_detail.is_prune_mirrors = form.is_prune_mirrors.data mirror_detail.is_deleted = False mirror_detail.user = current_user mirror_detail.foreign_vcs_type = target.vcs_type mirror_detail.note = form.note.data mirror_detail.target = target mirror_detail.source = None # We are getting source wia gitlab API db.session.add(mirror_detail) db.session.commit() if target.vcs_protocol == ProtocolEnum.SSH: # If source is SSH, create SSH Config for it also task_result = chain( create_ssh_config.si(current_user.id, target.hostname, project_mirror.hostname), save_push_mirror.si(mirror_detail.id)).apply_async() parent = log_task_pending(task_result.parent, mirror_detail, create_ssh_config, InvokedByEnum.MANUAL) log_task_pending(task_result, mirror_detail, save_push_mirror, InvokedByEnum.MANUAL, parent) else: task = save_push_mirror.delay(mirror_detail.id) log_task_pending(task, mirror_detail, save_push_mirror, InvokedByEnum.MANUAL) flask.flash('Push mirror was saved successfully.', 'success') return flask.redirect(flask.url_for('push_mirror.index.get_mirror')) return flask.render_template('push_mirror.index.edit.html', form=form, mirror_detail=mirror_detail)
def new_mirror(): form = NewForm(flask.request.form, is_force_update=False, is_prune_mirrors=False) if flask.request.method == 'POST' and form.validate(): project_mirror_str = form.project_mirror.data.strip() project_mirror = GitRemote(project_mirror_str) target = GitRemote(project_mirror_str) if target.vcs_protocol == ProtocolEnum.SSH: # If protocol is SSH we need to convert URL to use USER RSA pair target = GitRemote( convert_url_for_user(project_mirror_str, current_user)) mirror_new = PushMirror() # PushMirror mirror_new.project_mirror = project_mirror_str mirror_new.project = process_project(form.project.data) # Mirror mirror_new.is_force_update = form.is_force_update.data mirror_new.is_prune_mirrors = form.is_prune_mirrors.data mirror_new.is_deleted = False mirror_new.user = current_user mirror_new.foreign_vcs_type = target.vcs_type mirror_new.note = form.note.data mirror_new.target = target.url mirror_new.source = None # We are getting source wia gitlab API mirror_new.last_sync = None mirror_new.hook_token = random_password() db.session.add(mirror_new) db.session.commit() if target.vcs_protocol == ProtocolEnum.SSH: # If target is SSH, create SSH Config for it also task_result = chain( create_ssh_config.si(current_user.id, target.hostname, project_mirror.hostname), save_push_mirror.si(mirror_new.id)).apply_async() parent = log_task_pending(task_result.parent, mirror_new, create_ssh_config, InvokedByEnum.MANUAL) log_task_pending(task_result, mirror_new, save_push_mirror, InvokedByEnum.MANUAL, parent) else: task = save_push_mirror.delay(mirror_new.id) log_task_pending(task, mirror_new, save_push_mirror, InvokedByEnum.MANUAL) flask.flash('New push mirror item was added successfully.', 'success') return flask.redirect(flask.url_for('push_mirror.index.get_mirror')) return flask.render_template('push_mirror.index.new.html', form=form)