func PutRepositoryV1Handler(ctx *macaron.Context, log *logs.BeeLogger) (int, []byte) { username, _, _ := utils.DecodeBasicAuth(ctx.Req.Header.Get("Authorization")) namespace := ctx.Params(":namespace") repository := ctx.Params(":repository") body, err := ctx.Req.Body().String() if err != nil { log.Error("[REGISTRY API V1] Get request body error: %v", err.Error()) result, _ := json.Marshal(map[string]string{"message": "Put V1 repository failed,request body is empty"}) return http.StatusBadRequest, result } r := new(models.Repository) if err := r.Put(namespace, repository, body, ctx.Req.Header.Get("User-Agent"), setting.APIVERSION_V1); err != nil { log.Error("[REGISTRY API V1] Put repository error: %v", err.Error()) result, _ := json.Marshal(map[string]string{"message": err.Error()}) return http.StatusBadRequest, result } if ctx.Req.Header.Get("X-Docker-Token") == "true" { token := fmt.Sprintf("Token signature=%v,repository=\"%v/%v\",access=%v", utils.MD5(username), namespace, repository, "write") ctx.Resp.Header().Set("X-Docker-Token", token) ctx.Resp.Header().Set("WWW-Authenticate", token) } result, _ := json.Marshal(map[string]string{}) return http.StatusOK, result }
func PutRepositoryImagesV1Handler(ctx *macaron.Context, log *logs.BeeLogger) (int, []byte) { namespace := ctx.Params(":namespace") repository := ctx.Params(":repository") r := new(models.Repository) if err := r.PutImages(namespace, repository); err != nil { log.Error("[REGISTRY API V1] Put images error: %v", err.Error()) result, _ := json.Marshal(map[string]string{"message": "Put V1 images error"}) return http.StatusBadRequest, result } if ctx.Req.Header.Get("X-Docker-Token") == "true" { username, _, _ := utils.DecodeBasicAuth(ctx.Req.Header.Get("Authorization")) token := fmt.Sprintf("Token signature=%v,repository=\"%v/%v\",access=%v", utils.MD5(username), namespace, repository, "write") ctx.Resp.Header().Set("X-Docker-Token", token) ctx.Resp.Header().Set("WWW-Authenticate", token) } result, _ := json.Marshal(map[string]string{}) return http.StatusNoContent, result }
func GetRepositoryImagesV1Handler(ctx *macaron.Context, log *logs.BeeLogger) (int, []byte) { namespace := ctx.Params(":namespace") repository := ctx.Params(":repository") repo := new(models.Repository) if has, _, err := repo.Has(namespace, repository); err != nil { log.Error("[REGISTRY API V1] Read repository json error: %v", err.Error()) result, _ := json.Marshal(map[string]string{"message": "Get V1 repository images failed,wrong name or repository"}) return http.StatusBadRequest, result } else if has == false { log.Error("[REGISTRY API V1] Read repository no found, %v/%v", namespace, repository) result, _ := json.Marshal(map[string]string{"message": "Get V1 repository images failed,repository no found"}) return http.StatusNotFound, result } repo.Download += 1 if err := repo.Save(); err != nil { log.Error("[REGISTRY API V1] Update download count error: %v", err.Error()) result, _ := json.Marshal(map[string]string{"message": "Save V1 repository failed"}) return http.StatusBadRequest, result } username, _, _ := utils.DecodeBasicAuth(ctx.Req.Header.Get("Authorization")) token := fmt.Sprintf("Token signature=%v,repository=\"%v/%v\",access=%v", utils.MD5(username), namespace, repository, "read") ctx.Resp.Header().Set("X-Docker-Token", token) ctx.Resp.Header().Set("WWW-Authenticate", token) ctx.Resp.Header().Set("Content-Length", fmt.Sprint(len(repo.JSON))) return http.StatusOK, []byte(repo.JSON) }
func GetRepositoryImagesV1Handler(ctx *macaron.Context, log *logs.BeeLogger) (int, []byte) { namespace := ctx.Params(":namespace") repository := ctx.Params(":repository") r := new(models.Repository) if exists, err := r.Get(namespace, repository); err != nil { log.Error("[REGISTRY API V1] Failed to get repository %v/%v context: %v", namespace, repository, err.Error()) result, _ := json.Marshal(map[string]string{"message": "Failed to get repository context"}) return http.StatusBadRequest, result } else if exists == false { log.Error("[REGISTRY API V1] Not found repository %v/%v", namespace, repository) result, _ := json.Marshal(map[string]string{"message": "Not found repository"}) return http.StatusNotFound, result } r.Download += 1 if err := r.Save(namespace, repository); err != nil { log.Error("[REGISTRY API V1] Failed to save repository %v/%v context: %v", namespace, repository, err.Error()) result, _ := json.Marshal(map[string]string{"message": "Failed to save repository context"}) return http.StatusBadRequest, result } username, _, _ := utils.DecodeBasicAuth(ctx.Req.Header.Get("Authorization")) token := fmt.Sprintf("Token signature=%v,repository=\"%v/%v\",access=%v", utils.MD5(username), namespace, repository, "read") ctx.Resp.Header().Set("X-Docker-Token", token) ctx.Resp.Header().Set("WWW-Authenticate", token) ctx.Resp.Header().Set("Content-Length", fmt.Sprint(len(r.JSON))) return http.StatusOK, []byte(r.JSON) }