Documentation ¶
Index ¶
- Constants
- Variables
- func ApplyUserModeChanges(client *Client, changes modes.ModeChanges, force bool) modes.ModeChanges
- func Casefold(str string) (string, error)
- func CasefoldChannel(name string) (string, error)
- func CasefoldName(name string) (string, error)
- func ExpandUserHost(userhost string) (expanded string)
- func GenerateHelpIndex(lm *languages.Manager, forOpers bool) map[string]string
- func GenerateHelpIndices(lm *languages.Manager) error
- func GetHelpIndex(languages []string, helpIndex map[string]string) string
- func GetLabel(msg ircmsg.IrcMessage) string
- func IncompatibleSchemaError(currentVersion string) (result *incompatibleSchemaError)
- func InitDB(path string)
- func NewClient(server *Server, conn net.Conn, isTLS bool)
- func OpenDatabase(config *Config) (*buntdb.DB, error)
- func ParseDefaultChannelModes(rawModes *string) modes.Modes
- func UpgradeDB(config *Config) (err error)
- type AccountConfig
- type AccountCredentials
- type AccountManager
- func (am *AccountManager) AccountToClients(account string) (result []*Client)
- func (am *AccountManager) AuthenticateByCertFP(client *Client) error
- func (am *AccountManager) AuthenticateByPassphrase(client *Client, accountName string, passphrase string) error
- func (am *AccountManager) LoadAccount(accountName string) (result ClientAccount, err error)
- func (am *AccountManager) Login(client *Client, account ClientAccount)
- func (am *AccountManager) Logout(client *Client)
- func (am *AccountManager) NickToAccount(nick string) string
- func (am *AccountManager) Register(client *Client, account string, callbackNamespace string, callbackValue string, ...) error
- func (am *AccountManager) SetNickReserved(client *Client, nick string, saUnreserve bool, reserve bool) error
- func (am *AccountManager) Unregister(account string) error
- func (am *AccountManager) VHostApprove(account string) (result VHostInfo, err error)
- func (am *AccountManager) VHostListRequests(limit int) (requests []PendingVHostRequest, total int)
- func (am *AccountManager) VHostReject(account string, reason string) (result VHostInfo, err error)
- func (am *AccountManager) VHostRequest(account string, vhost string) (result VHostInfo, err error)
- func (am *AccountManager) VHostSet(account string, vhost string) (result VHostInfo, err error)
- func (am *AccountManager) VHostSetEnabled(client *Client, enabled bool) (result VHostInfo, err error)
- func (am *AccountManager) Verify(client *Client, account string, code string) error
- type AccountRegistrationConfig
- type Batch
- type BatchManager
- type Channel
- func (channel *Channel) ApplyChannelModeChanges(client *Client, isSamode bool, changes modes.ModeChanges, rb *ResponseBuffer) modes.ModeChanges
- func (channel *Channel) CanSpeak(client *Client) bool
- func (channel *Channel) CheckKey(key string) bool
- func (channel *Channel) ClientHasPrivsOver(client *Client, target *Client) bool
- func (channel *Channel) ClientIsAtLeast(client *Client, permission modes.Mode) bool
- func (channel *Channel) ClientPrefixes(client *Client, isMultiPrefix bool) string
- func (channel *Channel) ExportRegistration(includeFlags uint) (info RegisteredChannel)
- func (channel *Channel) Founder() string
- func (channel *Channel) Invite(invitee *Client, inviter *Client, rb *ResponseBuffer)
- func (channel *Channel) IsEmpty() bool
- func (channel *Channel) IsFull() bool
- func (channel *Channel) IsRegistered() bool
- func (channel *Channel) Join(client *Client, key string, isSajoin bool, rb *ResponseBuffer)
- func (channel *Channel) Key() string
- func (channel *Channel) Kick(client *Client, target *Client, comment string, rb *ResponseBuffer)
- func (channel *Channel) Members() (result []*Client)
- func (channel *Channel) Name() string
- func (channel *Channel) NameCasefolded() string
- func (channel *Channel) Names(client *Client, rb *ResponseBuffer)
- func (channel *Channel) Part(client *Client, message string, rb *ResponseBuffer)
- func (channel *Channel) ProcessAccountToUmodeChange(client *Client, change modes.ModeChange) (results []modes.ModeChange, err error)
- func (channel *Channel) Quit(client *Client)
- func (channel *Channel) SendTopic(client *Client, rb *ResponseBuffer)
- func (channel *Channel) SetRegistered(founder string) error
- func (channel *Channel) SetTopic(client *Client, topic string, rb *ResponseBuffer)
- func (channel *Channel) SetUnregistered()
- func (channel *Channel) ShowMaskList(client *Client, mode modes.Mode, rb *ResponseBuffer)
- func (channel *Channel) SplitNotice(msgid string, minPrefix *modes.Mode, ...)
- func (channel *Channel) SplitPrivMsg(msgid string, minPrefix *modes.Mode, ...)
- func (channel *Channel) TagMsg(msgid string, minPrefix *modes.Mode, ...)
- func (channel *Channel) UserLimit() uint64
- type ChannelManager
- func (cm *ChannelManager) Channels() (result []*Channel)
- func (cm *ChannelManager) Cleanup(channel *Channel)
- func (cm *ChannelManager) Get(name string) *Channel
- func (cm *ChannelManager) Join(client *Client, name string, key string, isSajoin bool, rb *ResponseBuffer) error
- func (cm *ChannelManager) Len() int
- func (cm *ChannelManager) Part(client *Client, name string, message string, rb *ResponseBuffer) error
- func (cm *ChannelManager) Rename(name string, newname string) error
- type ChannelRegistrationConfig
- type ChannelRegistry
- func (reg *ChannelRegistry) Delete(casefoldedName string, info RegisteredChannel)
- func (reg *ChannelRegistry) LoadChannel(nameCasefolded string) (info *RegisteredChannel)
- func (reg *ChannelRegistry) Rename(channel *Channel, casefoldedOldName string)
- func (reg *ChannelRegistry) StoreChannel(channel *Channel, includeFlags uint)
- type ChannelSet
- type Client
- func (client *Client) Account() string
- func (client *Client) AccountName() string
- func (client *Client) Active()
- func (client *Client) AllNickmasks() []string
- func (client *Client) ApplyProxiedIP(proxiedIP string, tls bool) (success bool)
- func (client *Client) Authorized() bool
- func (client *Client) Channels() (result []*Channel)
- func (client *Client) Destroyed() bool
- func (client *Client) Friends(capabs ...caps.Capability) ClientSet
- func (client *Client) HasMode(mode modes.Mode) bool
- func (client *Client) HasNick() bool
- func (client *Client) HasRoleCapabs(capabs ...string) bool
- func (client *Client) HasUsername() bool
- func (client *Client) Hostname() string
- func (client *Client) IP() net.IP
- func (client *Client) IPString() string
- func (client *Client) IdleSeconds() uint64
- func (client *Client) IdleTime() time.Duration
- func (client *Client) LoggedIntoAccount() bool
- func (client *Client) ModeString() (str string)
- func (client *Client) Nick() string
- func (client *Client) NickCasefolded() string
- func (client *Client) NickMaskString() string
- func (client *Client) Notice(text string)
- func (client *Client) Oper() *Oper
- func (client *Client) Ping()
- func (client *Client) PreregNick() string
- func (client *Client) Quit(message string)
- func (client *Client) Realname() string
- func (client *Client) Register()
- func (client *Client) Registered() bool
- func (client *Client) RplISupport(rb *ResponseBuffer)
- func (target *Client) RplList(channel *Channel, rb *ResponseBuffer)
- func (client *Client) Send(tags *map[string]ircmsg.TagValue, prefix string, command string, ...) error
- func (client *Client) SendFromClient(msgid string, from *Client, tags *map[string]ircmsg.TagValue, command string, ...) error
- func (client *Client) SendRawMessage(message ircmsg.IrcMessage) error
- func (client *Client) SendSplitMsgFromClient(msgid string, from *Client, tags *map[string]ircmsg.TagValue, ...)
- func (client *Client) SetAccountName(account string) (changed bool)
- func (client *Client) SetAuthorized(authorized bool)
- func (client *Client) SetMode(mode modes.Mode, on bool) bool
- func (client *Client) SetOper(oper *Oper)
- func (client *Client) SetPreregNick(preregNick string)
- func (client *Client) SetVHost(vhost string) (updated bool)
- func (client *Client) SignonTime() int64
- func (client *Client) Touch()
- func (client *Client) TryResume()
- func (client *Client) Username() string
- func (client *Client) WhoWas() (result WhoWas)
- func (client *Client) WhoisChannelsNames(target *Client) []string
- type ClientAccount
- type ClientManager
- func (clients *ClientManager) AllClients() (result []*Client)
- func (clients *ClientManager) AllWithCaps(capabs ...caps.Capability) (set ClientSet)
- func (clients *ClientManager) Count() int
- func (clients *ClientManager) Find(userhost string) *Client
- func (clients *ClientManager) FindAll(userhost string) (set ClientSet)
- func (clients *ClientManager) Get(nick string) *Client
- func (clients *ClientManager) Remove(client *Client) error
- func (clients *ClientManager) SetNick(client *Client, newNick string) error
- type ClientSet
- type Command
- type Config
- type DLineManager
- func (dm *DLineManager) AddIP(addr net.IP, length *IPRestrictTime, reason, operReason, operName string)
- func (dm *DLineManager) AddNetwork(network net.IPNet, length *IPRestrictTime, reason, operReason, operName string)
- func (dm *DLineManager) AllBans() map[string]IPBanInfo
- func (dm *DLineManager) CheckIP(addr net.IP) (isBanned bool, info *IPBanInfo)
- func (dm *DLineManager) RemoveIP(addr net.IP)
- func (dm *DLineManager) RemoveNetwork(network net.IPNet)
- type Fakelag
- type FakelagConfig
- type FakelagState
- type HelpEntry
- type HelpEntryType
- type IPBanInfo
- type IPRestrictTime
- type IdleTimer
- type KLineInfo
- type KLineManager
- type Limits
- type LineLenLimits
- type ListenerWrapper
- type MemberSet
- type MonitorManager
- func (manager *MonitorManager) Add(client *Client, nick string, limit int) error
- func (manager *MonitorManager) AlertAbout(client *Client, online bool)
- func (manager *MonitorManager) List(client *Client) (nicks []string)
- func (manager *MonitorManager) Remove(client *Client, nick string) error
- func (manager *MonitorManager) RemoveAll(client *Client)
- type NickReservationConfig
- type NickReservationMethod
- type NickTimer
- type Oper
- type OperClass
- type OperClassConfig
- type OperConfig
- type PendingVHostRequest
- type RegisteredChannel
- type ResponseBuffer
- func (rb *ResponseBuffer) Add(tags *map[string]ircmsg.TagValue, prefix string, command string, ...)
- func (rb *ResponseBuffer) AddFromClient(msgid string, from *Client, tags *map[string]ircmsg.TagValue, command string, ...)
- func (rb *ResponseBuffer) AddSplitMessageFromClient(msgid string, from *Client, tags *map[string]ircmsg.TagValue, command string, ...)
- func (rb *ResponseBuffer) Notice(text string)
- func (rb *ResponseBuffer) Send() error
- type ResumeDetails
- type STSConfig
- type SchemaChange
- type SchemaChanger
- type Semaphore
- type Server
- func (server *Server) AccountConfig() *AccountConfig
- func (server *Server) ChannelRegistrationEnabled() bool
- func (server *Server) Config() *Config
- func (server *Server) DefaultChannelModes() modes.Modes
- func (server *Server) FakelagConfig() *FakelagConfig
- func (server *Server) GetOperator(name string) (oper *Oper)
- func (server *Server) ISupport() *isupport.List
- func (server *Server) Limits() Limits
- func (server *Server) MOTD(client *Client, rb *ResponseBuffer)
- func (server *Server) Password() []byte
- func (server *Server) ProxyAllowedFrom() []string
- func (server *Server) RandomlyRename(client *Client)
- func (server *Server) RecoverFromErrors() bool
- func (server *Server) Run()
- func (server *Server) Shutdown()
- func (server *Server) WebIRCConfig() []webircConfig
- type ServerSemaphores
- type SnoManager
- type Socket
- type SplitMessage
- type Stats
- type TLSListenConfig
- type TimerState
- type UserMaskSet
- func (set *UserMaskSet) Add(mask string) (added bool)
- func (set *UserMaskSet) AddAll(masks []string) (added bool)
- func (set *UserMaskSet) Length() int
- func (set *UserMaskSet) Match(userhost string) bool
- func (set *UserMaskSet) Remove(mask string) (removed bool)
- func (set *UserMaskSet) String() string
- type VHostConfig
- type VHostInfo
- type WhoWas
- type WhoWasList
Constants ¶
const ( IncludeInitial uint = 1 << iota IncludeTopic IncludeModes IncludeLists )
these are bit flags indicating what part of the channel status is "dirty" and needs to be read from memory and written to the db
const ( // RegisterTimeout is how long clients have to register before we disconnect them RegisterTimeout = time.Minute // IdleTimeout is how long without traffic before a registered client is considered idle. IdleTimeout = time.Minute + time.Second*30 // IdleTimeoutWithResumeCap is how long without traffic before a registered client is considered idle, when they have the resume capability. IdleTimeoutWithResumeCap = time.Minute*2 + time.Second*30 // QuitTimeout is how long without traffic before an idle client is disconnected QuitTimeout = time.Minute )
const ( RPL_WELCOME = "001" RPL_YOURHOST = "002" RPL_CREATED = "003" RPL_MYINFO = "004" RPL_ISUPPORT = "005" RPL_SNOMASKIS = "008" 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_WHOISACCOUNT = "330" RPL_NOTOPIC = "331" RPL_TOPIC = "332" RPL_TOPICTIME = "333" RPL_WHOISBOT = "335" RPL_WHOISACTUALLY = "338" 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" ERR_HELPNOTFOUND = "524" ERR_CANNOTSENDRP = "573" RPL_WHOISSECURE = "671" RPL_YOURLANGUAGESARE = "687" RPL_WHOISLANGUAGE = "690" RPL_HELPSTART = "704" RPL_HELPTXT = "705" RPL_ENDOFHELP = "706" ERR_NOPRIVS = "723" RPL_MONONLINE = "730" RPL_MONOFFLINE = "731" RPL_MONLIST = "732" RPL_ENDOFMONLIST = "733" ERR_MONLISTFULL = "734" 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" ERR_TOOMANYLANGUAGES = "981" ERR_NOLANGUAGE = "982" ERR_CANNOT_RESUME = "300" )
const (
// IdentTimeoutSeconds is how many seconds before our ident (username) check times out.
IdentTimeoutSeconds = 1.5
)
const (
IncludeAllChannelAttrs = ^uint(0)
)
this is an OR of all possible flags
const ( // this is a tradeoff between exploiting CPU-level parallelism (higher values better) // and not thrashing the allocator (lower values better). really this is all just // guesswork. oragono *can* make use of cores beyond this limit --- just not for // the protected operations. MaxServerSemaphoreCapacity = 32 )
const (
// SemVer is the semantic version of Oragono.
SemVer = "0.12.0"
)
Variables ¶
var ( // Commit is the current git commit. Commit = "" // Ver is the full version of Oragono, used in responses to clients. Ver = fmt.Sprintf("oragono-%s", SemVer) )
var ( ErrDatastorePathMissing = errors.New("Datastore path missing") ErrInvalidCertKeyPair = errors.New("tls cert+key: invalid pair") ErrLimitsAreInsane = errors.New("Limits aren't setup properly, check them and make them sane") ErrLineLengthsTooSmall = errors.New("Line lengths must be 512 or greater (check the linelen section under server->limits)") ErrLoggerExcludeEmpty = errors.New("Encountered logging type '-' with no type to exclude") ErrLoggerFilenameMissing = errors.New("Logging configuration specifies 'file' method but 'filename' is empty") ErrLoggerHasNoTypes = errors.New("Logger has no types to log") ErrNetworkNameMissing = errors.New("Network name missing") ErrNoFingerprintOrPassword = errors.New("Fingerprint or password needs to be specified") ErrNoListenersDefined = errors.New("Server listening addresses missing") ErrOperClassDependencies = errors.New("OperClasses contains a looping dependency, or a class extends from a class that doesn't exist") ErrServerNameMissing = errors.New("Server name missing") ErrServerNameNotHostname = errors.New("Server name must match the format of a hostname") )
Config Errors
var ( // SupportedCapabilities are the caps we advertise. // MaxLine, SASL and STS are set during server startup. SupportedCapabilities = caps.NewSet(caps.AccountTag, caps.AccountNotify, caps.AwayNotify, caps.Batch, caps.CapNotify, caps.ChgHost, caps.EchoMessage, caps.ExtendedJoin, caps.InviteNotify, caps.LabeledResponse, caps.Languages, caps.MessageTags, caps.MultiPrefix, caps.Rename, caps.Resume, caps.ServerTime, caps.UserhostInNames) // CapValues are the actual values we advertise to v3.2 clients. // actual values are set during server startup. CapValues = caps.NewValues() )
var Commands map[string]Command
Commands holds all commands executable by a client connected to us.
var ( // DefaultChannelModes are enabled on brand new channels when they're created. // this can be overridden in the `channels` config, with the `default-modes` key DefaultChannelModes = modes.Modes{ modes.NoOutside, modes.OpOnlyTopic, } )
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, *ResponseBuffer) bool{ "PLAIN": authPlainHandler, "EXTERNAL": authExternalHandler, } )
var Help = map[string]HelpEntry{ "acc": { // contains filtered or unexported fields }, "ambiance": { // contains filtered or unexported fields }, "authenticate": { // contains filtered or unexported fields }, "away": { // contains filtered or unexported fields }, "cap": { // contains filtered or unexported fields }, "chanserv": { // contains filtered or unexported fields }, "cs": { // contains filtered or unexported fields }, "debug": { // contains filtered or unexported fields }, "dline": { // contains filtered or unexported fields }, "help": { // contains filtered or unexported fields }, "helpop": { // contains filtered or unexported fields }, "hostserv": { // contains filtered or unexported fields }, "hs": { // contains filtered or unexported fields }, "info": { // 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 }, "kline": { // contains filtered or unexported fields }, "language": { // contains filtered or unexported fields }, "list": { // contains filtered or unexported fields }, "lusers": { // contains filtered or unexported fields }, "mode": { // contains filtered or unexported fields }, "monitor": { // contains filtered or unexported fields }, "motd": { // contains filtered or unexported fields }, "names": { // contains filtered or unexported fields }, "nick": { // contains filtered or unexported fields }, "nickserv": { // contains filtered or unexported fields }, "notice": { // contains filtered or unexported fields }, "npc": { // contains filtered or unexported fields }, "npca": { // contains filtered or unexported fields }, "ns": { // 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 }, "rename": { // contains filtered or unexported fields }, "sajoin": { // contains filtered or unexported fields }, "sanick": { // contains filtered or unexported fields }, "samode": { // contains filtered or unexported fields }, "scene": { // contains filtered or unexported fields }, "tagmsg": { // contains filtered or unexported fields }, "quit": { // contains filtered or unexported fields }, "rehash": { // contains filtered or unexported fields }, "resume": { // contains filtered or unexported fields }, "time": { // contains filtered or unexported fields }, "topic": { // contains filtered or unexported fields }, "undline": { // contains filtered or unexported fields }, "unkline": { // contains filtered or unexported fields }, "user": { // contains filtered or unexported fields }, "userhost": { // contains filtered or unexported fields }, "version": { // contains filtered or unexported fields }, "webirc": { // contains filtered or unexported fields }, "who": { // contains filtered or unexported fields }, "whois": { // contains filtered or unexported fields }, "whowas": { // contains filtered or unexported fields }, "modes": { // contains filtered or unexported fields }, "cmode": { // contains filtered or unexported fields }, "cmodes": { // contains filtered or unexported fields }, "umode": { // contains filtered or unexported fields }, "umodes": { // contains filtered or unexported fields }, "snomask": { // contains filtered or unexported fields }, "snomasks": { // contains filtered or unexported fields }, "casemapping": { // contains filtered or unexported fields }, "prefix": { // contains filtered or unexported fields }, }
Help contains the help strings distributed with the IRCd.
var HelpIndex map[string]string
HelpIndex contains the list of all help topics for regular users.
var HelpIndexOpers map[string]string
HelpIndexOpers contains the list of all help topics for opers.
var (
LoopbackIP = net.ParseIP("127.0.0.1")
)
var OragonoServices = map[string]*ircService{ "nickserv": { Name: "NickServ", ShortName: "NS", CommandAliases: []string{"NICKSERV", "NS"}, Commands: nickservCommands, HelpBanner: nickservHelp, }, "chanserv": { Name: "ChanServ", ShortName: "CS", CommandAliases: []string{"CHANSERV", "CS"}, Commands: chanservCommands, HelpBanner: chanservHelp, }, "hostserv": { Name: "HostServ", ShortName: "HS", CommandAliases: []string{"HOSTSERV", "HS"}, Commands: hostservCommands, HelpBanner: hostservHelp, }, }
all services, by lowercase name
Functions ¶
func ApplyUserModeChanges ¶ added in v0.12.0
func ApplyUserModeChanges(client *Client, changes modes.ModeChanges, force bool) modes.ModeChanges
ApplyUserModeChanges applies the given changes, and returns the applied changes.
func Casefold ¶ added in v0.2.0
Casefold returns a casefolded string, without doing any name or channel character checks.
func CasefoldChannel ¶ added in v0.2.0
CasefoldChannel returns a casefolded version of a channel name.
func CasefoldName ¶ added in v0.2.0
CasefoldName returns a casefolded version of a nick/user name.
func ExpandUserHost ¶
ExpandUserHost takes a userhost, and returns an expanded version.
func GenerateHelpIndex ¶ added in v0.8.0
GenerateHelpIndex is used to generate HelpIndex.
func GenerateHelpIndices ¶ added in v0.10.0
GenerateHelpIndices generates our help indexes and confirms we have HELP entries for every command.
func GetHelpIndex ¶ added in v0.11.0
GetHelpIndex returns the help index for the given language.
func GetLabel ¶ added in v0.11.0
func GetLabel(msg ircmsg.IrcMessage) string
GetLabel returns the label from the given message.
func IncompatibleSchemaError ¶ added in v0.12.0
func IncompatibleSchemaError(currentVersion string) (result *incompatibleSchemaError)
func OpenDatabase ¶ added in v0.10.0
OpenDatabase returns an existing database, performing a schema version check.
func ParseDefaultChannelModes ¶ added in v0.9.0
ParseDefaultChannelModes parses the `default-modes` line of the config
Types ¶
type AccountConfig ¶ added in v0.11.0
type AccountConfig struct { Registration AccountRegistrationConfig AuthenticationEnabled bool `yaml:"authentication-enabled"` SkipServerPassword bool `yaml:"skip-server-password"` NickReservation NickReservationConfig `yaml:"nick-reservation"` VHosts VHostConfig }
type AccountCredentials ¶
type AccountCredentials struct { Version uint PassphraseSalt []byte // legacy field, not used by v1 and later PassphraseHash []byte Certificate string // fingerprint }
AccountCredentials stores the various methods for verifying accounts.
type AccountManager ¶ added in v0.11.0
everything about accounts is persistent; therefore, the database is the authoritative source of truth for all account information. anything on the heap is just a cache
func NewAccountManager ¶ added in v0.11.0
func NewAccountManager(server *Server) *AccountManager
func (*AccountManager) AccountToClients ¶ added in v0.12.0
func (am *AccountManager) AccountToClients(account string) (result []*Client)
func (*AccountManager) AuthenticateByCertFP ¶ added in v0.11.0
func (am *AccountManager) AuthenticateByCertFP(client *Client) error
func (*AccountManager) AuthenticateByPassphrase ¶ added in v0.11.0
func (am *AccountManager) AuthenticateByPassphrase(client *Client, accountName string, passphrase string) error
func (*AccountManager) LoadAccount ¶ added in v0.11.0
func (am *AccountManager) LoadAccount(accountName string) (result ClientAccount, err error)
func (*AccountManager) Login ¶ added in v0.11.0
func (am *AccountManager) Login(client *Client, account ClientAccount)
func (*AccountManager) Logout ¶ added in v0.11.0
func (am *AccountManager) Logout(client *Client)
func (*AccountManager) NickToAccount ¶ added in v0.11.0
func (am *AccountManager) NickToAccount(nick string) string
func (*AccountManager) SetNickReserved ¶ added in v0.11.0
func (*AccountManager) Unregister ¶ added in v0.11.0
func (am *AccountManager) Unregister(account string) error
func (*AccountManager) VHostApprove ¶ added in v0.12.0
func (am *AccountManager) VHostApprove(account string) (result VHostInfo, err error)
func (*AccountManager) VHostListRequests ¶ added in v0.12.0
func (am *AccountManager) VHostListRequests(limit int) (requests []PendingVHostRequest, total int)
func (*AccountManager) VHostReject ¶ added in v0.12.0
func (am *AccountManager) VHostReject(account string, reason string) (result VHostInfo, err error)
func (*AccountManager) VHostRequest ¶ added in v0.12.0
func (am *AccountManager) VHostRequest(account string, vhost string) (result VHostInfo, err error)
func (*AccountManager) VHostSet ¶ added in v0.12.0
func (am *AccountManager) VHostSet(account string, vhost string) (result VHostInfo, err error)
func (*AccountManager) VHostSetEnabled ¶ added in v0.12.0
func (am *AccountManager) VHostSetEnabled(client *Client, enabled bool) (result VHostInfo, err error)
type AccountRegistrationConfig ¶
type AccountRegistrationConfig struct { Enabled bool EnabledCallbacks []string `yaml:"enabled-callbacks"` EnabledCredentialTypes []string `yaml:"-"` VerifyTimeout time.Duration `yaml:"verify-timeout"` 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"` } } BcryptCost uint `yaml:"bcrypt-cost"` }
AccountRegistrationConfig controls account registration.
type Batch ¶ added in v0.11.0
Batch represents an IRCv3 batch.
type BatchManager ¶ added in v0.11.0
type BatchManager struct {
// contains filtered or unexported fields
}
BatchManager helps generate new batches and new batch IDs.
func NewBatchManager ¶ added in v0.11.0
func NewBatchManager() *BatchManager
NewBatchManager returns a new Manager.
func (*BatchManager) New ¶ added in v0.11.0
func (bm *BatchManager) New(batchType string, params ...string) *Batch
New returns a new batch.
func (*BatchManager) NewID ¶ added in v0.11.0
func (bm *BatchManager) NewID() string
NewID returns a new batch ID that should be unique.
type Channel ¶
type Channel struct {
// contains filtered or unexported fields
}
Channel represents a channel that clients can join.
func NewChannel ¶
func NewChannel(s *Server, name string, regInfo *RegisteredChannel) *Channel
NewChannel creates a new channel from a `Server` and a `name` string, which must be unique on the server.
func (*Channel) ApplyChannelModeChanges ¶ added in v0.10.1
func (channel *Channel) ApplyChannelModeChanges(client *Client, isSamode bool, changes modes.ModeChanges, rb *ResponseBuffer) modes.ModeChanges
ApplyChannelModeChanges applies a given set of mode changes.
func (*Channel) ClientHasPrivsOver ¶ added in v0.10.1
func (*Channel) ClientIsAtLeast ¶ added in v0.3.0
ClientIsAtLeast returns whether the client has at least the given channel privilege.
func (*Channel) ClientPrefixes ¶ added in v0.10.1
func (*Channel) ExportRegistration ¶ added in v0.10.2
func (channel *Channel) ExportRegistration(includeFlags uint) (info RegisteredChannel)
obtain a consistent snapshot of the channel state that can be persisted to the DB
func (*Channel) Invite ¶
func (channel *Channel) Invite(invitee *Client, inviter *Client, rb *ResponseBuffer)
Invite invites the given client to the channel, if the inviter can do so.
func (*Channel) IsRegistered ¶ added in v0.10.2
IsRegistered returns whether the channel is registered.
func (*Channel) Join ¶
func (channel *Channel) Join(client *Client, key string, isSajoin bool, rb *ResponseBuffer)
Join joins the given client to this channel (if they can be joined).
func (*Channel) Kick ¶
func (channel *Channel) Kick(client *Client, target *Client, comment string, rb *ResponseBuffer)
func (*Channel) NameCasefolded ¶ added in v0.10.1
func (*Channel) Names ¶
func (channel *Channel) Names(client *Client, rb *ResponseBuffer)
Names sends the list of users joined to the channel to the given client.
func (*Channel) Part ¶
func (channel *Channel) Part(client *Client, message string, rb *ResponseBuffer)
Part parts the given client from this channel, with the given message.
func (*Channel) ProcessAccountToUmodeChange ¶ added in v0.12.0
func (channel *Channel) ProcessAccountToUmodeChange(client *Client, change modes.ModeChange) (results []modes.ModeChange, err error)
ProcessAccountToUmodeChange processes Add/Remove/List operations for channel persistent usermodes.
func (*Channel) SendTopic ¶ added in v0.10.1
func (channel *Channel) SendTopic(client *Client, rb *ResponseBuffer)
SendTopic sends the channel topic to the given client.
func (*Channel) SetRegistered ¶ added in v0.10.2
SetRegistered registers the channel, returning an error if it was already registered.
func (*Channel) SetTopic ¶
func (channel *Channel) SetTopic(client *Client, topic string, rb *ResponseBuffer)
SetTopic sets the topic of this channel, if the client is allowed to do so.
func (*Channel) SetUnregistered ¶ added in v0.12.0
func (channel *Channel) SetUnregistered()
SetUnregistered deletes the channel's registration information.
func (*Channel) ShowMaskList ¶
func (channel *Channel) ShowMaskList(client *Client, mode modes.Mode, rb *ResponseBuffer)
ShowMaskList shows the given list to the client.
func (*Channel) SplitNotice ¶ added in v0.6.0
func (channel *Channel) SplitNotice(msgid string, minPrefix *modes.Mode, clientOnlyTags *map[string]ircmsg.TagValue, client *Client, message SplitMessage, rb *ResponseBuffer)
SplitNotice sends a private message to everyone in this channel.
func (*Channel) SplitPrivMsg ¶ added in v0.6.0
func (channel *Channel) SplitPrivMsg(msgid string, minPrefix *modes.Mode, clientOnlyTags *map[string]ircmsg.TagValue, client *Client, message SplitMessage, rb *ResponseBuffer)
SplitPrivMsg sends a private message to everyone in this channel.
type ChannelManager ¶ added in v0.10.1
ChannelManager keeps track of all the channels on the server, providing synchronization for creation of new channels on first join, cleanup of empty channels on last part, and renames.
func NewChannelManager ¶ added in v0.10.1
func NewChannelManager() *ChannelManager
NewChannelManager returns a new ChannelManager.
func (*ChannelManager) Channels ¶ added in v0.10.1
func (cm *ChannelManager) Channels() (result []*Channel)
Channels returns a slice containing all current channels
func (*ChannelManager) Cleanup ¶ added in v0.11.0
func (cm *ChannelManager) Cleanup(channel *Channel)
func (*ChannelManager) Get ¶ added in v0.10.1
func (cm *ChannelManager) Get(name string) *Channel
Get returns an existing channel with name equivalent to `name`, or nil
func (*ChannelManager) Join ¶ added in v0.10.1
func (cm *ChannelManager) Join(client *Client, name string, key string, isSajoin bool, rb *ResponseBuffer) error
Join causes `client` to join the channel named `name`, creating it if necessary.
func (*ChannelManager) Len ¶ added in v0.10.1
func (cm *ChannelManager) Len() int
Len returns the number of channels
func (*ChannelManager) Part ¶ added in v0.10.1
func (cm *ChannelManager) Part(client *Client, name string, message string, rb *ResponseBuffer) error
Part parts `client` from the channel named `name`, deleting it if it's empty.
type ChannelRegistrationConfig ¶ added in v0.7.0
type ChannelRegistrationConfig struct {
Enabled bool
}
ChannelRegistrationConfig controls channel registration.
type ChannelRegistry ¶ added in v0.10.2
type ChannelRegistry struct { // This serializes operations of the form (read channel state, synchronously persist it); // this is enough to guarantee eventual consistency of the database with the // ChannelManager and Channel objects, which are the source of truth. // // We could use the buntdb RW transaction lock for this purpose but we share // that with all the other modules, so let's not. sync.Mutex // tier 2 // contains filtered or unexported fields }
ChannelRegistry manages registered channels.
func NewChannelRegistry ¶ added in v0.10.2
func NewChannelRegistry(server *Server) *ChannelRegistry
NewChannelRegistry returns a new ChannelRegistry.
func (*ChannelRegistry) Delete ¶ added in v0.12.0
func (reg *ChannelRegistry) Delete(casefoldedName string, info RegisteredChannel)
func (*ChannelRegistry) LoadChannel ¶ added in v0.10.2
func (reg *ChannelRegistry) LoadChannel(nameCasefolded string) (info *RegisteredChannel)
LoadChannel loads a channel from the store.
func (*ChannelRegistry) Rename ¶ added in v0.10.2
func (reg *ChannelRegistry) Rename(channel *Channel, casefoldedOldName string)
Rename handles the persistence part of a channel rename: the channel is persisted under its new name, and the old name is cleaned up if necessary.
func (*ChannelRegistry) StoreChannel ¶ added in v0.10.2
func (reg *ChannelRegistry) StoreChannel(channel *Channel, includeFlags uint)
StoreChannel obtains a consistent view of a channel, then persists it to the store.
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
Client is an IRC client.
func (*Client) AccountName ¶ added in v0.10.2
func (*Client) Active ¶
func (client *Client) Active()
Active updates when the client was last 'active' (i.e. the user should be sitting in front of their client).
func (*Client) AllNickmasks ¶ added in v0.6.0
AllNickmasks returns all the possible nickmasks for the client.
func (*Client) ApplyProxiedIP ¶ added in v0.10.0
ApplyProxiedIP applies the given IP to the client.
func (*Client) Authorized ¶ added in v0.11.0
func (*Client) Friends ¶
func (client *Client) Friends(capabs ...caps.Capability) ClientSet
Friends refers to clients that share a channel with this client.
func (*Client) HasNick ¶
HasNick returns true if the client's nickname is set (used in registration).
func (*Client) HasRoleCapabs ¶ added in v0.10.0
HasRoleCapabs returns true if client has the given (role) capabilities.
func (*Client) HasUsername ¶
HasUsername returns true if the client's username is set (used in registration).
func (*Client) IPString ¶ added in v0.8.1
IPString returns the IP address of this client as a string.
func (*Client) IdleSeconds ¶
IdleSeconds returns the number of seconds this client's been idle.
func (*Client) LoggedIntoAccount ¶ added in v0.9.1
LoggedIntoAccount returns true if this client is logged into an account.
func (*Client) ModeString ¶
ModeString returns the mode string for this client.
func (*Client) NickCasefolded ¶ added in v0.10.1
func (*Client) NickMaskString ¶ added in v0.10.1
func (*Client) Ping ¶ added in v0.10.0
func (client *Client) Ping()
Ping sends the client a PING message.
func (*Client) PreregNick ¶ added in v0.11.0
func (*Client) Quit ¶
Quit sets the given quit message for the client and tells the client to quit out.
func (*Client) Register ¶
func (client *Client) Register()
Register sets the client details as appropriate when entering the network.
func (*Client) Registered ¶ added in v0.10.0
func (*Client) RplISupport ¶
func (client *Client) RplISupport(rb *ResponseBuffer)
RplISupport outputs our ISUPPORT lines to the client. This is used on connection and in VERSION responses.
func (*Client) RplList ¶
func (target *Client) RplList(channel *Channel, rb *ResponseBuffer)
RplList returns the RPL_LIST numeric for the given channel.
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(msgid string, from *Client, tags *map[string]ircmsg.TagValue, 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) SendRawMessage ¶ added in v0.11.0
func (client *Client) SendRawMessage(message ircmsg.IrcMessage) error
SendRawMessage sends a raw message to the client.
func (*Client) SendSplitMsgFromClient ¶ added in v0.6.0
func (client *Client) SendSplitMsgFromClient(msgid string, from *Client, tags *map[string]ircmsg.TagValue, command, target string, message SplitMessage)
SendSplitMsgFromClient sends an IRC PRIVMSG/NOTICE coming from a specific client. Adds account-tag to the line as well.
func (*Client) SetAccountName ¶ added in v0.11.0
func (*Client) SetAuthorized ¶ added in v0.11.0
func (*Client) SetPreregNick ¶ added in v0.11.0
func (*Client) SignonTime ¶
SignonTime returns this client's signon time as a unix timestamp.
func (*Client) Touch ¶
func (client *Client) Touch()
Touch marks the client as alive (as it it has a connection to us and we can receive messages from it).
func (*Client) TryResume ¶ added in v0.11.0
func (client *Client) TryResume()
TryResume tries to resume if the client asked us to.
func (*Client) WhoisChannelsNames ¶
WhoisChannelsNames returns the common channel names between two users.
type ClientAccount ¶
type ClientAccount struct { // Name of the account. Name string // RegisteredAt represents the time that the account was registered. RegisteredAt time.Time Credentials AccountCredentials Verified bool AdditionalNicks []string VHost VHostInfo }
ClientAccount represents a user account.
type ClientManager ¶ added in v0.10.3
ClientManager keeps track of clients by nick, enforcing uniqueness of casefolded nicks
func NewClientManager ¶ added in v0.10.3
func NewClientManager() *ClientManager
NewClientManager returns a new ClientManager.
func (*ClientManager) AllClients ¶ added in v0.10.3
func (clients *ClientManager) AllClients() (result []*Client)
func (*ClientManager) AllWithCaps ¶ added in v0.10.3
func (clients *ClientManager) AllWithCaps(capabs ...caps.Capability) (set ClientSet)
AllWithCaps returns all clients with the given capabilities.
func (*ClientManager) Count ¶ added in v0.10.3
func (clients *ClientManager) Count() int
Count returns how many clients are in the manager.
func (*ClientManager) Find ¶ added in v0.10.3
func (clients *ClientManager) Find(userhost string) *Client
Find returns the first client that matches the given userhost mask.
func (*ClientManager) FindAll ¶ added in v0.10.3
func (clients *ClientManager) FindAll(userhost string) (set ClientSet)
FindAll returns all clients that match the given userhost mask.
func (*ClientManager) Get ¶ added in v0.10.3
func (clients *ClientManager) Get(nick string) *Client
Get retrieves a client from the manager, if they exist.
func (*ClientManager) Remove ¶ added in v0.10.3
func (clients *ClientManager) Remove(client *Client) error
Remove removes a client from the lookup set.
type ClientSet ¶
ClientSet is a set of clients.
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 { Password string Name string Listen []string UnixBindMode os.FileMode `yaml:"unix-bind-mode"` TLSListeners map[string]*TLSListenConfig `yaml:"tls-listeners"` STS STSConfig CheckIdent bool `yaml:"check-ident"` MOTD string MOTDFormatting bool `yaml:"motd-formatting"` ProxyAllowedFrom []string `yaml:"proxy-allowed-from"` WebIRC []webircConfig `yaml:"webirc"` MaxSendQString string `yaml:"max-sendq"` MaxSendQBytes int ConnectionLimiter connection_limits.LimiterConfig `yaml:"connection-limits"` ConnectionThrottler connection_limits.ThrottlerConfig `yaml:"connection-throttling"` // contains filtered or unexported fields } Languages struct { Enabled bool Path string Default string Data map[string]languages.LangData } Datastore struct { Path string AutoUpgrade bool } Accounts AccountConfig Channels struct { DefaultModes *string `yaml:"default-modes"` Registration ChannelRegistrationConfig // contains filtered or unexported fields } OperClasses map[string]*OperClassConfig `yaml:"oper-classes"` Opers map[string]*OperConfig Logging []logger.LoggingConfig Debug struct { RecoverFromErrors *bool `yaml:"recover-from-errors"` PprofListener *string `yaml:"pprof-listener"` } Limits Limits Fakelag FakelagConfig Filename string // contains filtered or unexported fields }
Config defines the overall configuration.
func LoadConfig ¶
LoadConfig loads the given YAML configuration file.
func (*Config) OperatorClasses ¶ added in v0.4.0
OperatorClasses returns a map of assembled operator classes from the given config.
type DLineManager ¶ added in v0.5.0
DLineManager manages and dlines.
func NewDLineManager ¶ added in v0.5.0
func NewDLineManager() *DLineManager
NewDLineManager returns a new DLineManager.
func (*DLineManager) AddIP ¶ added in v0.5.0
func (dm *DLineManager) AddIP(addr net.IP, length *IPRestrictTime, reason, operReason, operName string)
AddIP adds an IP address to the blocked list.
func (*DLineManager) AddNetwork ¶ added in v0.5.0
func (dm *DLineManager) AddNetwork(network net.IPNet, length *IPRestrictTime, reason, operReason, operName string)
AddNetwork adds a network to the blocked list.
func (*DLineManager) AllBans ¶ added in v0.5.0
func (dm *DLineManager) AllBans() map[string]IPBanInfo
AllBans returns all bans (for use with APIs, etc).
func (*DLineManager) CheckIP ¶ added in v0.5.0
func (dm *DLineManager) CheckIP(addr net.IP) (isBanned bool, info *IPBanInfo)
CheckIP returns whether or not an IP address was banned, and how long it is banned for.
func (*DLineManager) RemoveIP ¶ added in v0.5.0
func (dm *DLineManager) RemoveIP(addr net.IP)
RemoveIP removes an IP from the blocked list.
func (*DLineManager) RemoveNetwork ¶ added in v0.5.0
func (dm *DLineManager) RemoveNetwork(network net.IPNet)
RemoveNetwork removes a network from the blocked list.
type Fakelag ¶ added in v0.11.0
type Fakelag struct {
// contains filtered or unexported fields
}
this is intentionally not threadsafe, because it should only be touched from the loop that accepts the client's input and runs commands
func NewFakelag ¶ added in v0.11.0
type FakelagConfig ¶ added in v0.11.0
type FakelagState ¶ added in v0.11.0
type FakelagState uint
const ( // initially, the client is "bursting" and can send n commands without // encountering fakelag FakelagBursting FakelagState = iota // after that, they're "throttled" and we sleep in between commands until // they're spaced sufficiently far apart FakelagThrottled )
type HelpEntry ¶ added in v0.2.0
type HelpEntry struct {
// contains filtered or unexported fields
}
HelpEntry represents an entry in the Help map.
type HelpEntryType ¶ added in v0.8.0
type HelpEntryType int
HelpEntryType represents the different sorts of help entries that can exist.
const ( // CommandHelpEntry is a help entry explaining a client command. CommandHelpEntry HelpEntryType = iota // InformationHelpEntry is a help entry explaining general server info. InformationHelpEntry // ISupportHelpEntry is a help entry explaining a specific RPL_ISUPPORT token. ISupportHelpEntry )
type IPBanInfo ¶ added in v0.5.0
type IPBanInfo struct { // Reason is the ban reason. Reason string `json:"reason"` // OperReason is an oper ban reason. OperReason string `json:"oper_reason"` // OperName is the oper who set the ban. OperName string `json:"oper_name"` // Time holds details about the duration, if it exists. Time *IPRestrictTime `json:"time"` }
IPBanInfo holds info about an IP/net ban.
func (IPBanInfo) BanMessage ¶ added in v0.9.0
BanMessage returns the ban message.
type IPRestrictTime ¶ added in v0.5.0
type IPRestrictTime struct { // Duration is how long this block lasts for. Duration time.Duration `json:"duration"` // Expires is when this block expires. Expires time.Time `json:"expires"` }
IPRestrictTime contains the expiration info about the given IP.
func (*IPRestrictTime) IsExpired ¶ added in v0.5.0
func (iptime *IPRestrictTime) IsExpired() bool
IsExpired returns true if the time has expired.
type IdleTimer ¶ added in v0.10.0
func NewIdleTimer ¶ added in v0.10.0
NewIdleTimer sets up a new IdleTimer using constant timeouts.
func (*IdleTimer) Start ¶ added in v0.10.0
func (it *IdleTimer) Start()
Start starts counting idle time; if there is no activity from the client, it will eventually be stopped.
type KLineInfo ¶ added in v0.6.0
type KLineInfo struct { // Mask that is blocked. Mask string // Matcher, to facilitate fast matching. Matcher ircmatch.Matcher // Info contains information on the ban. Info IPBanInfo }
KLineInfo contains the address itself and expiration time for a given network.
type KLineManager ¶ added in v0.6.0
KLineManager manages and klines.
func NewKLineManager ¶ added in v0.6.0
func NewKLineManager() *KLineManager
NewKLineManager returns a new KLineManager.
func (*KLineManager) AddMask ¶ added in v0.6.0
func (km *KLineManager) AddMask(mask string, length *IPRestrictTime, reason, operReason, operName string)
AddMask adds to the blocked list.
func (*KLineManager) AllBans ¶ added in v0.6.0
func (km *KLineManager) AllBans() map[string]IPBanInfo
AllBans returns all bans (for use with APIs, etc).
func (*KLineManager) CheckMasks ¶ added in v0.6.0
func (km *KLineManager) CheckMasks(masks ...string) (isBanned bool, info *IPBanInfo)
CheckMasks returns whether or not the hostmask(s) are banned, and how long they are banned for.
func (*KLineManager) RemoveMask ¶ added in v0.6.0
func (km *KLineManager) RemoveMask(mask string)
RemoveMask removes a mask from the blocked list.
type Limits ¶
type Limits struct { AwayLen int `yaml:"awaylen"` ChanListModes int `yaml:"chan-list-modes"` ChannelLen int `yaml:"channellen"` KickLen int `yaml:"kicklen"` MonitorEntries int `yaml:"monitor-entries"` NickLen int `yaml:"nicklen"` TopicLen int `yaml:"topiclen"` WhowasEntries int `yaml:"whowas-entries"` LineLen LineLenLimits `yaml:"linelen"` }
Various server-enforced limits on data size.
type LineLenLimits ¶ added in v0.6.0
LineLenConfig controls line lengths.
type ListenerWrapper ¶ added in v0.9.0
type ListenerWrapper struct {
// contains filtered or unexported fields
}
ListenerWrapper wraps a listener so it can be safely reconfigured or stopped
type MemberSet ¶
MemberSet is a set of members with modes.
func (MemberSet) AnyHasMode ¶
AnyHasMode returns true if any of our clients has the given mode.
type MonitorManager ¶ added in v0.10.0
MonitorManager keeps track of who's monitoring which nicks.
func NewMonitorManager ¶ added in v0.10.0
func NewMonitorManager() *MonitorManager
NewMonitorManager returns a new MonitorManager.
func (*MonitorManager) Add ¶ added in v0.10.0
func (manager *MonitorManager) Add(client *Client, nick string, limit int) error
Add registers `client` to receive notifications about `nick`.
func (*MonitorManager) AlertAbout ¶ added in v0.10.0
func (manager *MonitorManager) AlertAbout(client *Client, online bool)
AlertAbout alerts everyone monitoring `client`'s nick that `client` is now {on,off}line.
func (*MonitorManager) List ¶ added in v0.10.0
func (manager *MonitorManager) List(client *Client) (nicks []string)
List lists all nicks that `client` is registered to receive notifications about.
func (*MonitorManager) Remove ¶ added in v0.10.0
func (manager *MonitorManager) Remove(client *Client, nick string) error
Remove unregisters `client` from receiving notifications about `nick`.
func (*MonitorManager) RemoveAll ¶ added in v0.10.0
func (manager *MonitorManager) RemoveAll(client *Client)
RemoveAll unregisters `client` from receiving notifications about *all* nicks.
type NickReservationConfig ¶ added in v0.11.0
type NickReservationMethod ¶ added in v0.11.0
type NickReservationMethod int
const ( NickReservationWithTimeout NickReservationMethod = iota NickReservationStrict )
func (*NickReservationMethod) UnmarshalYAML ¶ added in v0.11.0
func (nr *NickReservationMethod) UnmarshalYAML(unmarshal func(interface{}) error) error
type NickTimer ¶ added in v0.11.0
NickTimer manages timing out of clients who are squatting reserved nicks
func NewNickTimer ¶ added in v0.11.0
NewNickTimer sets up a new nick timer (returning nil if timeout enforcement is not enabled)
type Oper ¶ added in v0.4.0
type Oper struct { Name string Class *OperClass WhoisLine string Vhost string Pass []byte Modes []modes.ModeChange }
Oper represents a single assembled operator's config.
type OperClass ¶ added in v0.4.0
type OperClass struct { Title string WhoisLine string `yaml:"whois-line"` Capabilities map[string]bool // map to make lookups much easier }
OperClass defines an assembled operator class.
type OperClassConfig ¶ added in v0.4.0
OperClassConfig defines a specific operator class.
type OperConfig ¶ added in v0.4.0
type OperConfig struct { Class string Vhost string WhoisLine string `yaml:"whois-line"` Password string Modes string }
OperConfig defines a specific operator's configuration.
type PendingVHostRequest ¶ added in v0.12.0
pair type, <VHostInfo, accountName>
type RegisteredChannel ¶ added in v0.7.0
type RegisteredChannel struct { // Name of the channel. Name string // RegisteredAt represents the time that the channel was registered. RegisteredAt time.Time // Founder indicates the founder of the channel. Founder string // Topic represents the channel topic. Topic string // TopicSetBy represents the host that set the topic. TopicSetBy string // TopicSetTime represents the time the topic was set. TopicSetTime time.Time // Modes represents the channel modes Modes []modes.Mode // Key represents the channel key / password Key string // AccountToUMode maps user accounts to their persistent channel modes (e.g., +q, +h) AccountToUMode map[string]modes.Mode // Banlist represents the bans set on the channel. Banlist []string // Exceptlist represents the exceptions set on the channel. Exceptlist []string // Invitelist represents the invite exceptions set on the channel. Invitelist []string }
RegisteredChannel holds details about a given registered channel.
type ResponseBuffer ¶ added in v0.11.0
type ResponseBuffer struct { Label string // contains filtered or unexported fields }
ResponseBuffer - put simply - buffers messages and then outputs them to a given client.
Using a ResponseBuffer lets you really easily implement labeled-response, since the buffer will silently create a batch if required and label the outgoing messages as necessary (or leave it off and simply tag the outgoing message).
func NewResponseBuffer ¶ added in v0.11.0
func NewResponseBuffer(target *Client) *ResponseBuffer
NewResponseBuffer returns a new ResponseBuffer.
func (*ResponseBuffer) Add ¶ added in v0.11.0
func (rb *ResponseBuffer) Add(tags *map[string]ircmsg.TagValue, prefix string, command string, params ...string)
Add adds a standard new message to our queue.
func (*ResponseBuffer) AddFromClient ¶ added in v0.11.0
func (rb *ResponseBuffer) AddFromClient(msgid string, from *Client, tags *map[string]ircmsg.TagValue, command string, params ...string)
AddFromClient adds a new message from a specific client to our queue.
func (*ResponseBuffer) AddSplitMessageFromClient ¶ added in v0.11.0
func (rb *ResponseBuffer) AddSplitMessageFromClient(msgid string, from *Client, tags *map[string]ircmsg.TagValue, command string, target string, message SplitMessage)
AddSplitMessageFromClient adds a new split message from a specific client to our queue.
func (*ResponseBuffer) Notice ¶ added in v0.11.0
func (rb *ResponseBuffer) Notice(text string)
Notice sends the client the given notice from the server.
func (*ResponseBuffer) Send ¶ added in v0.11.0
func (rb *ResponseBuffer) Send() error
Send sends the message to our target client.
type ResumeDetails ¶ added in v0.11.0
ResumeDetails are the details that we use to resume connections.
type STSConfig ¶ added in v0.7.0
type STSConfig struct { Enabled bool Duration time.Duration `yaml:"duration-real"` DurationString string `yaml:"duration"` Port int Preload bool }
STSConfig controls the STS configuration/
type SchemaChange ¶ added in v0.12.0
type SchemaChange struct { InitialVersion string // the change will take this version TargetVersion string // and transform it into this version Changer SchemaChanger }
type Semaphore ¶ added in v0.12.0
type Semaphore (chan bool)
Semaphore is a counting semaphore. Note that a capacity of n requires O(n) storage.
func (*Semaphore) Acquire ¶ added in v0.12.0
func (semaphore *Semaphore) Acquire()
Acquire acquires a semaphore, blocking if necessary.
func (*Semaphore) Initialize ¶ added in v0.12.0
Initialize initializes a semaphore to a given capacity.
func (*Semaphore) Release ¶ added in v0.12.0
func (semaphore *Semaphore) Release()
Release releases a semaphore. It never blocks. (This is not a license to program spurious releases.)
func (*Semaphore) TryAcquire ¶ added in v0.12.0
TryAcquire tries to acquire a semaphore, returning whether the acquire was successful. It never blocks.
type Server ¶
type Server struct {
// contains filtered or unexported fields
}
Server is the main Oragono server.
func (*Server) AccountConfig ¶ added in v0.11.0
func (server *Server) AccountConfig() *AccountConfig
func (*Server) ChannelRegistrationEnabled ¶ added in v0.10.2
func (*Server) DefaultChannelModes ¶ added in v0.10.1
func (*Server) FakelagConfig ¶ added in v0.11.0
func (server *Server) FakelagConfig() *FakelagConfig
func (*Server) GetOperator ¶ added in v0.12.0
func (*Server) MOTD ¶
func (server *Server) MOTD(client *Client, rb *ResponseBuffer)
MOTD serves the Message of the Day.
func (*Server) ProxyAllowedFrom ¶ added in v0.10.0
func (*Server) RandomlyRename ¶ added in v0.11.0
func (*Server) RecoverFromErrors ¶ added in v0.10.1
func (*Server) WebIRCConfig ¶ added in v0.10.0
func (server *Server) WebIRCConfig() []webircConfig
type ServerSemaphores ¶ added in v0.12.0
type ServerSemaphores struct { // each distinct operation MUST have its own semaphore; // methods that acquire a semaphore MUST NOT call methods that acquire another ClientDestroy Semaphore }
ServerSemaphores includes a named Semaphore corresponding to each concurrency-limited sever operation.
func NewServerSemaphores ¶ added in v0.12.0
func NewServerSemaphores() (result *ServerSemaphores)
NewServerSemaphores creates a new ServerSemaphores.
type SnoManager ¶ added in v0.8.0
type SnoManager struct {
// contains filtered or unexported fields
}
SnoManager keeps track of which clients to send snomasks to.
func NewSnoManager ¶ added in v0.8.0
func NewSnoManager() *SnoManager
NewSnoManager returns a new SnoManager
func (*SnoManager) AddMasks ¶ added in v0.8.0
func (m *SnoManager) AddMasks(client *Client, masks ...sno.Mask)
AddMasks adds the given snomasks to the client.
func (*SnoManager) RemoveClient ¶ added in v0.8.0
func (m *SnoManager) RemoveClient(client *Client)
RemoveClient removes the given client from all of our lists.
func (*SnoManager) RemoveMasks ¶ added in v0.8.0
func (m *SnoManager) RemoveMasks(client *Client, masks ...sno.Mask)
RemoveMasks removes the given snomasks from the client.
func (*SnoManager) Send ¶ added in v0.8.0
func (m *SnoManager) Send(mask sno.Mask, content string)
Send sends the given snomask to all users signed up for it.
func (*SnoManager) String ¶ added in v0.8.0
func (m *SnoManager) String(client *Client) string
String returns the snomasks currently enabled.
type Socket ¶
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.
func (*Socket) SetFinalData ¶ added in v0.8.0
SetFinalData sets the final data to send when the SocketWriter closes.
func (*Socket) Write ¶
Write sends the given string out of Socket. Requirements: 1. MUST NOT block for macroscopic amounts of time 2. MUST NOT reorder messages 3. MUST provide mutual exclusion for socket.conn.Write 4. SHOULD NOT tie up additional goroutines, beyond the one blocked on socket.conn.Write
type SplitMessage ¶ added in v0.6.0
SplitMessage represents a message that's been split for sending.
type Stats ¶ added in v0.12.0
Stats contains the numbers of total, invisible and operators on the server
func (*Stats) ChangeInvisible ¶ added in v0.12.0
ChangeInvisible increments the invisible count
func (*Stats) ChangeOperators ¶ added in v0.12.0
ChangeOperators increases the operator count
func (*Stats) ChangeTotal ¶ added in v0.12.0
ChangeTotal increments the total user count on server
type TLSListenConfig ¶
TLSListenConfig defines configuration options for listening on TLS.
type TimerState ¶ added in v0.10.0
type TimerState uint
const ( TimerUnregistered TimerState = iota // client is unregistered TimerActive // client is actively sending commands TimerIdle // client is idle, we sent PING and are waiting for PONG TimerDead // client was terminated )
type UserMaskSet ¶
UserMaskSet holds a set of client masks and lets you match hostnames to them.
func (*UserMaskSet) Add ¶
func (set *UserMaskSet) Add(mask string) (added bool)
Add adds the given mask to this set.
func (*UserMaskSet) AddAll ¶
func (set *UserMaskSet) AddAll(masks []string) (added bool)
AddAll adds the given masks to this set.
func (*UserMaskSet) Length ¶ added in v0.10.1
func (set *UserMaskSet) Length() int
func (*UserMaskSet) Match ¶
func (set *UserMaskSet) Match(userhost string) bool
Match matches the given n!u@h.
func (*UserMaskSet) Remove ¶
func (set *UserMaskSet) Remove(mask string) (removed bool)
Remove removes the given mask from this set.
func (*UserMaskSet) String ¶
func (set *UserMaskSet) String() string
String returns the masks in this set.
type VHostConfig ¶ added in v0.12.0
type VHostInfo ¶ added in v0.12.0
type VHostInfo struct { ApprovedVHost string Enabled bool RequestedVHost string RejectedVHost string RejectionReason string LastRequestTime time.Time }
represents someone's status in hostserv
type WhoWas ¶
type WhoWas struct {
// contains filtered or unexported fields
}
WhoWas is an entry in the WhoWasList.
type WhoWasList ¶
type WhoWasList struct {
// contains filtered or unexported fields
}
WhoWasList holds our list of prior clients (for use with the WHOWAS command).
func NewWhoWasList ¶
func NewWhoWasList(size int) *WhoWasList
NewWhoWasList returns a new WhoWasList
func (*WhoWasList) Append ¶
func (list *WhoWasList) Append(whowas WhoWas)
Append adds an entry to the WhoWasList.
Source Files ¶
- accounts.go
- batch.go
- channel.go
- channelmanager.go
- channelreg.go
- chanserv.go
- client.go
- client_lookup_set.go
- commands.go
- config.go
- constants.go
- database.go
- dline.go
- errors.go
- fakelag.go
- gateways.go
- getters.go
- handlers.go
- help.go
- hostserv.go
- idletimer.go
- kline.go
- legacy.go
- modes.go
- monitor.go
- nickname.go
- nickserv.go
- numerics.go
- responsebuffer.go
- roleplay.go
- semaphores.go
- server.go
- services.go
- snomanager.go
- socket.go
- stats.go
- strings.go
- types.go
- whowas.go