Browse Source

Fix #807 parse the userinfo with the golang tools

Note, this is now only fixed with Go version >= 1.4.2, see this bug in Go: https://github.com/golang/go/commit/07d86b1f2db73c6a0716aec4d4cd62dfacb04a21
Peter Smit 10 years ago
parent
commit
d016eaaa09
1 changed files with 14 additions and 4 deletions
  1. 14 4
      routers/repo/repo.go

+ 14 - 4
routers/repo/repo.go

@@ -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)