core

package
v0.0.0-...-4a9ee8d Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 5, 2017 License: MIT Imports: 60 Imported by: 0

Documentation

Index

Constants

View Source
const (
	RatingMin           = 1
	RatingMax           = 5
	ReviewMaxCharacters = 3000
)
View Source
const (
	ListingVersion           = 1
	TitleMaxCharacters       = 140
	ShortDescriptionLength   = 160
	DescriptionMaxCharacters = 50000
	MaxTags                  = 10
	MaxCategories            = 10
	MaxListItems             = 30
	FilenameMaxCharacters    = 255
	CodeMaxCharacters        = 20
	WordMaxCharacters        = 40
	SentenceMaxCharacters    = 70
	CouponTitleMaxCharacters = 70
	PolicyMaxCharacters      = 10000
	AboutMaxCharacters       = 10000
	URLMaxCharacters         = 2000
	MaxCountryCodes          = 255
)
View Source
const (
	CHAT_MESSAGE_MAX_CHARACTERS = 20000
	CHAT_SUBJECT_MAX_CHARACTERS = 500
	DefaultPointerPrefixLength  = 14
)

Variables

View Source
var (
	VERSION   = "0.5.3"
	USERAGENT = "/openbazaar-go:" + VERSION + "/"
)
View Source
var DisputeWg = new(sync.WaitGroup)
View Source
var ErrCaseNotFound = errors.New("Case not found")
View Source
var ErrorProfileNotFound error = errors.New("Profie not found")
View Source
var ModeratorPointerID multihash.Multihash
View Source
var NoListingsError error = errors.New("No listings to set moderators on")

Functions

func EncodeMultihash

func EncodeMultihash(b []byte) (*mh.Multihash, error)

Hash with SHA-256 and encode as a multihash

func ExtraModeratorKeyFromReddemScript

func ExtraModeratorKeyFromReddemScript(redeemScript string) string

func ExtractIDFromPointer

func ExtractIDFromPointer(pi ps.PeerInfo) (string, error)

Certain pointers, such as moderators, contain a peerID. This function will extract the ID from the underlying PeerInfo object.

func GetListingFromHash

func GetListingFromHash(hash string, contract *pb.RicardianContract) (*pb.Listing, error)

func GetSelectedSku

func GetSelectedSku(listing *pb.Listing, itemOptions []*pb.Order_Item_Option) (int, error)

func SameSku

func SameSku(selectedVariants []int, sku *pb.Listing_Item_Sku) bool

func ValidateProfile

func ValidateProfile(profile *pb.Profile) error

Types

type Images

type Images struct {
	Tiny     string `json:"tiny"`
	Small    string `json:"small"`
	Medium   string `json:"medium"`
	Large    string `json:"large"`
	Original string `json:"original"`
}

type OpenBazaarNode

type OpenBazaarNode struct {
	// Context for issuing IPFS commands
	Context commands.Context

	// IPFS node object
	IpfsNode *core.IpfsNode

	/* The roothash of the node directory inside the openbazaar repo.
	   This directory hash is published on IPNS at our peer ID making
	   the directory publicly viewable on the network. */
	RootHash string

	// The path to the openbazaar repo in the file system
	RepoPath string

	// The OpenBazaar network service for direct communication between peers
	Service net.NetworkService

	// Database for storing node specific data
	Datastore repo.Datastore

	// Websocket channel used for pushing data to the UI
	Broadcast chan interface{}

	// Bitcoin wallet implementation
	Wallet bitcoin.BitcoinWallet

	// Storage for our outgoing messages
	MessageStorage sto.OfflineMessagingStorage

	// A service that periodically checks the dht for outstanding messages
	MessageRetriever *ret.MessageRetriever

	// A service that periodically republishes active pointers
	PointerRepublisher *rep.PointerRepublisher

	// Used to resolve blockchainIDs to OpenBazaar IDs
	Resolver *bstk.BlockstackClient

	// A service that periodically fetches and caches the bitcoin exchange rates
	ExchangeRates bitcoin.ExchangeRates

	// An optional gateway URL where we can crosspost data to ensure persistence
	CrosspostGateways []*url.URL

	// The user-agent for this node
	UserAgent string

	// A dialer for Tor if available
	TorDialer proxy.Dialer

	// Manage blocked peers
	BanManager *net.BanManager
}
var Node *OpenBazaarNode

