blob: 0bf18d643e59127c818a3c7f39fe77037d68f18c [file] [log] [blame]
// Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package frontend
import (
"context"
"fmt"
"net/http"
"golang.org/x/pkgsite/internal"
"golang.org/x/pkgsite/internal/derrors"
"golang.org/x/pkgsite/internal/licenses"
)
func (s *Server) legacyServeDirectoryPage(ctx context.Context, w http.ResponseWriter, r *http.Request, ds internal.DataSource, dbDir *internal.LegacyDirectory, requestedVersion string) (err error) {
defer derrors.Wrap(&err, "legacyServeDirectoryPage for %s@%s", dbDir.Path, requestedVersion)
tab := r.FormValue("tab")
settings, ok := directoryTabLookup[tab]
if tab == "" || !ok || settings.Disabled {
tab = tabSubdirectories
settings = directoryTabLookup[tab]
}
licenses, err := ds.LegacyGetModuleLicenses(ctx, dbDir.ModulePath, dbDir.Version)
if err != nil {
return err
}
header, err := legacyCreateDirectory(dbDir, licensesToMetadatas(licenses), false)
if err != nil {
return err
}
if requestedVersion == internal.LatestVersion {
header.URL = constructDirectoryURL(dbDir.Path, dbDir.ModulePath, internal.LatestVersion)
}
details, err := legacyFetchDetailsForDirectory(r, tab, dbDir, licenses)
if err != nil {
return err
}
page := &DetailsPage{
basePage: s.newBasePage(r, fmt.Sprintf("%s directory", dbDir.Path)),
Name: dbDir.Path,
Settings: settings,
Header: header,
Breadcrumb: breadcrumbPath(dbDir.Path, dbDir.ModulePath, linkVersion(dbDir.Version, dbDir.ModulePath)),
Details: details,
CanShowDetails: true,
Tabs: directoryTabSettings,
PageType: pageTypeDirectory,
CanonicalURLPath: constructPackageURL(
dbDir.Path,
dbDir.ModulePath,
linkVersion(dbDir.Version, dbDir.ModulePath),
),
}
s.servePage(ctx, w, settings.TemplateName, page)
return nil
}
// legacyCreateDirectory constructs a *Directory for the given dirPath.
func legacyCreateDirectory(dbDir *internal.LegacyDirectory, licmetas []*licenses.Metadata, includeDirPath bool) (_ *Directory, err error) {
defer derrors.Wrap(&err, "legacyCreateDirectory(%q, %q, %t)", dbDir.Path, dbDir.Version, includeDirPath)
var packages []*internal.PackageMeta
for _, pkg := range dbDir.Packages {
newPkg := packageMetaFromLegacyPackage(pkg)
packages = append(packages, newPkg)
}
return createDirectory(dbDir.Path, &dbDir.ModuleInfo, packages, nil, licmetas, includeDirPath)
}