1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- package auth
- import (
- "bufio"
- "log"
- "os"
- "strings"
- config "git.semlanik.org/semlanik/gostfix/config"
- utils "git.semlanik.org/semlanik/gostfix/utils"
- )
- type Authenticator struct {
- mailMaps map[string]string
- }
- func NewAuthenticator() (a *Authenticator) {
- a = &Authenticator{
- mailMaps: readMailMaps(),
- }
- return
- }
- func (a *Authenticator) Authenticate(user, password string) (string, bool) {
- if !utils.RegExpUtilsInstance().EmailChecker.MatchString(user) {
- return "", false
- }
- _, ok := a.mailMaps[user]
- return "", ok
- }
- func (a *Authenticator) Verify(user, token string) bool {
- if !utils.RegExpUtilsInstance().EmailChecker.MatchString(user) {
- return false
- }
- _, ok := a.mailMaps[user]
- return ok
- }
- func (a *Authenticator) MailPath(user string) string {
- return a.mailMaps[user]
- }
- func readMailMaps() map[string]string {
- mailMaps := make(map[string]string)
- mapsFile := config.ConfigInstance().VMailboxMaps
- if !utils.FileExists(mapsFile) {
- return mailMaps
- }
- file, err := os.Open(mapsFile)
- if err != nil {
- log.Fatalf("Unable to open virtual mailbox maps %s\n", mapsFile)
- }
- scanner := bufio.NewScanner(file)
- for scanner.Scan() {
- mailPathPair := strings.Split(scanner.Text(), " ")
- if len(mailPathPair) != 2 {
- log.Printf("Invalid record in virtual mailbox maps %s", scanner.Text())
- continue
- }
- mailMaps[mailPathPair[0]] = mailPathPair[1]
- }
- return mailMaps
- }
|