diff --git a/main.go b/main.go index 6b1c314..08ccc54 100644 --- a/main.go +++ b/main.go @@ -38,7 +38,6 @@ import ( "github.com/b3log/wide/notification" "github.com/b3log/wide/output" "github.com/b3log/wide/playground" - "github.com/b3log/wide/scm/git" "github.com/b3log/wide/session" "github.com/b3log/wide/util" ) @@ -179,9 +178,6 @@ func main() { http.HandleFunc(conf.Wide.Context+"/playground/stop", handlerWrapper(playground.StopHandler)) http.HandleFunc(conf.Wide.Context+"/playground/autocomplete", handlerWrapper(playground.AutocompleteHandler)) - // git - http.HandleFunc(conf.Wide.Context+"/git/clone", handlerWrapper(git.CloneHandler)) - logger.Infof("Wide is running [%s]", conf.Wide.Server+conf.Wide.Context) err := http.ListenAndServe(conf.Wide.Server, nil) diff --git a/scm/git/clone.go b/scm/git/clone.go deleted file mode 100644 index 6c58816..0000000 --- a/scm/git/clone.go +++ /dev/null @@ -1,146 +0,0 @@ -// Copyright (c) 2014-2019, b3log.org & hacpai.com -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package git - -import ( - "bufio" - "encoding/json" - "io" - "io/ioutil" - "math/rand" - "net/http" - "os" - "os/exec" - - "github.com/b3log/wide/conf" - "github.com/b3log/wide/i18n" - "github.com/b3log/wide/log" - "github.com/b3log/wide/session" - "github.com/b3log/wide/util" -) - -// Logger. -var logger = log.NewLogger(os.Stdout) - -// Clone handles request of git clone. -func CloneHandler(w http.ResponseWriter, r *http.Request) { - result := util.NewResult() - defer util.RetResult(w, r, result) - - httpSession, _ := session.HTTPSession.Get(r, "wide-session") - if httpSession.IsNew { - http.Error(w, "Forbidden", http.StatusForbidden) - - return - } - username := httpSession.Values["username"].(string) - locale := conf.GetUser(username).Locale - - var args map[string]interface{} - if err := json.NewDecoder(r.Body).Decode(&args); err != nil { - logger.Error(err) - result.Succ = false - - return - } - - sid := args["sid"].(string) - path := args["path"].(string) - repository := args["repository"].(string) - - cmd := exec.Command("git", "clone", repository) - cmd.Dir = path - - stdout, err := cmd.StdoutPipe() - if nil != err { - logger.Error(err) - result.Succ = false - - return - } - - stderr, err := cmd.StderrPipe() - if nil != err { - logger.Error(err) - result.Succ = false - - return - } - - if !result.Succ { - return - } - - channelRet := map[string]interface{}{} - - if nil != session.OutputWS[sid] { - // display "START [git clone]" in front-end browser - - channelRet["output"] = "" + i18n.Get(locale, "start-git_clone").(string) + "\n" - channelRet["cmd"] = "start-git_clone" - - wsChannel := session.OutputWS[sid] - - err := wsChannel.WriteJSON(&channelRet) - if nil != err { - logger.Warn(err) - return - } - - wsChannel.Refresh() - } - - reader := bufio.NewReader(io.MultiReader(stdout, stderr)) - - if err := cmd.Start(); nil != err { - logger.Error(err) - result.Succ = false - - return - } - - go func(runningId int) { - defer util.Recover() - defer cmd.Wait() - - logger.Debugf("User [%s, %s] is running [git clone] [runningId=%d]", username, sid, runningId) - - channelRet := map[string]interface{}{} - channelRet["cmd"] = "git clone" - - // read all - buf, err := ioutil.ReadAll(reader) - if nil != err { - logger.Warn(err) - - // TODO: handle clone error - } - - logger.Debugf("User [%s, %s] 's running [git clone] [runningId=%d] has done: %s", username, sid, runningId, string(buf)) - - channelRet["output"] = "" + i18n.Get(locale, "git_clone-done").(string) + "\n" - - if nil != session.OutputWS[sid] { - wsChannel := session.OutputWS[sid] - - err := wsChannel.WriteJSON(&channelRet) - if nil != err { - logger.Warn(err) - } - - wsChannel.Refresh() - } - }(rand.Int()) -}