Added files.
This commit is contained in:
126
imapserver/session.go
Normal file
126
imapserver/session.go
Normal file
@@ -0,0 +1,126 @@
|
||||
package imapserver
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/emersion/go-imap/v2"
|
||||
"github.com/emersion/go-imap/v2/internal/imapwire"
|
||||
"github.com/emersion/go-sasl"
|
||||
)
|
||||
|
||||
var errAuthFailed = &imap.Error{
|
||||
Type: imap.StatusResponseTypeNo,
|
||||
Code: imap.ResponseCodeAuthenticationFailed,
|
||||
Text: "Authentication failed",
|
||||
}
|
||||
|
||||
// ErrAuthFailed is returned by Session.Login on authentication failure.
|
||||
var ErrAuthFailed = errAuthFailed
|
||||
|
||||
// GreetingData is the data associated with an IMAP greeting.
|
||||
type GreetingData struct {
|
||||
PreAuth bool
|
||||
}
|
||||
|
||||
// NumKind describes how a number should be interpreted: either as a sequence
|
||||
// number, either as a UID.
|
||||
type NumKind int
|
||||
|
||||
const (
|
||||
NumKindSeq = NumKind(imapwire.NumKindSeq)
|
||||
NumKindUID = NumKind(imapwire.NumKindUID)
|
||||
)
|
||||
|
||||
// String implements fmt.Stringer.
|
||||
func (kind NumKind) String() string {
|
||||
switch kind {
|
||||
case NumKindSeq:
|
||||
return "seq"
|
||||
case NumKindUID:
|
||||
return "uid"
|
||||
default:
|
||||
panic(fmt.Errorf("imapserver: unknown NumKind %d", kind))
|
||||
}
|
||||
}
|
||||
|
||||
func (kind NumKind) wire() imapwire.NumKind {
|
||||
return imapwire.NumKind(kind)
|
||||
}
|
||||
|
||||
// Session is an IMAP session.
|
||||
type Session interface {
|
||||
Close() error
|
||||
|
||||
// Not authenticated state
|
||||
Login(username, password string) error
|
||||
|
||||
// Authenticated state
|
||||
Select(mailbox string, options *imap.SelectOptions) (*imap.SelectData, error)
|
||||
Create(mailbox string, options *imap.CreateOptions) error
|
||||
Delete(mailbox string) error
|
||||
Rename(mailbox, newName string, options *imap.RenameOptions) error
|
||||
Subscribe(mailbox string) error
|
||||
Unsubscribe(mailbox string) error
|
||||
List(w *ListWriter, ref string, patterns []string, options *imap.ListOptions) error
|
||||
Status(mailbox string, options *imap.StatusOptions) (*imap.StatusData, error)
|
||||
Append(mailbox string, r imap.LiteralReader, options *imap.AppendOptions) (*imap.AppendData, error)
|
||||
Poll(w *UpdateWriter, allowExpunge bool) error
|
||||
Idle(w *UpdateWriter, stop <-chan struct{}) error
|
||||
|
||||
// Selected state
|
||||
Unselect() error
|
||||
Expunge(w *ExpungeWriter, uids *imap.UIDSet) error
|
||||
Search(kind NumKind, criteria *imap.SearchCriteria, options *imap.SearchOptions) (*imap.SearchData, error)
|
||||
Fetch(w *FetchWriter, numSet imap.NumSet, options *imap.FetchOptions) error
|
||||
Store(w *FetchWriter, numSet imap.NumSet, flags *imap.StoreFlags, options *imap.StoreOptions) error
|
||||
Copy(numSet imap.NumSet, dest string) (*imap.CopyData, error)
|
||||
}
|
||||
|
||||
// SessionNamespace is an IMAP session which supports NAMESPACE.
|
||||
type SessionNamespace interface {
|
||||
Session
|
||||
|
||||
// Authenticated state
|
||||
Namespace() (*imap.NamespaceData, error)
|
||||
}
|
||||
|
||||
// SessionMove is an IMAP session which supports MOVE.
|
||||
type SessionMove interface {
|
||||
Session
|
||||
|
||||
// Selected state
|
||||
Move(w *MoveWriter, numSet imap.NumSet, dest string) error
|
||||
}
|
||||
|
||||
// SessionIMAP4rev2 is an IMAP session which supports IMAP4rev2.
|
||||
type SessionIMAP4rev2 interface {
|
||||
Session
|
||||
SessionNamespace
|
||||
SessionMove
|
||||
}
|
||||
|
||||
// SessionSASL is an IMAP session which supports its own set of SASL
|
||||
// authentication mechanisms.
|
||||
type SessionSASL interface {
|
||||
Session
|
||||
AuthenticateMechanisms() []string
|
||||
Authenticate(mech string) (sasl.Server, error)
|
||||
}
|
||||
|
||||
// SessionUnauthenticate is an IMAP session which supports UNAUTHENTICATE.
|
||||
type SessionUnauthenticate interface {
|
||||
Session
|
||||
|
||||
// Authenticated state
|
||||
Unauthenticate() error
|
||||
}
|
||||
|
||||
// SessionAppendLimit is an IMAP session which has the same APPEND limit for
|
||||
// all mailboxes.
|
||||
type SessionAppendLimit interface {
|
||||
Session
|
||||
|
||||
// AppendLimit returns the maximum size in bytes that can be uploaded to
|
||||
// this server in an APPEND command.
|
||||
AppendLimit() uint32
|
||||
}
|
||||
Reference in New Issue
Block a user