Forked the emersion/go-imap v1 project.
This commit is contained in:
45
imapserver/create.go
Normal file
45
imapserver/create.go
Normal file
@@ -0,0 +1,45 @@
|
||||
package imapserver
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"github.com/emersion/go-imap/v2"
|
||||
"github.com/emersion/go-imap/v2/internal"
|
||||
"github.com/emersion/go-imap/v2/internal/imapwire"
|
||||
)
|
||||
|
||||
func (c *Conn) handleCreate(dec *imapwire.Decoder) error {
|
||||
var (
|
||||
name string
|
||||
options imap.CreateOptions
|
||||
)
|
||||
if !dec.ExpectSP() || !dec.ExpectMailbox(&name) {
|
||||
return dec.Err()
|
||||
}
|
||||
if dec.SP() {
|
||||
var name string
|
||||
if !dec.ExpectSpecial('(') || !dec.ExpectAtom(&name) || !dec.ExpectSP() {
|
||||
return dec.Err()
|
||||
}
|
||||
switch strings.ToUpper(name) {
|
||||
case "USE":
|
||||
var err error
|
||||
options.SpecialUse, err = internal.ExpectMailboxAttrList(dec)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
default:
|
||||
return newClientBugError("unknown CREATE parameter")
|
||||
}
|
||||
if !dec.ExpectSpecial(')') {
|
||||
return dec.Err()
|
||||
}
|
||||
}
|
||||
if !dec.ExpectCRLF() {
|
||||
return dec.Err()
|
||||
}
|
||||
if err := c.checkState(imap.ConnStateAuthenticated); err != nil {
|
||||
return err
|
||||
}
|
||||
return c.session.Create(name, &options)
|
||||
}
|
||||
Reference in New Issue
Block a user