2018-11-09 18:10:58 +01:00
|
|
|
package claim
|
|
|
|
|
|
|
|
import (
|
|
|
|
"encoding/json"
|
|
|
|
|
2020-09-01 19:58:08 +02:00
|
|
|
"github.com/lbryio/lbry.go/v2/extras/errors"
|
2018-11-09 18:10:58 +01:00
|
|
|
)
|
|
|
|
|
|
|
|
// V1Claim is the first version of claim metadata used by lbry.
|
|
|
|
type V1Claim struct {
|
|
|
|
Version string `json:"ver,omitempty"`
|
|
|
|
Title string `json:"title"` //Required
|
|
|
|
Description string `json:"description"` //Required
|
|
|
|
Author string `json:"author"` //Required
|
|
|
|
Language string `json:"language"` //Required
|
|
|
|
License string `json:"license"` //Required
|
|
|
|
Sources Sources `json:"sources"` //Required
|
|
|
|
ContentType string `json:"content-type"` //Required
|
|
|
|
Thumbnail *string `json:"thumbnail,omitempty"`
|
|
|
|
Fee *Fee `json:"fee,omitempty"`
|
|
|
|
Contact *int `json:"contact,omitempty"`
|
|
|
|
PubKey *string `json:"pubkey,omitempty"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// V2Claim is the second version of claim metadata used by lbry.
|
|
|
|
type V2Claim struct {
|
|
|
|
Version string `json:"ver"` //Required
|
|
|
|
Title string `json:"title"` //Required
|
|
|
|
Description string `json:"description"` //Required
|
|
|
|
Author string `json:"author"` //Required
|
|
|
|
Language string `json:"language"` //Required
|
|
|
|
License string `json:"license"` //Required
|
|
|
|
Sources Sources `json:"sources"` //Required
|
|
|
|
ContentType string `json:"content-type"` //Required
|
|
|
|
Thumbnail *string `json:"thumbnail,omitempty"`
|
|
|
|
Fee *Fee `json:"fee,omitempty"`
|
|
|
|
Contact *int `json:"contact,omitempty"`
|
|
|
|
PubKey *string `json:"pubkey,omitempty"`
|
|
|
|
LicenseURL *string `json:"license_url,omitempty"`
|
|
|
|
NSFW bool `json:"nsfw"` //Required
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
// V3Claim is the third version of claim metadata used by lbry.
|
|
|
|
type V3Claim struct {
|
|
|
|
Version string `json:"ver"` //Required
|
|
|
|
Title string `json:"title"` //Required
|
|
|
|
Description string `json:"description"` //Required
|
|
|
|
Author string `json:"author"` //Required
|
|
|
|
Language string `json:"language"` //Required
|
|
|
|
License string `json:"license"` //Required
|
|
|
|
Sources Sources `json:"sources"` //Required
|
|
|
|
ContentType string `json:"content_type"` //Required
|
|
|
|
Thumbnail *string `json:"thumbnail,omitempty"`
|
|
|
|
Fee *Fee `json:"fee,omitempty"`
|
|
|
|
Contact *int `json:"contact,omitempty"`
|
|
|
|
PubKey *string `json:"pubkey,omitempty"`
|
|
|
|
LicenseURL *string `json:"license_url,omitempty"`
|
|
|
|
NSFW bool `json:"nsfw"` //Required
|
|
|
|
Sig *string `json:"sig"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// FeeInfo is the structure of fee information used by lbry.
|
|
|
|
type FeeInfo struct {
|
|
|
|
Amount float32 `json:"amount"` //Required
|
|
|
|
Address string `json:"address"` //Required
|
|
|
|
}
|
|
|
|
|
|
|
|
// Sources is the structure of Sources that can be used for a claim. Sources mainly include lbrysdhash but could be from
|
|
|
|
// elsewhere in the future.
|
|
|
|
type Sources struct {
|
|
|
|
LbrySDHash string `json:"lbry_sd_hash"` //Required
|
|
|
|
BTIH string `json:"btih"` //Required
|
|
|
|
URL string `json:"url"` //Required
|
|
|
|
}
|
|
|
|
|
|
|
|
// Fee is the structure used for different currencies allowed for claims.
|
|
|
|
type Fee struct {
|
|
|
|
LBC *FeeInfo `json:"LBC,omitempty"`
|
|
|
|
BTC *FeeInfo `json:"BTC,omitempty"`
|
|
|
|
USD *FeeInfo `json:"USD,omitempty"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// Unmarshal is an implementation to unmarshal the V1 claim from json. Main addition is to check the version.
|
|
|
|
func (c *V1Claim) Unmarshal(value []byte) error {
|
|
|
|
err := json.Unmarshal(value, c)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
} //Version can be blank for version 1
|
|
|
|
if c.Version != "" && c.Version != "0.0.1" {
|
|
|
|
err = errors.Base("Incorrect version, expected 0.0.1 found " + c.Version)
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
//ToDo - restrict to required fields?
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// Unmarshal is an implementation to unmarshal the V2 claim from json. Main addition is to check the version.
|
|
|
|
func (c *V2Claim) Unmarshal(value []byte) error {
|
|
|
|
err := json.Unmarshal(value, c)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
if c.Version != "0.0.2" {
|
|
|
|
err = errors.Base("Incorrect version, expected 0.0.2 found " + c.Version)
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// Unmarshal is an implementation to unmarshal the V3 claim from json. Main addition is to check the version.
|
|
|
|
func (c *V3Claim) Unmarshal(value []byte) error {
|
|
|
|
err := json.Unmarshal(value, c)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
if c.Version != "0.0.3" {
|
|
|
|
err = errors.Base("Incorrect version, expected 0.0.3 found " + c.Version)
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|