Files
pgplockd/main.go
2021-03-16 22:02:59 -04:00

73 lines
1.5 KiB
Go

package main
import (
"fmt"
"io/ioutil"
"os/user"
"time"
"github.com/coreos/go-systemd/v22/journal"
"github.com/coreos/go-systemd/v22/login1"
)
var (
conn login1.Conn
sess login1.Session
keyID string
unlock = false
)
func main() {
if !journal.Enabled() {
return
}
journal.Print(journal.PriAlert, "Starting pamlockd")
setUp()
go timeOutLoop()
fmt.Printf("%+v\n%+v\n", sess, keyID)
}
func timeOutLoop() {
//TODO: Implement an actual check for unlock status
for {
time.Sleep(30 * time.Second)
if !unlock {
journal.Print(journal.PriInfo, "Timeout reached waiting for unlock. Locking session!")
conn.LockSession(sess.ID)
}
time.Sleep(5 * time.Minute)
}
}
func setUp() {
journal.Print(journal.PriInfo, "Opening new connection to logind.")
conn, err := login1.New()
if err != nil {
journal.Print(journal.PriCrit, "Unable to open login1 connection: %+v\n", err)
return
}
journal.Print(journal.PriInfo, "Getting current user.")
usr, err := user.Current()
if err != nil {
journal.Print(journal.PriCrit, "Unable to determine current user: %+v\n", err)
return
}
journal.Print(journal.PriInfo, "Getting current session from Active Sessions.")
dop, err := conn.GetActiveSession()
sessions, err := conn.ListSessions()
for _, v := range sessions {
if v.Path == dop {
sess = v
}
}
content, err := ioutil.ReadFile(fmt.Sprintf("%+v/.pgplockd", usr.HomeDir))
if err != nil {
journal.Print(journal.PriCrit, "Unable to read ~/.pgplockd config: %+v\n", err)
return
}
keyID = string(content)
}