32 lines
569 B
Go
32 lines
569 B
Go
package repositories
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
|
|
"github.com/msteinert/pam"
|
|
)
|
|
|
|
type PamRepository struct{}
|
|
|
|
func NewPamRepository() *PamRepository {
|
|
return &PamRepository{}
|
|
}
|
|
|
|
func (pr *PamRepository) IsValidUser(user, password string) bool {
|
|
tx, err := pam.StartFunc("virteen", user, func(s pam.Style, msg string) (string, error) {
|
|
return password, nil
|
|
})
|
|
if err != nil {
|
|
panic("failed to start PAM transaction")
|
|
}
|
|
|
|
err = tx.Authenticate(pam.Silent)
|
|
if err != nil {
|
|
fmt.Fprintf(os.Stderr, "authenticate: %s\n", err.Error())
|
|
return false
|
|
}
|
|
|
|
return true
|
|
}
|