From c72e1b5c2ac8d2cbd123f3f53db7b4a125045725 Mon Sep 17 00:00:00 2001 From: FuXiaoHei Date: Wed, 9 Apr 2014 21:28:00 +0800 Subject: repo-import page ui --- web.go | 1 + 1 file changed, 1 insertion(+) (limited to 'web.go') diff --git a/web.go b/web.go index b8fa9eb7..7ebdb6b6 100644 --- a/web.go +++ b/web.go @@ -116,6 +116,7 @@ func runWeb(*cli.Context) { m.Get("/user/:username", ignSignIn, user.Profile) m.Any("/repo/create", reqSignIn, binding.BindIgnErr(auth.CreateRepoForm{}), repo.Create) + m.Any("/repo/import", reqSignIn, binding.BindIgnErr(auth.CreateRepoForm{}), repo.Import) adminReq := middleware.Toggle(&middleware.ToggleOptions{SignInRequire: true, AdminRequire: true}) -- cgit v1.2.3 From 8683d2f8570fedad694d0610074296a1452d3942 Mon Sep 17 00:00:00 2001 From: skyblue Date: Thu, 10 Apr 2014 00:07:57 +0800 Subject: remove martini oauth2 depend --- .fswatch.json | 3 +-- models/oauth2.go | 4 +-- routers/user/social.go | 72 +++++++++++++++++++++++++++++++++++++++----------- web.go | 2 +- 4 files changed, 60 insertions(+), 21 deletions(-) (limited to 'web.go') diff --git a/.fswatch.json b/.fswatch.json index 4ef36ce4..7b12022c 100644 --- a/.fswatch.json +++ b/.fswatch.json @@ -8,6 +8,5 @@ ], "env": { "POWERED_BY": "github.com/shxsun/fswatch" - }, - "enable-restart": false + } } diff --git a/models/oauth2.go b/models/oauth2.go index 4da98006..9a38334e 100644 --- a/models/oauth2.go +++ b/models/oauth2.go @@ -15,8 +15,8 @@ var ( ) type Oauth2 struct { - Id int64 - Uid int64 `xorm:"pk"` // userId + Id int64 `xorm:"default 1"` + Uid int64 `xorm:"pk"` // UserId User *User `xorm:"-"` Type int `xorm:"pk unique(oauth)"` // twitter,github,google... Identity string `xorm:"pk unique(oauth)"` // id.. diff --git a/routers/user/social.go b/routers/user/social.go index a35da549..b87c313f 100644 --- a/routers/user/social.go +++ b/routers/user/social.go @@ -6,11 +6,15 @@ package user import ( "encoding/json" + "net/http" + "net/url" "strconv" + "strings" "code.google.com/p/goauth2/oauth" "github.com/gogits/gogs/models" + "github.com/gogits/gogs/modules/base" "github.com/gogits/gogs/modules/log" "github.com/gogits/gogs/modules/middleware" "github.com/gogits/gogs/modules/oauth2" @@ -69,23 +73,59 @@ func (s *SocialGithub) Update() error { return json.NewDecoder(r.Body).Decode(&s.data) } +func extractPath(next string) string { + n, err := url.Parse(next) + if err != nil { + return "/" + } + return n.Path +} + // github && google && ... func SocialSignIn(ctx *middleware.Context, tokens oauth2.Tokens) { - gh := &SocialGithub{ - WebToken: &oauth.Token{ - AccessToken: tokens.Access(), - RefreshToken: tokens.Refresh(), - Expiry: tokens.ExpiryTime(), - Extra: tokens.ExtraData(), - }, + var socid int64 + var ok bool + next := extractPath(ctx.Query("next")) + log.Debug("social signed check %s", next) + if socid, ok = ctx.Session.Get("socialId").(int64); ok && socid != 0 { + // already login + ctx.Redirect(next) + log.Info("login soc id: %v", socid) + return + } + config := &oauth.Config{ + //ClientId: base.OauthService.Github.ClientId, + //ClientSecret: base.OauthService.Github.ClientSecret, // FIXME: I don't know why compile error here + ClientId: "09383403ff2dc16daaa1", + ClientSecret: "0e4aa0c3630df396cdcea01a9d45cacf79925fea", + RedirectURL: strings.TrimSuffix(base.AppUrl, "/") + ctx.Req.URL.RequestURI(), + Scope: base.OauthService.GitHub.Scopes, + AuthURL: "https://github.com/login/oauth/authorize", + TokenURL: "https://github.com/login/oauth/access_token", } - if len(tokens.Access()) == 0 { - log.Error("empty access") + transport := &oauth.Transport{ + Config: config, + Transport: http.DefaultTransport, + } + code := ctx.Query("code") + if code == "" { + // redirect to social login page + ctx.Redirect(config.AuthCodeURL(next)) return } - var err error + + // handle call back + tk, err := transport.Exchange(code) + if err != nil { + log.Error("oauth2 handle callback error: %v", err) + return // FIXME, need error page 501 + } + next = extractPath(ctx.Query("state")) + log.Debug("success token: %v", tk) + + gh := &SocialGithub{WebToken: tk} if err = gh.Update(); err != nil { - // FIXME: handle error page + // FIXME: handle error page 501 log.Error("connect with github error: %s", err) return } @@ -102,18 +142,18 @@ func SocialSignIn(ctx *middleware.Context, tokens oauth2.Tokens) { oa.Type = soc.Type() oa.Token = soc.Token() oa.Identity = soc.Identity() - log.Info("oa: %v", oa) + log.Debug("oa: %v", oa) if err = models.AddOauth2(oa); err != nil { - log.Error("add oauth2 %v", err) + log.Error("add oauth2 %v", err) // 501 return } case models.ErrOauth2NotAssociatedWithUser: - // pass + // ignore it. judge in /usr/login page default: log.Error(err.Error()) // FIXME: handle error page return } ctx.Session.Set("socialId", oa.Id) - log.Info("socialId: %v", oa.Id) - ctx.Redirect("/") + log.Debug("socialId: %v", oa.Id) + ctx.Redirect(next) } diff --git a/web.go b/web.go index 7ebdb6b6..5dae84b6 100644 --- a/web.go +++ b/web.go @@ -91,7 +91,7 @@ func runWeb(*cli.Context) { m.Group("/user", func(r martini.Router) { r.Any("/login", binding.BindIgnErr(auth.LogInForm{}), user.SignIn) - r.Any("/login/github", oauth2.LoginRequired, user.SocialSignIn) + r.Any("/login/github", user.SocialSignIn) r.Any("/sign_up", binding.BindIgnErr(auth.RegisterForm{}), user.SignUp) r.Any("/forget_password", user.ForgotPasswd) r.Any("/reset_password", user.ResetPasswd) -- cgit v1.2.3 From 9f7bd5007b256d25c387499606720dca461a181c Mon Sep 17 00:00:00 2001 From: Unknown Date: Wed, 9 Apr 2014 14:20:02 -0400 Subject: Work on mirror repo --- routers/repo/repo.go | 18 +++---- templates/repo/import.tmpl | 112 ------------------------------------------ templates/repo/mirror.tmpl | 81 ++++++++++++++++++++++++++++++ templates/user/dashboard.tmpl | 2 +- web.go | 2 +- 5 files changed, 91 insertions(+), 124 deletions(-) delete mode 100644 templates/repo/import.tmpl create mode 100644 templates/repo/mirror.tmpl (limited to 'web.go') diff --git a/routers/repo/repo.go b/routers/repo/repo.go index 0ab1c9e4..32c198f2 100644 --- a/routers/repo/repo.go +++ b/routers/repo/repo.go @@ -55,36 +55,34 @@ func Create(ctx *middleware.Context, form auth.CreateRepoForm) { ctx.Handle(200, "repo.Create", err) } -func Import(ctx *middleware.Context, form auth.CreateRepoForm) { - ctx.Data["Title"] = "Import repository" +func Mirror(ctx *middleware.Context, form auth.CreateRepoForm) { + ctx.Data["Title"] = "Mirror repository" ctx.Data["PageIsNewRepo"] = true // For navbar arrow. - ctx.Data["LanguageIgns"] = models.LanguageIgns - ctx.Data["Licenses"] = models.Licenses if ctx.Req.Method == "GET" { - ctx.HTML(200, "repo/import") + ctx.HTML(200, "repo/mirror") return } if ctx.HasError() { - ctx.HTML(200, "repo/import") + ctx.HTML(200, "repo/mirror") return } _, err := models.CreateRepository(ctx.User, form.RepoName, form.Description, - form.Language, form.License, form.Visibility == "private", form.InitReadme == "on") + "", form.License, form.Visibility == "private", false) if err == nil { log.Trace("%s Repository created: %s/%s", ctx.Req.RequestURI, ctx.User.LowerName, form.RepoName) ctx.Redirect("/" + ctx.User.Name + "/" + form.RepoName) return } else if err == models.ErrRepoAlreadyExist { - ctx.RenderWithErr("Repository name has already been used", "repo/import", &form) + ctx.RenderWithErr("Repository name has already been used", "repo/mirror", &form) return } else if err == models.ErrRepoNameIllegal { - ctx.RenderWithErr(models.ErrRepoNameIllegal.Error(), "repo/import", &form) + ctx.RenderWithErr(models.ErrRepoNameIllegal.Error(), "repo/mirror", &form) return } - ctx.Handle(200, "repo.Import", err) + ctx.Handle(200, "repo.Mirror", err) } func Single(ctx *middleware.Context, params martini.Params) { diff --git a/templates/repo/import.tmpl b/templates/repo/import.tmpl deleted file mode 100644 index 75d928d1..00000000 --- a/templates/repo/import.tmpl +++ /dev/null @@ -1,112 +0,0 @@ -{{template "base/head" .}} -{{template "base/navbar" .}} -
-
- {{.CsrfTokenHtml}} -

Import Repository

-
{{.ErrorMsg}}
-
- -
- -
-
-
- -
- -
-
-
- -
-
- -
- -
-
-
- -
- -
-
-
-
-
-
- -
-

{{.SignedUserName}}

- -
-
- -
- -
- - Great repository names are short and memorable. -
-
- -
- -
-

Public

- -
-
- -
- -
- -
-
- -
- -
- -
-
- -
- -
- -
-
- - - -
-
- - Cancel -
-
-
-
-{{template "base/footer" .}} \ No newline at end of file diff --git a/templates/repo/mirror.tmpl b/templates/repo/mirror.tmpl new file mode 100644 index 00000000..c69f47a3 --- /dev/null +++ b/templates/repo/mirror.tmpl @@ -0,0 +1,81 @@ +{{template "base/head" .}} +{{template "base/navbar" .}} +
+
+ {{.CsrfTokenHtml}} +

Import Repository

+
{{.ErrorMsg}}
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+
+
+ +
+

{{.SignedUserName}}

+ +
+
+ +
+ +
+ + Great repository names are short and memorable. +
+
+ +
+ +
+

Public

+ +
+
+ +
+ +
+ +
+
+ +
+
+ + Cancel +
+
+
+
+{{template "base/footer" .}} \ No newline at end of file diff --git a/templates/user/dashboard.tmpl b/templates/user/dashboard.tmpl index f0a0a0cc..cd55b651 100644 --- a/templates/user/dashboard.tmpl +++ b/templates/user/dashboard.tmpl @@ -37,7 +37,7 @@