[mirror] Scalable static site server for Git forges (like GitHub Pages)

Factor out `getWebRoot()`. NFCI

+27 -43
+27 -43
src/pages.go
··· 70 70 return fmt.Sprintf("%s/%s", strings.ToLower(host), projectName) 71 71 } 72 72 73 + func getWebRoot(r *http.Request) (string, error) { 74 + host, err := GetHost(r) 75 + if err != nil { 76 + return "", err 77 + } 78 + 79 + projectName, err := GetProjectName(r) 80 + if err != nil { 81 + return "", err 82 + } 83 + 84 + return makeWebRoot(host, projectName), nil 85 + } 86 + 73 87 func writeRedirect(w http.ResponseWriter, code int, path string) { 74 88 w.Header().Set("Location", path) 75 89 w.WriteHeader(code) ··· 433 447 } 434 448 } 435 449 436 - host, err := GetHost(r) 450 + webRoot, err := getWebRoot(r) 437 451 if err != nil { 438 452 return err 439 453 } 440 - 441 - projectName, err := GetProjectName(r) 442 - if err != nil { 443 - return err 444 - } 445 - 446 - webRoot := makeWebRoot(host, projectName) 447 454 448 455 updateCtx, cancel := context.WithTimeout(r.Context(), time.Duration(config.Limits.UpdateTimeout)) 449 456 defer cancel() ··· 514 521 } 515 522 } 516 523 517 - host, err := GetHost(r) 524 + webRoot, err := getWebRoot(r) 518 525 if err != nil { 519 526 return err 520 527 } 521 528 522 - projectName, err := GetProjectName(r) 523 - if err != nil { 529 + if _, err = AuthorizeUpdateFromArchive(r); err != nil { 524 530 return err 525 531 } 526 532 527 - webRoot := makeWebRoot(host, projectName) 528 - 529 - updateCtx, cancel := context.WithTimeout(r.Context(), time.Duration(config.Limits.UpdateTimeout)) 530 - defer cancel() 531 - 532 - if _, err = AuthorizeUpdateFromArchive(r); err != nil { 533 - return err 533 + if checkDryRun(w, r) { 534 + return nil 534 535 } 535 536 536 537 // Providing atomic compare-and-swap operations might be difficult or impossible depending ··· 553 554 return nil 554 555 } 555 556 556 - if checkDryRun(w, r) { 557 - return nil 558 - } 557 + updateCtx, cancel := context.WithTimeout(r.Context(), time.Duration(config.Limits.UpdateTimeout)) 558 + defer cancel() 559 559 560 560 contentType := getMediaType(r.Header.Get("Content-Type")) 561 561 reader := http.MaxBytesReader(w, r.Body, int64(config.Limits.MaxSiteSize.Bytes())) ··· 613 613 } 614 614 615 615 func deletePage(w http.ResponseWriter, r *http.Request) error { 616 - _, err := AuthorizeUpdateFromRepository(r) 617 - if err != nil { 618 - return err 619 - } 620 - 621 - host, err := GetHost(r) 616 + webRoot, err := getWebRoot(r) 622 617 if err != nil { 623 618 return err 624 619 } 625 620 626 - projectName, err := GetProjectName(r) 621 + _, err = AuthorizeUpdateFromRepository(r) 627 622 if err != nil { 628 623 return err 629 624 } ··· 632 627 return nil 633 628 } 634 629 635 - err = backend.DeleteManifest(r.Context(), makeWebRoot(host, projectName), 636 - ModifyManifestOptions{}) 637 - if err != nil { 630 + if err = backend.DeleteManifest(r.Context(), webRoot, ModifyManifestOptions{}); err != nil { 638 631 w.WriteHeader(http.StatusInternalServerError) 632 + fmt.Fprintln(w, err) 639 633 } else { 640 634 w.Header().Add("Update-Result", "deleted") 641 635 w.WriteHeader(http.StatusOK) 642 636 } 643 - if err != nil { 644 - fmt.Fprintln(w, err) 645 - } 646 637 return err 647 638 } 648 639 ··· 651 642 requestTimeout := 3 * time.Second 652 643 requestTimer := time.NewTimer(requestTimeout) 653 644 654 - auth, err := AuthorizeUpdateFromRepository(r) 655 - if err != nil { 656 - return err 657 - } 658 - 659 - host, err := GetHost(r) 645 + webRoot, err := getWebRoot(r) 660 646 if err != nil { 661 647 return err 662 648 } 663 649 664 - projectName, err := GetProjectName(r) 650 + auth, err := AuthorizeUpdateFromRepository(r) 665 651 if err != nil { 666 652 return err 667 653 } 668 - 669 - webRoot := makeWebRoot(host, projectName) 670 654 671 655 eventName := "" 672 656 for _, header := range []string{