Esempio n. 1
0
// InitializeUser initializes the store by creating the default mailboxes and
// inserting the welcome message.
func InitializeUser(u *store.UserData, keys *keymgr.Manager, GenKeys int16) error {

	// Create Inbox.
	mbox, err := u.NewFolder(InboxFolderName)
	if err != nil {
		return err
	}
	inbox, err := newMailbox(mbox, keys.Names())
	if err != nil {
		return err
	}

	_, err = u.NewFolder(OutboxFolderName)
	if err != nil {
		return err
	}
	_, err = u.NewFolder(SentFolderName)
	if err != nil {
		return err
	}
	_, err = u.NewFolder(LimboFolderName)
	if err != nil {
		return err
	}
	_, err = u.NewFolder(TrashFolderName)
	if err != nil {
		return err
	}
	_, err = u.NewFolder(CommandsFolderName)
	if err != nil {
		return err
	}
	_, err = u.NewFolder(DraftsFolderName)
	if err != nil {
		return err
	}

	// Determine how many new keys to produce. Default is 0, unless
	// the keymanager is empty, in which case it is 1.
	var genkeys uint16

	if GenKeys < 0 || keys.Size() == 0 {
		genkeys = 1
	} else {
		genkeys = uint16(GenKeys)
	}

	var i uint16
	for i = 0; i < genkeys; i++ {
		keys.NewHDIdentity(1, "")
	}

	// Get all keys from key manager.
	addresses := keys.Addresses()
	tags := keys.Names()

	// For each key, create a mailbox.
	var toAddr string
	keyList := ""

	for _, addr := range addresses {
		toAddr = addr
		var tag string
		if t, ok := tags[addr]; ok {
			tag = t
		}
		keyList = fmt.Sprint(keyList, fmt.Sprintf("\t%[email protected] %s\n", addr, tag))
	}

	welcome := fmt.Sprintf(welcomeMsg, keyList)

	// Add the introductory message.
	from := "*****@*****.**"
	subject := "Welcome to bmagent!"

	err = inbox.AddNew(&Bmail{
		From: from,
		To:   fmt.Sprintf("*****@*****.**", toAddr),
		Content: &format.Encoding2{
			Subject: subject,
			Body:    welcome,
		},
	}, types.FlagRecent)
	if err != nil {
		return err
	}

	return nil
}