Browse Source

ldap part 3

AY's Macbook Pro 3 năm trước cách đây
mục cha
commit
a54d969847
2 tập tin đã thay đổi với 26 bổ sung11 xóa
  1. 1 1
      ldap.go
  2. 25 10
      mod/auth/ldap/ldap.go

+ 1 - 1
ldap.go

@@ -9,7 +9,7 @@ import (
 
 func ldapInit() {
 	//ldap
-	ldapHandler := ldap.NewLdapHandler(authAgent, registerHandler, sysdb, permissionHandler)
+	ldapHandler := ldap.NewLdapHandler(authAgent, registerHandler, sysdb, permissionHandler, userHandler)
 
 	//add a entry to the system settings
 	adminRouter := prout.NewModuleRouter(prout.RouterOption{

+ 25 - 10
mod/auth/ldap/ldap.go

@@ -13,6 +13,7 @@ import (
 	"imuslab.com/arozos/mod/common"
 	db "imuslab.com/arozos/mod/database"
 	permission "imuslab.com/arozos/mod/permission"
+	"imuslab.com/arozos/mod/user"
 )
 
 type ldapHandler struct {
@@ -21,6 +22,7 @@ type ldapHandler struct {
 	reg               *reg.RegisterHandler
 	coredb            *db.Database
 	permissionHandler *permission.PermissionHandler
+	userHandler       *user.UserHandler
 }
 
 type Config struct {
@@ -40,11 +42,11 @@ type UserAccount struct {
 
 /*
 TODO: not sure why auto redirect will keep enable
-
+TODO: stop user to syncorize if the current user will lost admin access
 */
 
 //NewLdapHandler xxx
-func NewLdapHandler(authAgent *auth.AuthAgent, register *reg.RegisterHandler, coreDb *db.Database, permissionHandler *permission.PermissionHandler) *ldapHandler {
+func NewLdapHandler(authAgent *auth.AuthAgent, register *reg.RegisterHandler, coreDb *db.Database, permissionHandler *permission.PermissionHandler, userHandler *user.UserHandler) *ldapHandler {
 	//ldap handler init
 	log.Println("Starting LDAP client...")
 	err := coreDb.NewTable("ldap")
@@ -65,6 +67,7 @@ func NewLdapHandler(authAgent *auth.AuthAgent, register *reg.RegisterHandler, co
 		reg:               register,
 		coredb:            coreDb,
 		permissionHandler: permissionHandler,
+		userHandler:       userHandler,
 	}
 
 	return &LDAPHandler
@@ -202,7 +205,11 @@ func (ldap *ldapHandler) getAllUser(limit int) []UserAccount {
 			break
 		}
 	}
-	return accounts[1:]
+	if len(accounts) > 0 {
+		return accounts[1:]
+	} else {
+		return []UserAccount{}
+	}
 }
 
 func (ldap *ldapHandler) TestConnection(w http.ResponseWriter, r *http.Request) {
@@ -219,22 +226,30 @@ func (ldap *ldapHandler) TestConnection(w http.ResponseWriter, r *http.Request)
 }
 
 func (ldap *ldapHandler) SyncorizeUser(w http.ResponseWriter, r *http.Request) {
+	//currentLoggedInUser, err := ldap.userHandler.GetUserInfoFromRequest(w, r)
+	//if err != nil {
+	//	common.SendErrorResponse(w, "Error while getting user info")
+	//	return
+	//}
 	ldapUsersList := ldap.getAllUser(-1)
-	//arozUsersList := ldap.ag.ListUsers()
 
 	for _, ldapUser := range ldapUsersList {
 		//check if user does not exist in system
 		if !ldap.ag.UserExists(ldapUser.Username) {
 			//TODO change password
-			//TODO reg.GetDefaultUserGroup()
 			ldap.ag.CreateUserAccount(ldapUser.Username, "P@ssw0rd", ldapUser.EquivGroup)
 		} else {
 			//if exists, then check if the user group is the same with ldap's setting
-			//ldapUserCurrentEquivGroup, _ := ldap.permissionHandler.GetUsersPermissionGroup(ldapUser.Username)
-			//for _, ldapUserNewEquivGroup := range ldapUser.EquivGroup {
-			//	if ldap.ag.
-			//}
+			//Get the permission groups by their ids
+			userinfo, err := ldap.userHandler.GetUserInfoFromUsername(ldapUser.Username)
+			if err != nil {
+				common.SendErrorResponse(w, "Error while getting user info")
+				return
+			}
+			newPermissionGroups := ldap.permissionHandler.GetPermissionGroupByNameList(ldapUser.EquivGroup)
+			//Set the user's permission to these groups
+			userinfo.SetUserPermissionGroup(newPermissionGroups)
 		}
 	}
-
+	common.SendOK(w)
 }