]> source.dussan.org Git - gitea.git/commitdiff
Fix #807 parse the userinfo with the golang tools
authorPeter Smit <peter@smitmail.eu>
Fri, 2 Jan 2015 10:14:11 +0000 (12:14 +0200)
committerPeter Smit <peter@smitmail.eu>
Fri, 2 Jan 2015 10:14:11 +0000 (12:14 +0200)
Note, this is now only fixed with Go version >= 1.4.2, see this bug in Go: https://github.com/golang/go/commit/07d86b1f2db73c6a0716aec4d4cd62dfacb04a21

routers/repo/repo.go

index 70b0c05ece8a5f59b6bc3cd8b037693fe646a9e3..48f7b09bc0f9e971f7599a31a3d46ded6346082e 100644 (file)
@@ -6,6 +6,7 @@ package repo
 
 import (
        "fmt"
+       "net/url"
        "os"
        "path"
        "strings"
@@ -180,11 +181,20 @@ func MigratePost(ctx *middleware.Context, form auth.MigrateRepoForm) {
                }
        }
 
-       authStr := strings.Replace(fmt.Sprintf("://%s:%s",
-               form.AuthUserName, form.AuthPasswd), "@", "%40", -1)
-       url := strings.Replace(form.HttpsUrl, "://", authStr+"@", 1)
+       u, err := url.Parse(form.HttpsUrl)
+
+       if err != nil || u.Scheme != "https" {
+               ctx.Data["Err_HttpsUrl"] = true
+               ctx.RenderWithErr(ctx.Tr("form.url_error"), MIGRATE, &form)
+               return
+       }
+
+       if len(form.AuthUserName) > 0 || len(form.AuthPasswd) > 0 {
+               u.User = url.UserPassword(form.AuthUserName, form.AuthPasswd)
+       }
+
        repo, err := models.MigrateRepository(ctxUser, form.RepoName, form.Description, form.Private,
-               form.Mirror, url)
+               form.Mirror, u.String())
        if err == nil {
                log.Trace("Repository migrated: %s/%s", ctxUser.Name, form.RepoName)
                ctx.Redirect(setting.AppSubUrl + "/" + ctxUser.Name + "/" + form.RepoName)