func (*OpenBazaarNode) CalcOrderId

func (n *OpenBazaarNode) CalcOrderId(order *pb.Order) (string, error)

func (*OpenBazaarNode) CalculateOrderTotal

func (n *OpenBazaarNode) CalculateOrderTotal(contract *pb.RicardianContract) (uint64, error)

func (*OpenBazaarNode) CancelOfflineOrder

func (n *OpenBazaarNode) CancelOfflineOrder(contract *pb.RicardianContract, records []*spvwallet.TransactionRecord) error

func (*OpenBazaarNode) CloseDispute

func (n *OpenBazaarNode) CloseDispute(orderId string, buyerPercentage, vendorPercentage float32, resolution string) error

func (*OpenBazaarNode) CompleteOrder

func (n *OpenBazaarNode) CompleteOrder(orderRatings *OrderRatings, contract *pb.RicardianContract, records []*spvwallet.TransactionRecord) error

func (*OpenBazaarNode) ConfirmOfflineOrder

func (n *OpenBazaarNode) ConfirmOfflineOrder(contract *pb.RicardianContract, records []*spvwallet.TransactionRecord) error

func (*OpenBazaarNode) DeleteListing

func (n *OpenBazaarNode) DeleteListing(slug string) error

Deletes the listing directory, removes the listing from the index, and deletes the inventory

func (*OpenBazaarNode) EncryptMessage

func (n *OpenBazaarNode) EncryptMessage(peerID peer.ID, peerKey *libp2p.PubKey, message []byte) (ct []byte, rerr error)

This is a placeholder until the libsignal is operational.

For now we will just encrypt outgoing offline messages with the long lived identity key.
Optionally you may provide a public key, to avoid doing an IPFS lookup

func (*OpenBazaarNode) FetchProfile

func (n *OpenBazaarNode) FetchProfile(peerId string) (pb.Profile, error)

func (*OpenBazaarNode) Follow

func (n *OpenBazaarNode) Follow(peerId string) error

func (*OpenBazaarNode) FulfillOrder

func (n *OpenBazaarNode) FulfillOrder(fulfillment *pb.OrderFulfillment, contract *pb.RicardianContract, records []*spvwallet.TransactionRecord) error

func (*OpenBazaarNode) GenerateSlug

func (n *OpenBazaarNode) GenerateSlug(title string) (string, error)

func (*OpenBazaarNode) GetListingCount

func (n *OpenBazaarNode) GetListingCount() int

Return the current number of listings

func (*OpenBazaarNode) GetListingFromHash

func (n *OpenBazaarNode) GetListingFromHash(hash string) (*pb.RicardianContract, error)

func (*OpenBazaarNode) GetListingFromSlug

func (n *OpenBazaarNode) GetListingFromSlug(slug string) (*pb.RicardianContract, error)

func (*OpenBazaarNode) GetListings

func (n *OpenBazaarNode) GetListings() ([]byte, error)

func (*OpenBazaarNode) GetModeratorFee

func (n *OpenBazaarNode) GetModeratorFee(transactionTotal uint64) (uint64, error)

func (*OpenBazaarNode) GetPeerStatus

func (n *OpenBazaarNode) GetPeerStatus(peerId string) (string, error)

func (*OpenBazaarNode) GetProfile

func (n *OpenBazaarNode) GetProfile() (pb.Profile, error)

func (*OpenBazaarNode) IsFulfilled

func (n *OpenBazaarNode) IsFulfilled(contract *pb.RicardianContract) bool

