2024-02-23 00:26:49 +00:00
|
|
|
// Copyright 2024 The Forgjo Authors. All rights reserved.
|
|
|
|
// Use of this source code is governed by a MIT-style
|
|
|
|
// license that can be found in the LICENSE file.
|
|
|
|
|
2023-07-15 03:59:55 +01:00
|
|
|
// Copyright 2023 The Gitea Authors. All rights reserved.
|
|
|
|
// Use of this source code is governed by a MIT-style
|
|
|
|
// license that can be found in the LICENSE file.
|
|
|
|
|
2024-02-23 00:26:49 +00:00
|
|
|
package forgejo
|
2023-07-15 03:59:55 +01:00
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"time"
|
|
|
|
)
|
|
|
|
|
|
|
|
// Package represents a package
|
|
|
|
type Package struct {
|
|
|
|
// the package's id
|
|
|
|
ID int64 `json:"id"`
|
|
|
|
// the package's owner
|
|
|
|
Owner User `json:"owner"`
|
|
|
|
// the repo this package belongs to (if any)
|
2024-01-29 05:38:16 +00:00
|
|
|
Repository *Repository `json:"repository"`
|
2023-07-15 03:59:55 +01:00
|
|
|
// the package's creator
|
|
|
|
Creator User `json:"creator"`
|
|
|
|
// the type of package:
|
|
|
|
Type string `json:"type"`
|
|
|
|
// the name of the package
|
|
|
|
Name string `json:"name"`
|
|
|
|
// the version of the package
|
|
|
|
Version string `json:"version"`
|
|
|
|
// the date the package was uploaded
|
|
|
|
CreatedAt time.Time `json:"created_at"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// PackageFile represents a file from a package
|
|
|
|
type PackageFile struct {
|
|
|
|
// the file's ID
|
|
|
|
ID int64 `json:"id"`
|
|
|
|
// the size of the file in bytes
|
|
|
|
Size int64 `json:"size"`
|
|
|
|
// the name of the file
|
|
|
|
Name string `json:"name"`
|
|
|
|
// the md5 hash of the file
|
|
|
|
MD5 string `json:"md5"`
|
|
|
|
// the sha1 hash of the file
|
|
|
|
SHA1 string `json:"sha1"`
|
|
|
|
// the sha256 hash of the file
|
|
|
|
SHA256 string `json:"sha256"`
|
|
|
|
// the sha512 hash of the file
|
|
|
|
SHA512 string `json:"sha512"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// ListPackagesOptions options for listing packages
|
|
|
|
type ListPackagesOptions struct {
|
|
|
|
ListOptions
|
|
|
|
}
|
|
|
|
|
|
|
|
// ListPackages lists all the packages owned by a given owner (user, organisation)
|
|
|
|
func (c *Client) ListPackages(owner string, opt ListPackagesOptions) ([]*Package, *Response, error) {
|
|
|
|
if err := escapeValidatePathSegments(&owner); err != nil {
|
|
|
|
return nil, nil, err
|
|
|
|
}
|
|
|
|
opt.setDefaults()
|
|
|
|
packages := make([]*Package, 0, opt.PageSize)
|
|
|
|
resp, err := c.getParsedResponse("GET", fmt.Sprintf("/packages/%s?%s", owner, opt.getURLQuery().Encode()), nil, nil, &packages)
|
|
|
|
return packages, resp, err
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetPackage gets the details of a specific package version
|
|
|
|
func (c *Client) GetPackage(owner, packageType, name, version string) (*Package, *Response, error) {
|
|
|
|
if err := escapeValidatePathSegments(&owner, &packageType, &name, &version); err != nil {
|
|
|
|
return nil, nil, err
|
|
|
|
}
|
|
|
|
foundPackage := new(Package)
|
|
|
|
resp, err := c.getParsedResponse("GET", fmt.Sprintf("/packages/%s/%s/%s/%s", owner, packageType, name, version), nil, nil, foundPackage)
|
|
|
|
return foundPackage, resp, err
|
|
|
|
}
|
|
|
|
|
|
|
|
// DeletePackage deletes a specific package version
|
|
|
|
func (c *Client) DeletePackage(owner, packageType, name, version string) (*Response, error) {
|
|
|
|
if err := escapeValidatePathSegments(&owner, &packageType, &name, &version); err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
_, resp, err := c.getResponse("DELETE", fmt.Sprintf("/packages/%s/%s/%s/%s", owner, packageType, name, version), nil, nil)
|
|
|
|
return resp, err
|
|
|
|
}
|
|
|
|
|
|
|
|
// ListPackageFiles lists the files within a package
|
|
|
|
func (c *Client) ListPackageFiles(owner, packageType, name, version string) ([]*PackageFile, *Response, error) {
|
|
|
|
if err := escapeValidatePathSegments(&owner, &packageType, &name, &version); err != nil {
|
|
|
|
return nil, nil, err
|
|
|
|
}
|
|
|
|
packageFiles := make([]*PackageFile, 0)
|
|
|
|
resp, err := c.getParsedResponse("GET", fmt.Sprintf("/packages/%s/%s/%s/%s/files", owner, packageType, name, version), nil, nil, &packageFiles)
|
|
|
|
return packageFiles, resp, err
|
|
|
|
}
|