iw/app/models/usergroupsearchitem.go

80 lines
2.6 KiB
Go

package models
import (
"github.com/mikkolehtisalo/revel/ldapuserdetails"
"fmt"
"strings"
"github.com/revel/revel"
//"time"
// _ "github.com/lib/pq"
//"github.com/jmoiron/sqlx"
)
var (
ldap_user_filter string = "&(objectClass=*)"
ldap_user_uid_attr string = "*"
ldap_user_cn_attr string = "*"
ldap_user_base string = "dc=*,dc=*"
ldap_group_filter string = "&(objectClass=*)"
ldap_group_cn_attr string = "*"
ldap_group_dn_attr string = "*"
ldap_group_base string = "dc=*,dc=*"
)
func get_c_str(name string) string {
if tmp, ok := revel.Config.String(name); !ok {
panic(fmt.Errorf("%s invalid", name))
} else {
return tmp
}
}
func init() {
revel.OnAppStart(func() {
ldap_user_filter = get_c_str("ldap.user_filter")
ldap_user_base = get_c_str("ldap.user_base")
ldap_user_uid_attr = get_c_str("ldap.user_uid_attr")
ldap_user_cn_attr = get_c_str("ldap.user_cn_attr")
ldap_group_filter = get_c_str("ldap.group_filter")
ldap_group_base = get_c_str("ldap.group_base")
ldap_group_cn_attr = get_c_str("ldap.group_cn_attr")
ldap_group_dn_attr = get_c_str("ldap.group_dn_attr")
})
}
type UserGroupSearchItem struct {
Id string
Name string
Type string
}
func ListUserGroupSearchItems(query string) []UserGroupSearchItem {
items := []UserGroupSearchItem{}
l := ldapuserdetails.Get_connection()
defer l.Close()
sru := ldapuserdetails.QueryLdap(ldap_user_base, strings.Replace(ldap_user_filter, "*",
fmt.Sprintf("*%s*",query), -1), []string{ldap_user_uid_attr, ldap_user_cn_attr})
srg := ldapuserdetails.QueryLdap(ldap_group_base, strings.Replace(ldap_group_filter, "*",
fmt.Sprintf("*%s*",query), -1), []string{ldap_group_cn_attr, ldap_group_dn_attr})
for _, user := range sru.Entries {
item := UserGroupSearchItem {
Id: fmt.Sprintf("u:%s",user.GetAttributeValue(ldap_user_uid_attr)),
Name: fmt.Sprintf("%s (u:%s)", user.GetAttributeValue(ldap_user_cn_attr), user.GetAttributeValue(ldap_user_uid_attr)),
Type: "user"}
items = append(items, item)
}
for _, group := range srg.Entries {
item := UserGroupSearchItem {
Id: fmt.Sprintf("g:%s", group.GetAttributeValue(ldap_group_cn_attr)),
Name: fmt.Sprintf("%s (g:%s)", group.GetAttributeValue(ldap_group_cn_attr), group.GetAttributeValue(ldap_group_cn_attr)),
Type: "group"}
items = append(items, item)
}
return items
}