func (*OpenBazaarNode) IsItemForSale

func (n *OpenBazaarNode) IsItemForSale(listing *pb.Listing) bool

Check to see we are selling the given listing. Used when validating an order. FIXME: This wont scale well. We will need to store the hash of active listings in a db to do an indexed search.

func (*OpenBazaarNode) IsModerator

func (n *OpenBazaarNode) IsModerator() bool

func (*OpenBazaarNode) NewOrderConfirmation

func (n *OpenBazaarNode) NewOrderConfirmation(contract *pb.RicardianContract, addressRequest bool) (*pb.RicardianContract, error)

func (*OpenBazaarNode) NotifyModerators

func (n *OpenBazaarNode) NotifyModerators(moderators []string) error

func (*OpenBazaarNode) OpenDispute

func (n *OpenBazaarNode) OpenDispute(orderID string, contract *pb.RicardianContract, records []*spvwallet.TransactionRecord, claim string) error

func (*OpenBazaarNode) PatchProfile

func (n *OpenBazaarNode) PatchProfile(patch map[string]interface{}) error

func (*OpenBazaarNode) ProcessDisputeOpen

func (n *OpenBazaarNode) ProcessDisputeOpen(rc *pb.RicardianContract, peerID string) error

func (*OpenBazaarNode) Purchase

func (n *OpenBazaarNode) Purchase(data *PurchaseData) (orderId string, paymentAddress string, paymentAmount uint64, vendorOnline bool, err error)

func (*OpenBazaarNode) RefundOrder

func (n *OpenBazaarNode) RefundOrder(contract *pb.RicardianContract, records []*spvwallet.TransactionRecord) error

func (*OpenBazaarNode) RejectOfflineOrder

func (n *OpenBazaarNode) RejectOfflineOrder(contract *pb.RicardianContract, records []*spvwallet.TransactionRecord) error

func (*OpenBazaarNode) ReleaseFunds

func (n *OpenBazaarNode) ReleaseFunds(contract *pb.RicardianContract, records []*spvwallet.TransactionRecord) error

func (*OpenBazaarNode) RemoveSelfAsModerator

func (n *OpenBazaarNode) RemoveSelfAsModerator() error

func (*OpenBazaarNode) SeedNode

func (n *OpenBazaarNode) SeedNode() error

Unpin the current node repo, re-add it, then publish to IPNS

func (*OpenBazaarNode) SendCancel

func (n *OpenBazaarNode) SendCancel(peerId, orderId string) error

func (*OpenBazaarNode) SendChat

func (n *OpenBazaarNode) SendChat(peerId string, chatMessage *pb.Chat) error

func (*OpenBazaarNode) SendDisputeClose

func (n *OpenBazaarNode) SendDisputeClose(peerId string, k *libp2p.PubKey, resolutionMessage *pb.RicardianContract) error

func (*OpenBazaarNode) SendDisputeOpen

func (n *OpenBazaarNode) SendDisputeOpen(peerId string, k *libp2p.PubKey, disputeMessage *pb.RicardianContract) error

func (*OpenBazaarNode) SendDisputeUpdate

func (n *OpenBazaarNode) SendDisputeUpdate(peerId string, updateMessage *pb.DisputeUpdate) error

func (*OpenBazaarNode) SendModeratorAdd

func (n *OpenBazaarNode) SendModeratorAdd(peerId string) error

func (*OpenBazaarNode) SendModeratorRemove

func (n *OpenBazaarNode) SendModeratorRemove(peerId string) error

func (*OpenBazaarNode) SendOfflineAck

func (n *OpenBazaarNode) SendOfflineAck(peerId string, pointerID peer.ID) error

func (*OpenBazaarNode) SendOfflineMessage

func (n *OpenBazaarNode) SendOfflineMessage(p peer.ID, k *libp2p.PubKey, m *pb.Message) error

