this repo has no description

knotserver: add repo collaborator

Changed files
+61 -29
knotserver
+2
knotserver/handler.go
··· 68 68 r.Route("/{did}", func(r chi.Router) { 69 69 // Repo routes 70 70 r.Route("/{name}", func(r chi.Router) { 71 + r.Post("/collaborator/add", h.AddRepoCollaborator) 72 + 71 73 r.Get("/", h.RepoIndex) 72 74 r.Get("/info/refs", h.InfoRefs) 73 75 r.Post("/git-upload-pack", h.UploadPack)
+59 -29
knotserver/routes.go
··· 420 420 l := h.l.With("handler", "AddMember") 421 421 422 422 data := struct { 423 - Did string `json:"did"` 424 - PublicKeys []string `json:"keys"` 423 + Did string `json:"did"` 425 424 }{} 426 425 427 426 if err := json.NewDecoder(r.Body).Decode(&data); err != nil { ··· 430 429 } 431 430 432 431 did := data.Did 433 - for _, k := range data.PublicKeys { 434 - pk := db.PublicKey{ 435 - Did: did, 436 - } 437 - pk.Key = k 438 - err := h.db.AddPublicKey(pk) 439 - if err != nil { 440 - writeError(w, err.Error(), http.StatusInternalServerError) 441 - return 442 - } 432 + 433 + if err := h.db.AddDid(did); err != nil { 434 + l.Error("adding did", "error", err.Error()) 435 + writeError(w, err.Error(), http.StatusInternalServerError) 436 + return 443 437 } 444 438 445 439 h.js.UpdateDids([]string{did}) ··· 449 443 return 450 444 } 451 445 446 + if err := h.fetchAndAddKeys(r.Context(), did); err != nil { 447 + l.Error("fetching and adding keys", "error", err.Error()) 448 + writeError(w, err.Error(), http.StatusInternalServerError) 449 + return 450 + } 451 + 452 452 w.WriteHeader(http.StatusNoContent) 453 453 } 454 454 455 + func (h *Handle) AddRepoCollaborator(w http.ResponseWriter, r *http.Request) { 456 + l := h.l.With("handler", "AddRepoCollaborator") 457 + 458 + data := struct { 459 + Did string `json:"did"` 460 + }{} 461 + 462 + ownerDid := chi.URLParam(r, "did") 463 + repo := chi.URLParam(r, "name") 464 + 465 + if err := json.NewDecoder(r.Body).Decode(&data); err != nil { 466 + writeError(w, "invalid request body", http.StatusBadRequest) 467 + return 468 + } 469 + 470 + if err := h.db.AddDid(data.Did); err != nil { 471 + l.Error("adding did", "error", err.Error()) 472 + writeError(w, err.Error(), http.StatusInternalServerError) 473 + return 474 + } 475 + h.js.UpdateDids([]string{data.Did}) 476 + 477 + repoName := filepath.Join(ownerDid, repo) 478 + if err := h.e.AddRepo(data.Did, ThisServer, repoName); err != nil { 479 + l.Error("adding repo collaborator", "error", err.Error()) 480 + writeError(w, err.Error(), http.StatusInternalServerError) 481 + return 482 + } 483 + 484 + if err := h.fetchAndAddKeys(r.Context(), data.Did); err != nil { 485 + l.Error("fetching and adding keys", "error", err.Error()) 486 + writeError(w, err.Error(), http.StatusInternalServerError) 487 + return 488 + } 489 + 490 + w.WriteHeader(http.StatusOK) 491 + } 492 + 455 493 func (h *Handle) Init(w http.ResponseWriter, r *http.Request) { 456 494 l := h.l.With("handler", "Init") 457 495 ··· 461 499 } 462 500 463 501 data := struct { 464 - Did string `json:"did"` 465 - PublicKeys []string `json:"keys"` 502 + Did string `json:"did"` 466 503 }{} 467 504 468 505 if err := json.NewDecoder(r.Body).Decode(&data); err != nil { ··· 472 509 } 473 510 474 511 if data.Did == "" { 475 - l.Error("empty DID in request") 512 + l.Error("empty DID in request", "did", data.Did) 476 513 writeError(w, "did is empty", http.StatusBadRequest) 477 514 return 478 515 } 479 516 480 - if err := h.db.AddDid(data.Did); err == nil { 481 - for _, k := range data.PublicKeys { 482 - pk := db.PublicKey{ 483 - Did: data.Did, 484 - } 485 - pk.Key = k 486 - err := h.db.AddPublicKey(pk) 487 - if err != nil { 488 - l.Error("failed to add public key", "error", err.Error()) 489 - writeError(w, err.Error(), http.StatusInternalServerError) 490 - return 491 - } 492 - } 493 - } else { 517 + if err := h.db.AddDid(data.Did); err != nil { 494 518 l.Error("failed to add DID", "error", err.Error()) 495 519 writeError(w, err.Error(), http.StatusInternalServerError) 496 520 return ··· 499 523 h.js.UpdateDids([]string{data.Did}) 500 524 if err := h.e.AddOwner(ThisServer, data.Did); err != nil { 501 525 l.Error("adding owner", "error", err.Error()) 526 + writeError(w, err.Error(), http.StatusInternalServerError) 527 + return 528 + } 529 + 530 + if err := h.fetchAndAddKeys(r.Context(), data.Did); err != nil { 531 + l.Error("fetching and adding keys", "error", err.Error()) 502 532 writeError(w, err.Error(), http.StatusInternalServerError) 503 533 return 504 534 }