package routes import ( "fmt" "log" "net/http" "github.com/flamego/flamego" "github.com/flamego/template" "github.com/spf13/viper" "gopkg.in/ldap.v2" ) func GetUserInfo(c flamego.Context, t template.Template, data template.Data) { // create new LDAP connection l, err := ldap.Dial("tcp", fmt.Sprintf("%s:%d", viper.GetString("host"), viper.GetInt("port"))) if err != nil { log.Fatal(err) } defer l.Close() // bind as the admin user err = l.Bind(viper.GetString("bind_dn"), viper.GetString("bind_pw")) if err != nil { log.Fatal(err) } // set up user DN userDn := fmt.Sprintf("%s=%s,%s", viper.GetString("user.uid_attr"), c.Param("uid"), viper.GetString("user.base_ou")) searchRequest := ldap.NewSearchRequest( userDn, // The base dn to search ldap.ScopeWholeSubtree, ldap.NeverDerefAliases, 0, 0, false, "(&(objectClass=inetOrgPerson))", // The filter to apply nil, // A list attributes to retrieve nil, ) sr, err := l.Search(searchRequest) if err != nil { log.Fatal(err) } data["user"] = sr.Entries[0] data["title"] = "User Info" t.HTML(http.StatusOK, "user/info") }