package common import ( "encoding/json" "fmt" "io" "strings" ) type Repository struct { Id uint Name string Full_Name string Fork bool Parent *Repository Owner *Organization Clone_Url string Ssh_Url string Default_Branch string Object_Format_Name string } type Organization struct { Id uint Username string } type User struct { Id uint Username string } type RepositoryAction struct { Action string Sender *User Organization *Organization Repository *Repository PrjGit string } // TODO: sanity check values!!!! func (h *RequestHandler) parseRepositoryRequest(dataReader io.Reader) *RepositoryAction { if h.HasError() { return nil } var data RepositoryAction h.Error = json.NewDecoder(dataReader).Decode(&data) if h.HasError() { return nil } repoIdx := strings.LastIndex(data.Repository.Ssh_Url, "/") if repoIdx == -1 || data.Repository.Ssh_Url[repoIdx+1:] != data.Repository.Name+".git" { h.Error = fmt.Errorf("No data, skipping") h.ErrLogger.Printf("Unexpected URL for SSH repository: %s\n", data.Repository.Name) return nil } data.PrjGit = data.Repository.Ssh_Url[:repoIdx+1] + DefaultGitPrj + ".git" h.StdLogger.Printf("Request '%s' for repo: %s\n", data.Action, data.Repository.Full_Name) if len(data.Action) < 1 { h.Error = fmt.Errorf("No data, skipping") h.ErrLogger.Println("Request has no data.... skipping") } h.Data = data return &data }