Supply of a public key is optional, if nil is instead provided n.EncryptMessage does a lookup

func (*OpenBazaarNode) SendOrder

func (n *OpenBazaarNode) SendOrder(peerId string, contract *pb.RicardianContract) (resp *pb.Message, err error)

func (*OpenBazaarNode) SendOrderCompletion

func (n *OpenBazaarNode) SendOrderCompletion(peerId string, k *libp2p.PubKey, completionMessage *pb.RicardianContract) error

func (*OpenBazaarNode) SendOrderConfirmation

func (n *OpenBazaarNode) SendOrderConfirmation(peerId string, contract *pb.RicardianContract) error

func (*OpenBazaarNode) SendOrderFulfillment

func (n *OpenBazaarNode) SendOrderFulfillment(peerId string, k *libp2p.PubKey, fulfillmentMessage *pb.RicardianContract) error

func (*OpenBazaarNode) SendRefund

func (n *OpenBazaarNode) SendRefund(peerId string, refundMessage *pb.RicardianContract) error

func (*OpenBazaarNode) SendReject

func (n *OpenBazaarNode) SendReject(peerId string, rejectMessage *pb.OrderReject) error

func (*OpenBazaarNode) SetAvatarImages

func (n *OpenBazaarNode) SetAvatarImages(base64ImageData string) (*Images, error)

func (*OpenBazaarNode) SetHeaderImages

func (n *OpenBazaarNode) SetHeaderImages(base64ImageData string) (*Images, error)

func (*OpenBazaarNode) SetListingInventory

func (n *OpenBazaarNode) SetListingInventory(listing *pb.Listing) error

Sets the inventory for the listing in the database. Does some basic validation

to make sure the inventory uses the correct variants.

func (*OpenBazaarNode) SetModeratorsOnListings

func (n *OpenBazaarNode) SetModeratorsOnListings(moderators []string) error

func (*OpenBazaarNode) SetProductImages

func (n *OpenBazaarNode) SetProductImages(base64ImageData, filename string) (*Images, error)

func (*OpenBazaarNode) SetSelfAsModerator

func (n *OpenBazaarNode) SetSelfAsModerator(moderator *pb.Moderator) error

func (*OpenBazaarNode) SignDispute

func (n *OpenBazaarNode) SignDispute(contract *pb.RicardianContract) (*pb.RicardianContract, error)

func (*OpenBazaarNode) SignDisputeResolution

func (n *OpenBazaarNode) SignDisputeResolution(contract *pb.RicardianContract) (*pb.RicardianContract, error)

func (*OpenBazaarNode) SignListing

func (n *OpenBazaarNode) SignListing(listing *pb.Listing) (*pb.RicardianContract, error)

Add our identity to the listing and sign it

func (*OpenBazaarNode) SignOrder

func (n *OpenBazaarNode) SignOrder(contract *pb.RicardianContract) (*pb.RicardianContract, error)

func (*OpenBazaarNode) SignOrderCompletion

func (n *OpenBazaarNode) SignOrderCompletion(contract *pb.RicardianContract) (*pb.RicardianContract, error)

func (*OpenBazaarNode) SignOrderConfirmation

func (n *OpenBazaarNode) SignOrderConfirmation(contract *pb.RicardianContract) (*pb.RicardianContract, error)

func (*OpenBazaarNode) SignOrderFulfillment

func (n *OpenBazaarNode) SignOrderFulfillment(contract *pb.RicardianContract) (*pb.RicardianContract, error)

func (*OpenBazaarNode) SignRefund

func (n *OpenBazaarNode) SignRefund(contract *pb.RicardianContract) (*pb.RicardianContract, error)

func (*OpenBazaarNode) Unfollow

func (n *OpenBazaarNode) Unfollow(peerId string) error

func (*OpenBazaarNode) UpdateFollow

func (n *OpenBazaarNode) UpdateFollow() error

This function updates the follow and following lists in the node's root directory

