const ( OperationTypeRemoveMessageStr string = "RemoveMessage" OperationTypeBanUserStr string = "BanUser" )
const ( OperationReasonProtocolViolationStr string = "ProtocolViolation" OperationReasonSpamStr string = "SPAM" OperationReasonOfftopicStr string = "Offtopic" OperationReasonAbuseStr string = "Abuse" OperationReasonDuplicateStr string = "Duplicate" )
func IsNicknameValid(nickname string) bool
type Descriptor struct { Type Type `json:"type"` ID ID `json:"id"` }
Entity is a logical unit of data for communication between peers.
type Entity interface { Type() Type ID() *ID ShortID() string String() string }
type EntityProvider interface { AttachObserver(c chan<- Entity) DetachObserver(c chan<- Entity) }
type ID [32]byte
var ZeroID ID
func NewID(data []byte) ID
func (i ID) MarshalJSON() ([]byte, error)
func (i *ID) ParseSlice(s []byte) error
func (i *ID) ParseString(s string) error
func (i *ID) Shorten() string
func (i *ID) String() string
func (i *ID) UnmarshalJSON(b []byte) error
Message is some text information published by a user.
type Message struct { UnsignedMessage Sig crypto.Signature }
func EmergeMessage( subject string, text string, authorID *ID, parentID *ID, signer *crypto.Signer, topic subs.Topic, ) (*Message, error)
EmergeMessage creates a new message. It should be called when owner wants to post a new message. Signature will be created using the provided signer.
func NewMessage( subject string, text string, authorID *ID, parentID *ID, dateWritten time.Time, sig crypto.Signature, topic subs.Topic, ) (*Message, error)
NewMessage composes a new message entity object from the specified data.
func (m *Message) Copy() *Message
func (m *Message) IsReply() bool
func (m *Message) IsSigValid(pubKey *crypto.PublicKey) bool
func (m *Message) IsUnsignedPartValid() bool
func (m *Message) IsValid(pubKey *crypto.PublicKey) bool
You have either Topic or ParentID, never both.
type MessageContent struct { Subject string Text string AuthorID ID ParentID ID DateWritten time.Time Topic subs.Topic }
func (mc *MessageContent) ToID() *ID
Operation is an action performed on a user or a message.
type Operation struct { UnsignedOperation Sig crypto.Signature }
func EmergeOperation( typ OperationType, reason OperationReason, comment string, authorID *ID, objectID *ID, signer *crypto.Signer, ) (*Operation, error)
EmergeOperation creates a new operation. It should be called when owner wants to perform a new operation. Signature will be created using the provided signer.
func NewOperation( typ OperationType, reason OperationReason, comment string, authorID *ID, objectID *ID, datePerformed time.Time, sig crypto.Signature, ) (*Operation, error)
NewOperation composes a new operation entity object from the specified data.
func (o *Operation) IsSigValid(pubKey *crypto.PublicKey) bool
func (o *Operation) IsUnsignedPartValid() bool
func (o *Operation) IsValid(pubKey *crypto.PublicKey) bool
type OperationContent struct { Type OperationType Reason OperationReason Comment string AuthorID ID ObjectID ID DatePerformed time.Time }
func (oc *OperationContent) ToID() *ID
type OperationReason int
const ( OperationReasonProtocolViolation OperationReason = iota OperationReasonSpam OperationReasonOfftopic OperationReasonAbuse OperationReasonDuplicate )
func (or *OperationReason) ParseString(s string) error
func (or OperationReason) String() string
type OperationType int
const ( OperationTypeRemoveMessage OperationType = iota OperationTypeBanUser )
func (ot OperationType) String() string
type Type int
const ( // User registers, post messages and performs operations. TypeUser Type = iota // Some information published by a user. TypeMessage // An action performed on a user or a message. TypeOperation )
type UnsignedMessage struct { Descriptor MessageContent }
func (um *UnsignedMessage) ID() *ID
func (um *UnsignedMessage) ShortID() string
func (um *UnsignedMessage) String() string
func (um *UnsignedMessage) Type() Type
type UnsignedOperation struct { Descriptor OperationContent }
func (uo *UnsignedOperation) ID() *ID
func (uo *UnsignedOperation) OperationType() OperationType
func (uo *UnsignedOperation) ShortID() string
func (uo *UnsignedOperation) String() string
func (uo *UnsignedOperation) Type() Type
type UnsignedUser struct { Descriptor UserContent }
func (uu *UnsignedUser) String() string
User identifies and describes a user. It's suitable for sending to the network. Implements Entity interface.
type User struct { UnsignedUser Sig crypto.Signature }
func EmergeUser( nickname string, info string, proof crypto.ProofOfWork, signer *crypto.Signer, ) (*User, error)
EmergeUser creates a new user entity. It should only be called when signature is not known yet. Signature will be created using the provided signer.
func NewUser( nickname string, info string, pubkey *crypto.PublicKey, proof crypto.ProofOfWork, regdate time.Time, sig crypto.Signature, ) *User
func (u *User) Dump() string
func (u *User) ID() *ID
func (u *User) IsValid() bool
func (u *User) ShortID() string
func (u *User) Type() Type
type UserContent struct { PubKey crypto.PublicKey Proof crypto.ProofOfWork Nickname string Info string RegDate time.Time }
func (uc *UserContent) ToID() *ID