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