as well as adds the current follow, following, and listing counts to the profile.
We only do this when a user updates his node to avoid needing to make network calls
each time a new follower or unfollow request comes in.

func (*OpenBazaarNode) UpdateIndexHashes

func (n *OpenBazaarNode) UpdateIndexHashes(hashes map[string]string) error

Update the hashes in the index.json file

func (*OpenBazaarNode) UpdateListingIndex

func (n *OpenBazaarNode) UpdateListingIndex(contract *pb.RicardianContract) error

func (*OpenBazaarNode) UpdateProfile

func (n *OpenBazaarNode) UpdateProfile(profile *pb.Profile) error

func (*OpenBazaarNode) ValidateAndSaveRating

func (n *OpenBazaarNode) ValidateAndSaveRating(contract *pb.RicardianContract) error

func (*OpenBazaarNode) ValidateCaseContract

func (n *OpenBazaarNode) ValidateCaseContract(contract *pb.RicardianContract) []string

func (*OpenBazaarNode) ValidateDirectPaymentAddress

func (n *OpenBazaarNode) ValidateDirectPaymentAddress(order *pb.Order) error

func (*OpenBazaarNode) ValidateDisputeResolution

func (n *OpenBazaarNode) ValidateDisputeResolution(contract *pb.RicardianContract) error

func (*OpenBazaarNode) ValidateModeratedPaymentAddress

func (n *OpenBazaarNode) ValidateModeratedPaymentAddress(order *pb.Order) error

func (*OpenBazaarNode) ValidateOrder

func (n *OpenBazaarNode) ValidateOrder(contract *pb.RicardianContract) error

func (*OpenBazaarNode) ValidateOrderCompletion

func (n *OpenBazaarNode) ValidateOrderCompletion(contract *pb.RicardianContract) error

func (*OpenBazaarNode) ValidateOrderConfirmation

func (n *OpenBazaarNode) ValidateOrderConfirmation(contract *pb.RicardianContract, validateAddress bool) error

func (*OpenBazaarNode) ValidateOrderFulfillment

func (n *OpenBazaarNode) ValidateOrderFulfillment(fulfillment *pb.OrderFulfillment, contract *pb.RicardianContract) error

func (*OpenBazaarNode) ValidatePaymentAmount

func (n *OpenBazaarNode) ValidatePaymentAmount(requestedAmount, paymentAmount uint64) bool

func (*OpenBazaarNode) VerifySignatureOnDisputeOpen

func (n *OpenBazaarNode) VerifySignatureOnDisputeOpen(contract *pb.RicardianContract, peerID string) error

func (*OpenBazaarNode) VerifySignaturesOnRefund

func (n *OpenBazaarNode) VerifySignaturesOnRefund(contract *pb.RicardianContract) error

type OrderRatings

type OrderRatings struct {
	OrderId string       `json:"orderId"`
	Ratings []RatingData `json:"ratings"`
}

type PurchaseData

type PurchaseData struct {
	ShipTo               string  `json:"shipTo"`
	Address              string  `json:"address"`
	City                 string  `json:"city"`
	State                string  `json:"state"`
	PostalCode           string  `json:"postalCode"`
	CountryCode          string  `json:"countryCode"`
	AddressNotes         string  `json:"addressNotes"`
	Moderator            string  `json:"moderator"`
	Items                []item  `json:"items"`
	AlternateContactInfo string  `json:"alternateContactInfo"`
	RefundAddress        *string `json:"refundAddress"` //optional, can be left out of json
}

type RatingData

type RatingData struct {
	Slug            string `json:"slug"`
	Overall         int    `json:"overall"`
	Quality         int    `json:"quality"`
	Description     int    `json:"description"`
	DeliverySpeed   int    `json:"deliverySpeed"`
	CustomerService int    `json:"customerService"`
	Review          string `json:"rewview"`
	Anonymous       bool   `json:"anonymous"`
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL