Newer
Older
wg-portal / internal / server / ldapsync.go
@Christoph Haas Christoph Haas on 17 Nov 2020 882 bytes auto create account, sync ldap disabled flag
package server

import (
	"time"

	"github.com/h44z/wg-portal/internal/ldap"
	log "github.com/sirupsen/logrus"
)

// SyncLdapAttributesWithWireGuard starts to synchronize the "disabled" attribute from ldap.
// Users will be automatically disabled once they are disabled in ldap.
// This method is blocking.
func (s *Server) SyncLdapAttributesWithWireGuard() error {
	allUsers := s.users.GetAllUsers()
	for i := range allUsers {
		user := allUsers[i]
		if user.LdapUser == nil {
			continue // skip non ldap users
		}

		if user.DeactivatedAt != nil {
			continue // skip already disabled interfaces
		}

		if ldap.IsLdapUserDisabled(allUsers[i].LdapUser.Attributes["userAccountControl"]) {
			now := time.Now()
			user.DeactivatedAt = &now
			if err := s.UpdateUser(user, now); err != nil {
				log.Errorf("Failed to disable user %s: %v", user.Email, err)
			}
		}
	}
	return nil
}