Files
gitea/templates/repo/migrate/git.tmpl
T
Lunny Xiaoandwxiaoguang f10f7e7f91 fix(migrations): only allow local paths for plain git migration (#40006)
Only the plain git migration can clone from a local server path. Other
services (Gitea, GitLab, Gogs, OneDev, GitBucket, Codebase, CodeCommit,
Bitbucket Server) are accessed through their remote API, so a local path
never works, yet their migrate forms advertised "or a local server
path".

- Remove the local path hint from those templates.
- Add `IsMigrateURLAllowedForService` and use it in the web and API
migrate handlers and in `MigrateRepository`, rejecting local paths for
any service other than plain git.
- Add a unit test.

Raised in review of #39913.

_Authored with Codet (AI assistant) on behalf of @lunny._

---------

Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
2026-10-25 21:21:19 +00:00

32 lines
1.1 KiB
Handlebars

{{template "base/head" .}}
<div role="main" aria-label="{{.Title}}" class="page-content repository new migrate">
<div class="ui container medium-width">
<h3 class="ui top attached header">
{{ctx.Locale.Tr "repo.migrate.migrate" .service.Title}}
</h3>
<div class="ui attached segment">
{{template "base/alert" .}}
<form class="ui form left-right-form form-fetch-action" action="{{.Link}}" method="post">
{{template "repo/migrate/common-init" (dict "ServiceType" .service)}}
{{template "repo/migrate/common-clone-addr" (dict "AllowImportLocal" ctx.RootData.SignedUser.CanImportLocal)}}
<div class="inline field">
<label>{{ctx.Locale.Tr "username"}}</label>
<input name="auth_username">
</div>
<div class="inline field">
<label>{{ctx.Locale.Tr "password"}}</label>
<input name="auth_password" type="password">
</div>
{{template "repo/migrate/common-options" .}}
<div class="divider"></div>
{{template "repo/migrate/common-migrated-repo"}}
</form>
</div>
</div>
</div>
{{template "base/footer" .}}