Documentation ¶
Index ¶
- Constants
- Variables
- func ComparePassword(hash, password []byte) error
- func DecodePassword(encoded string) (decoded []byte, err error)
- func GenerateEncodedPassword(passwd string) (encoded string, err error)
- func InitDB(path string)
- func IsHostname(name string) bool
- func NewLogger(on bool) *log.Logger
- func NewSalt() ([]byte, error)
- func UpgradeDB(path string)
- type AccountCredentials
- type AccountRegistration
- type AccountRegistrationConfig
- type CapModifier
- type CapState
- type Capability
- type CapabilitySet
- type Channel
- func (channel *Channel) CanSpeak(client *Client) bool
- func (channel *Channel) CheckKey(key string) bool
- func (channel *Channel) ClientIsOperator(client *Client) bool
- func (channel *Channel) GetTopic(client *Client)
- func (channel *Channel) Id() Name
- func (channel *Channel) Invite(invitee *Client, inviter *Client)
- func (channel *Channel) IsEmpty() bool
- func (channel *Channel) IsFull() bool
- func (channel *Channel) Join(client *Client, key string)
- func (channel *Channel) Kick(client *Client, target *Client, comment string)
- func (channel *Channel) ModeString(client *Client) (str string)
- func (channel *Channel) Names(client *Client)
- func (channel *Channel) Nick() Name
- func (channel *Channel) Nicks(target *Client) []string
- func (channel *Channel) Notice(client *Client, message string)
- func (channel *Channel) Part(client *Client, message string)
- func (channel *Channel) Persist() (err error)
- func (channel *Channel) PrivMsg(client *Client, message string)
- func (channel *Channel) Quit(client *Client)
- func (channel *Channel) SetTopic(client *Client, topic string)
- func (channel *Channel) ShowMaskList(client *Client, mode ChannelMode)
- func (channel *Channel) String() string
- type ChannelMode
- type ChannelModeChange
- type ChannelModeChanges
- type ChannelModeCommand
- type ChannelModeSet
- type ChannelModes
- type ChannelNameMap
- type ChannelSet
- type Client
- func (client *Client) Active()
- func (client *Client) ChangeNickname(nickname Name)
- func (client *Client) Friends() ClientSet
- func (client *Client) HasNick() bool
- func (client *Client) HasUsername() bool
- func (c *Client) Id() Name
- func (client *Client) Idle()
- func (client *Client) IdleSeconds() uint64
- func (client *Client) IdleTime() time.Duration
- func (c *Client) ModeString() (str string)
- func (c *Client) Nick() Name
- func (client *Client) Notice(text string)
- func (client *Client) Quit(message string)
- func (client *Client) Register()
- func (client *Client) Reply(reply string) error
- func (client *Client) RplISupport()
- func (target *Client) RplList(channel *Channel)
- func (target *Client) RplWhoReply(channel *Channel, client *Client)
- func (client *Client) Send(tags *map[string]ircmsg.TagValue, prefix string, command string, ...) error
- func (client *Client) SendFromClient(from *Client, tags *map[string]ircmsg.TagValue, prefix string, command string, ...) error
- func (client *Client) SetNickname(nickname Name)
- func (client *Client) SignonTime() int64
- func (c *Client) String() string
- func (client *Client) Touch()
- func (c *Client) UserHost() Name
- func (client *Client) WhoisChannelsNames(target *Client) []string
- type ClientAccount
- type ClientLookupSet
- func (clients *ClientLookupSet) Add(client *Client) error
- func (clients *ClientLookupSet) Find(userhost Name) *Client
- func (clients *ClientLookupSet) FindAll(userhost Name) (set ClientSet)
- func (clients *ClientLookupSet) Get(nick Name) *Client
- func (clients *ClientLookupSet) Remove(client *Client) error
- type ClientSet
- type ClientSocket
- type Command
- type Config
- type ISupportList
- type Identifiable
- type Limits
- type Logging
- type MemberSet
- type Message
- type MessageInfoKey
- type MessageType
- type MessageVerb
- type ModeChange
- type ModeChanges
- type ModeOp
- type Name
- type PassConfig
- type PasswordManager
- type Server
- type Socket
- type TLSListenConfig
- type Text
- type UserMaskSet
- type UserMode
- type UserModes
- type WSContainer
- type WhoWas
- type WhoWasList
Constants ¶
const ( IDLE_TIMEOUT = time.Minute + time.Second*30 // how long before a client is considered idle QUIT_TIMEOUT = time.Minute // how long after idle before a client is kicked IdentTimeoutSeconds = 8 )
const ( SEM_VER = "0.1.0" CRLF = "\r\n" MAX_REPLY_LEN = 512 - len(CRLF) )
const ( RPL_WELCOME = "001" RPL_YOURHOST = "002" RPL_CREATED = "003" RPL_MYINFO = "004" RPL_ISUPPORT = "005" RPL_BOUNCE = "010" RPL_TRACELINK = "200" RPL_TRACECONNECTING = "201" RPL_TRACEHANDSHAKE = "202" RPL_TRACEUNKNOWN = "203" RPL_TRACEOPERATOR = "204" RPL_TRACEUSER = "205" RPL_TRACESERVER = "206" RPL_TRACESERVICE = "207" RPL_TRACENEWTYPE = "208" RPL_TRACECLASS = "209" RPL_TRACERECONNECT = "210" RPL_STATSLINKINFO = "211" RPL_STATSCOMMANDS = "212" RPL_ENDOFSTATS = "219" RPL_UMODEIS = "221" RPL_SERVLIST = "234" RPL_SERVLISTEND = "235" RPL_STATSUPTIME = "242" RPL_STATSOLINE = "243" RPL_LUSERCLIENT = "251" RPL_LUSEROP = "252" RPL_LUSERUNKNOWN = "253" RPL_LUSERCHANNELS = "254" RPL_LUSERME = "255" RPL_ADMINME = "256" RPL_ADMINLOC1 = "257" RPL_ADMINLOC2 = "258" RPL_ADMINEMAIL = "259" RPL_TRACELOG = "261" RPL_TRACEEND = "262" RPL_TRYAGAIN = "263" RPL_WHOISCERTFP = "276" RPL_AWAY = "301" RPL_USERHOST = "302" RPL_ISON = "303" RPL_UNAWAY = "305" RPL_NOWAWAY = "306" RPL_WHOISUSER = "311" RPL_WHOISSERVER = "312" RPL_WHOISOPERATOR = "313" RPL_WHOWASUSER = "314" RPL_ENDOFWHO = "315" RPL_WHOISIDLE = "317" RPL_ENDOFWHOIS = "318" RPL_WHOISCHANNELS = "319" RPL_LIST = "322" RPL_LISTEND = "323" RPL_CHANNELMODEIS = "324" RPL_UNIQOPIS = "325" RPL_CHANNELCREATED = "329" RPL_NOTOPIC = "331" RPL_TOPIC = "332" RPL_TOPICTIME = "333" RPL_INVITING = "341" RPL_SUMMONING = "342" RPL_INVITELIST = "346" RPL_ENDOFINVITELIST = "347" RPL_EXCEPTLIST = "348" RPL_ENDOFEXCEPTLIST = "349" RPL_VERSION = "351" RPL_WHOREPLY = "352" RPL_NAMREPLY = "353" RPL_LINKS = "364" RPL_ENDOFLINKS = "365" RPL_ENDOFNAMES = "366" RPL_BANLIST = "367" RPL_ENDOFBANLIST = "368" RPL_ENDOFWHOWAS = "369" RPL_INFO = "371" RPL_MOTD = "372" RPL_ENDOFINFO = "374" RPL_MOTDSTART = "375" RPL_ENDOFMOTD = "376" RPL_YOUREOPER = "381" RPL_REHASHING = "382" RPL_YOURESERVICE = "383" RPL_TIME = "391" RPL_USERSSTART = "392" RPL_USERS = "393" RPL_ENDOFUSERS = "394" RPL_NOUSERS = "395" ERR_UNKNOWNERROR = "400" ERR_NOSUCHNICK = "401" ERR_NOSUCHSERVER = "402" ERR_NOSUCHCHANNEL = "403" ERR_CANNOTSENDTOCHAN = "404" ERR_TOOMANYCHANNELS = "405" ERR_WASNOSUCHNICK = "406" ERR_TOOMANYTARGETS = "407" ERR_NOSUCHSERVICE = "408" ERR_NOORIGIN = "409" ERR_INVALIDCAPCMD = "410" ERR_NORECIPIENT = "411" ERR_NOTEXTTOSEND = "412" ERR_NOTOPLEVEL = "413" ERR_WILDTOPLEVEL = "414" ERR_BADMASK = "415" ERR_UNKNOWNCOMMAND = "421" ERR_NOMOTD = "422" ERR_NOADMININFO = "423" ERR_FILEERROR = "424" ERR_NONICKNAMEGIVEN = "431" ERR_ERRONEUSNICKNAME = "432" ERR_NICKNAMEINUSE = "433" ERR_NICKCOLLISION = "436" ERR_UNAVAILRESOURCE = "437" ERR_REG_UNAVAILABLE = "440" ERR_USERNOTINCHANNEL = "441" ERR_NOTONCHANNEL = "442" ERR_USERONCHANNEL = "443" ERR_NOLOGIN = "444" ERR_SUMMONDISABLED = "445" ERR_USERSDISABLED = "446" ERR_NOTREGISTERED = "451" ERR_NEEDMOREPARAMS = "461" ERR_ALREADYREGISTRED = "462" ERR_NOPERMFORHOST = "463" ERR_PASSWDMISMATCH = "464" ERR_YOUREBANNEDCREEP = "465" ERR_YOUWILLBEBANNED = "466" ERR_KEYSET = "467" ERR_CHANNELISFULL = "471" ERR_UNKNOWNMODE = "472" ERR_INVITEONLYCHAN = "473" ERR_BANNEDFROMCHAN = "474" ERR_BADCHANNELKEY = "475" ERR_BADCHANMASK = "476" ERR_NOCHANMODES = "477" ERR_BANLISTFULL = "478" ERR_NOPRIVILEGES = "481" ERR_CHANOPRIVSNEEDED = "482" ERR_CANTKILLSERVER = "483" ERR_RESTRICTED = "484" ERR_UNIQOPPRIVSNEEDED = "485" ERR_NOOPERHOST = "491" ERR_UMODEUNKNOWNFLAG = "501" ERR_USERSDONTMATCH = "502" RPL_LOGGEDIN = "900" RPL_LOGGEDOUT = "901" ERR_NICKLOCKED = "902" RPL_SASLSUCCESS = "903" ERR_SASLFAIL = "904" ERR_SASLTOOLONG = "905" ERR_SASLABORTED = "906" ERR_SASLALREADY = "907" RPL_SASLMECHS = "908" RPL_REGISTRATION_SUCCESS = "920" ERR_ACCOUNT_ALREADY_EXISTS = "921" ERR_REG_UNSPECIFIED_ERROR = "922" RPL_VERIFYSUCCESS = "923" ERR_ACCOUNT_ALREADY_VERIFIED = "924" ERR_ACCOUNT_INVALID_VERIFY_CODE = "925" RPL_REG_VERIFICATION_REQUIRED = "927" ERR_REG_INVALID_CRED_TYPE = "928" ERR_REG_INVALID_CALLBACK = "929" )
Variables ¶
var ( // EnabledSaslMechanisms contains the SASL mechanisms that exist and that we support. // This can be moved to some other data structure/place if we need to load/unload mechs later. EnabledSaslMechanisms = map[string]func(*Server, *Client, string, []byte) bool{ "PLAIN": authPlainHandler, "EXTERNAL": authExternalHandler, } // NoAccount is a placeholder which means that the user is not logged into an account. NoAccount = ClientAccount{ Name: "*", } )
var ( ErrNickMissing = errors.New("nick missing") ErrNicknameInUse = errors.New("nickname in use") ErrNicknameMismatch = errors.New("nickname mismatch") )
var ( SupportedChannelModes = ChannelModes{ BanMask, ExceptMask, InviteMask, InviteOnly, Key, NoOutside, OpOnlyTopic, Persistent, Secret, UserLimit, } DefaultChannelModes = ChannelModes{ NoOutside, OpOnlyTopic, } // ChannelPrivModes holds the list of modes that are privileged, ie founder/op/halfop, in order. // voice is not in this list because it cannot perform channel operator actions. ChannelPrivModes = ChannelModes{ ChannelFounder, ChannelAdmin, ChannelOperator, Halfop, } ChannelModePrefixes = map[ChannelMode]string{ ChannelFounder: "~", ChannelAdmin: "&", ChannelOperator: "@", Halfop: "%", Voice: "+", } )
var ( ChannelNameExpr = regexp.MustCompile("^$") NicknameExpr = regexp.MustCompile("^$") )
var Commands = map[string]Command{ "AUTHENTICATE": { // contains filtered or unexported fields }, "AWAY": { // contains filtered or unexported fields }, "CAP": { // contains filtered or unexported fields }, "DEBUG": { // contains filtered or unexported fields }, "INVITE": { // contains filtered or unexported fields }, "ISON": { // contains filtered or unexported fields }, "JOIN": { // contains filtered or unexported fields }, "KICK": { // contains filtered or unexported fields }, "KILL": { // contains filtered or unexported fields }, "LIST": { // contains filtered or unexported fields }, "MODE": { // contains filtered or unexported fields }, "MOTD": { // contains filtered or unexported fields }, "NAMES": { // contains filtered or unexported fields }, "NICK": { // contains filtered or unexported fields }, "NOTICE": { // contains filtered or unexported fields }, "OPER": { // contains filtered or unexported fields }, "PART": { // contains filtered or unexported fields }, "PASS": { // contains filtered or unexported fields }, "PING": { // contains filtered or unexported fields }, "PONG": { // contains filtered or unexported fields }, "PRIVMSG": { // contains filtered or unexported fields }, "PROXY": { // contains filtered or unexported fields }, "SANICK": { // contains filtered or unexported fields }, "QUIT": { // contains filtered or unexported fields }, "REG": { // contains filtered or unexported fields }, "TIME": { // contains filtered or unexported fields }, "TOPIC": { // contains filtered or unexported fields }, "USER": { // contains filtered or unexported fields }, "VERSION": { // contains filtered or unexported fields }, "WHO": { // contains filtered or unexported fields }, "WHOIS": { // contains filtered or unexported fields }, "WHOWAS": { // contains filtered or unexported fields }, }
Commands holds all commands executable by a client connected to us.
var (
EmptyPasswordError = errors.New("empty password")
)
var (
Log = NewLogging("warn")
)
var ( SERVER_SIGNALS = []os.Signal{ syscall.SIGINT, syscall.SIGHUP, syscall.SIGTERM, syscall.SIGQUIT, } )
var ( SupportedCapabilities = CapabilitySet{ AccountTag: true, AwayNotify: true, ExtendedJoin: true, MultiPrefix: true, SASL: true, ServerTime: true, UserhostInNames: true, } )
var ( SupportedUserModes = UserModes{ Away, Invisible, Operator, } )
var (
TIMEOUT_STATED_SECONDS = strconv.Itoa(int((IDLE_TIMEOUT + QUIT_TIMEOUT).Seconds()))
)
var (
VER = fmt.Sprintf("oragono-%s", SEM_VER)
)
Functions ¶
func ComparePassword ¶
func DecodePassword ¶
func GenerateEncodedPassword ¶
func IsHostname ¶
Types ¶
type AccountCredentials ¶
type AccountCredentials struct { PassphraseSalt []byte PassphraseHash []byte Certificate string // fingerprint }
AccountCredentials stores the various methods for verifying accounts.
type AccountRegistration ¶
type AccountRegistration struct { Enabled bool EnabledCallbacks []string EnabledCredentialTypes []string }
AccountRegistration manages the registration of accounts.
func NewAccountRegistration ¶
func NewAccountRegistration(config AccountRegistrationConfig) (accountReg AccountRegistration)
NewAccountRegistration returns a new AccountRegistration, configured correctly.
type AccountRegistrationConfig ¶
type AccountRegistrationConfig struct { Enabled bool EnabledCallbacks []string `yaml:"enabled-callbacks"` Callbacks struct { Mailto struct { Server string Port int TLS struct { Enabled bool InsecureSkipVerify bool `yaml:"insecure_skip_verify"` ServerName string `yaml:"servername"` } Username string Password string Sender string VerifyMessageSubject string `yaml:"verify-message-subject"` VerifyMessage string `yaml:"verify-message"` } } }
type CapModifier ¶
type CapModifier rune
CapModifiers are indicators showing the state of a capability after a REQ or ACK.
const ( Ack CapModifier = '~' Disable CapModifier = '-' Sticky CapModifier = '=' )
func (CapModifier) String ¶
func (mod CapModifier) String() string
type Capability ¶
type Capability string
Capabilities are optional features a client may request from a server.
const ( AccountTag Capability = "account-tag" AwayNotify Capability = "away-notify" ExtendedJoin Capability = "extended-join" MultiPrefix Capability = "multi-prefix" SASL Capability = "sasl" ServerTime Capability = "server-time" UserhostInNames Capability = "userhost-in-names" )
func (Capability) String ¶
func (capability Capability) String() string
type CapabilitySet ¶
type CapabilitySet map[Capability]bool
func (CapabilitySet) DisableString ¶
func (set CapabilitySet) DisableString() string
func (CapabilitySet) String ¶
func (set CapabilitySet) String() string
type Channel ¶
type Channel struct {
// contains filtered or unexported fields
}
func NewChannel ¶
NewChannel creates a new channel from a `Server` and a `name` string, which must be unique on the server.
func (*Channel) ClientIsOperator ¶
func (*Channel) ModeString ¶
<mode> <mode params>
func (*Channel) ShowMaskList ¶
func (channel *Channel) ShowMaskList(client *Client, mode ChannelMode)
type ChannelMode ¶
type ChannelMode rune
channel mode flags
const ( ChannelFounder ChannelMode = 'q' // arg ChannelAdmin ChannelMode = 'a' // arg ChannelOperator ChannelMode = 'o' // arg Halfop ChannelMode = 'h' // arg Voice ChannelMode = 'v' // arg BanMask ChannelMode = 'b' // arg ExceptMask ChannelMode = 'e' // arg InviteMask ChannelMode = 'I' // arg InviteOnly ChannelMode = 'i' // flag Key ChannelMode = 'k' // flag arg Moderated ChannelMode = 'm' // flag NoOutside ChannelMode = 'n' // flag OpOnlyTopic ChannelMode = 't' // flag Persistent ChannelMode = 'P' // flag ReOp ChannelMode = 'r' // flag Secret ChannelMode = 's' // flag UserLimit ChannelMode = 'l' // flag arg )
func (ChannelMode) String ¶
func (mode ChannelMode) String() string
type ChannelModeChange ¶
type ChannelModeChange struct {
// contains filtered or unexported fields
}
func (*ChannelModeChange) String ¶
func (change *ChannelModeChange) String() (str string)
type ChannelModeChanges ¶
type ChannelModeChanges []*ChannelModeChange
func (ChannelModeChanges) String ¶
func (changes ChannelModeChanges) String() string
type ChannelModeCommand ¶
type ChannelModeCommand struct {
// contains filtered or unexported fields
}
type ChannelModeSet ¶
type ChannelModeSet map[ChannelMode]bool
func (ChannelModeSet) Prefixes ¶
func (modes ChannelModeSet) Prefixes(isMultiPrefix bool) string
Prefixes returns a list of prefixes for the given set of channel modes.
func (ChannelModeSet) String ¶
func (set ChannelModeSet) String() string
type ChannelModes ¶
type ChannelModes []ChannelMode
func (ChannelModes) String ¶
func (modes ChannelModes) String() string
type ChannelNameMap ¶
func (ChannelNameMap) Add ¶
func (channels ChannelNameMap) Add(channel *Channel) error
func (ChannelNameMap) Get ¶
func (channels ChannelNameMap) Get(name Name) *Channel
func (ChannelNameMap) Remove ¶
func (channels ChannelNameMap) Remove(channel *Channel) error
type ChannelSet ¶
func (ChannelSet) Add ¶
func (channels ChannelSet) Add(channel *Channel)
func (ChannelSet) First ¶
func (channels ChannelSet) First() *Channel
func (ChannelSet) Remove ¶
func (channels ChannelSet) Remove(channel *Channel)
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
func (*Client) ChangeNickname ¶
func (*Client) HasUsername ¶
func (*Client) IdleSeconds ¶
func (*Client) RplISupport ¶
func (client *Client) RplISupport()
func (*Client) RplWhoReply ¶
<channel> <user> <host> <server> <nick> ( "H" / "G" ) ["*"] [ ( "@" / "+" ) ] :<hopcount> <real name>
func (*Client) Send ¶
func (client *Client) Send(tags *map[string]ircmsg.TagValue, prefix string, command string, params ...string) error
Send sends an IRC line to the client.
func (*Client) SendFromClient ¶
func (client *Client) SendFromClient(from *Client, tags *map[string]ircmsg.TagValue, prefix string, command string, params ...string) error
SendFromClient sends an IRC line coming from a specific client. Adds account-tag to the line as well.
func (*Client) SetNickname ¶
func (*Client) SignonTime ¶
func (*Client) WhoisChannelsNames ¶
type ClientAccount ¶
type ClientAccount struct { // Name of the account. Name string // RegisteredAt represents the time that the account was registered. RegisteredAt time.Time // Clients that are currently logged into this account (useful for notifications). Clients []*Client }
ClientAccount represents a user account.
type ClientLookupSet ¶
type ClientLookupSet struct {
// contains filtered or unexported fields
}
func NewClientLookupSet ¶
func NewClientLookupSet() *ClientLookupSet
func (*ClientLookupSet) Add ¶
func (clients *ClientLookupSet) Add(client *Client) error
func (*ClientLookupSet) Find ¶
func (clients *ClientLookupSet) Find(userhost Name) *Client
func (*ClientLookupSet) FindAll ¶
func (clients *ClientLookupSet) FindAll(userhost Name) (set ClientSet)
func (*ClientLookupSet) Get ¶
func (clients *ClientLookupSet) Get(nick Name) *Client
func (*ClientLookupSet) Remove ¶
func (clients *ClientLookupSet) Remove(client *Client) error
type ClientSocket ¶
type ClientSocket struct { ReceiveEvents chan Message SendLines chan string // contains filtered or unexported fields }
ClientSocket listens to a socket using the IRC protocol, processes events, and also sends IRC lines out of that socket.
func NewClientSocket ¶
func NewClientSocket(conn net.Conn, client Client) ClientSocket
NewClientSocket returns a new ClientSocket.
func (*ClientSocket) RunEvents ¶
func (cs *ClientSocket) RunEvents()
RunEvents handles received IRC lines and processes incoming commands.
func (*ClientSocket) RunSocketListener ¶
func (cs *ClientSocket) RunSocketListener()
RunSocketListener receives lines from the IRC socket.
func (*ClientSocket) RunSocketSender ¶
func (cs *ClientSocket) RunSocketSender()
RunSocketSender sends lines to the IRC socket.
func (*ClientSocket) Send ¶
func (cs *ClientSocket) Send(tags *map[string]ircmsg.TagValue, prefix string, command string, params ...string) error
Send sends an IRC line to the listener.
func (*ClientSocket) Start ¶
func (cs *ClientSocket) Start()
Start creates and starts running the necessary event loops.
type Command ¶
type Command struct {
// contains filtered or unexported fields
}
Command represents a command accepted from a client.
type Config ¶
type Config struct { Network struct { Name string } Server struct { PassConfig Password string Name string Listen []string Wslisten string `yaml:"ws-listen"` TLSListeners map[string]*TLSListenConfig `yaml:"tls-listeners"` CheckIdent bool `yaml:"check-ident"` Log string MOTD string ProxyAllowedFrom []string `yaml:"proxy-allowed-from"` } Datastore struct { Path string } Registration struct { Accounts AccountRegistrationConfig } Operator map[string]*PassConfig Limits struct { NickLen int `yaml:"nicklen"` ChannelLen int `yaml:"channellen"` AwayLen int `yaml:"awaylen"` KickLen int `yaml:"kicklen"` TopicLen int `yaml:"topiclen"` WhowasEntries uint `yaml:"whowas-entries"` } }
func LoadConfig ¶
type ISupportList ¶
ISupportList holds a list of ISUPPORT tokens
func NewISupportList ¶
func NewISupportList() *ISupportList
NewISupportList returns a new ISupportList
func (*ISupportList) Add ¶
func (il *ISupportList) Add(name string, value string)
Add adds an RPL_ISUPPORT token to our internal list
func (*ISupportList) AddNoValue ¶
func (il *ISupportList) AddNoValue(name string)
AddNoValue adds an RPL_ISUPPORT token that does not have a value
func (*ISupportList) RegenerateCachedReply ¶
func (il *ISupportList) RegenerateCachedReply()
RegenerateCachedReply regenerates the cached RPL_ISUPPORT reply
type Identifiable ¶
type MemberSet ¶
type MemberSet map[*Client]ChannelModeSet
func (MemberSet) AnyHasMode ¶
func (members MemberSet) AnyHasMode(mode ChannelMode) bool
type Message ¶
type Message struct { Type MessageType Verb MessageVerb Info map[MessageInfoKey]interface{} }
Message represents an internal message passed by oragono.
func NewMessage ¶
func NewMessage(mt MessageType, mv MessageVerb) Message
NewMessage returns a new Message. This is purely a convenience function.
type MessageInfoKey ¶
type MessageInfoKey int
MessageInfoKey represents a key in the Info attribute of a Message.
const ( // LineIK represents an IRC line message info key LineIK MessageInfoKey = iota )
type MessageType ¶
type MessageType int
MessageType represents the type of message it is.
const ( // LineMT represents an IRC line Message Type LineMT MessageType = iota )
type MessageVerb ¶
type MessageVerb int
MessageVerb represents the verb (i.e. the specific command, etc) of a message.
const ( // NoMV represents no Message Verb NoMV MessageVerb = iota )
type ModeChange ¶
type ModeChange struct {
// contains filtered or unexported fields
}
func (*ModeChange) String ¶
func (change *ModeChange) String() string
type ModeChanges ¶
type ModeChanges []*ModeChange
func (ModeChanges) String ¶
func (changes ModeChanges) String() string
type Name ¶
type Name string
Names are normalized and canonicalized to remove formatting marks and simplify usage. They are things like hostnames and usermasks.
func AddrLookupHostname ¶
func ExpandUserHost ¶
func LookupHostname ¶
func (Name) IsNickname ¶
type PassConfig ¶
type PassConfig struct {
Password string
}
func (*PassConfig) PasswordBytes ¶
func (conf *PassConfig) PasswordBytes() []byte
type PasswordManager ¶
type PasswordManager struct {
// contains filtered or unexported fields
}
PasswordManager supports the hashing and comparing of passwords with the given salt.
func NewPasswordManager ¶
func NewPasswordManager(salt []byte) PasswordManager
NewPasswordManager returns a new PasswordManager with the given salt.
func (*PasswordManager) CompareHashAndPassword ¶
func (pwm *PasswordManager) CompareHashAndPassword(hashedPassword []byte, specialSalt []byte, password string) error
CompareHashAndPassword compares a hashed password with its possible plaintext equivalent. Returns nil on success, or an error on failure.
func (*PasswordManager) GenerateFromPassword ¶
func (pwm *PasswordManager) GenerateFromPassword(specialSalt []byte, password string) ([]byte, error)
GenerateFromPassword encrypts the given password.
type Socket ¶
type Socket struct { Closed bool // contains filtered or unexported fields }
Socket represents an IRC socket.
func (*Socket) Close ¶
func (socket *Socket) Close()
Close stops a Socket from being able to send/receive any more data.
type TLSListenConfig ¶
TLSListenConfig defines configuration options for listening on TLS
type Text ¶
type Text string
Text is PRIVMSG, NOTICE, or TOPIC data. It's canonicalized UTF8 data to simplify but keeps all formatting.
type UserMaskSet ¶
type UserMaskSet struct {
// contains filtered or unexported fields
}
TODO(dan): move this over to generally using glob syntax instead? kinda more expected in normal ban/etc masks, though regex is useful (probably as an extban?)
func NewUserMaskSet ¶
func NewUserMaskSet() *UserMaskSet
func (*UserMaskSet) Add ¶
func (set *UserMaskSet) Add(mask Name) bool
func (*UserMaskSet) AddAll ¶
func (set *UserMaskSet) AddAll(masks []Name) (added bool)
func (*UserMaskSet) Match ¶
func (set *UserMaskSet) Match(userhost Name) bool
func (*UserMaskSet) Remove ¶
func (set *UserMaskSet) Remove(mask Name) bool
func (*UserMaskSet) String ¶
func (set *UserMaskSet) String() string
type WSContainer ¶
func (WSContainer) SetDeadline ¶
func (this WSContainer) SetDeadline(t time.Time) error
type WhoWasList ¶
type WhoWasList struct {
// contains filtered or unexported fields
}
func NewWhoWasList ¶
func NewWhoWasList(size uint) *WhoWasList
func (*WhoWasList) Append ¶
func (list *WhoWasList) Append(client *Client)
func (*WhoWasList) Each ¶
func (list *WhoWasList) Each() <-chan *WhoWas
Iterate the buffer in reverse.
Source Files ¶
- accounts.go
- capability.go
- channel.go
- client.go
- client_lookup_set.go
- clientsocket.go
- commands.go
- config.go
- constants.go
- database.go
- debug.go
- isupport.go
- logging.go
- messages.go
- modes.go
- net.go
- nickname.go
- numerics.go
- password.go
- password_new.go
- registration.go
- server.go
- socket.go
- strings.go
- types.go
- websocket.go
- whowas.go