最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

go - LDAP plugin for apache-answer-incubator - Stack Overflow

programmeradmin2浏览0评论

How to connect to apache-answer-incubator through Ldap for authentication? And how to use the plugin created in the authentication module for login?

I tried creating a plugin on lines of oauth plugin. Couldn't get it to work since I am new to Go language.

This is the ldap plugin I created. How to use this and get it to run?

package answer
import (
  "embed"
  "github/apache/incubator-answer-plugins/util"

  "github/apache/incubator-answer/plugin"
    "github/go-ldap/ldap/v3"
    "fmt"
  

)


//go:embed  info.yaml
var Info embed.FS

type Ldapconn struct {
  ldapServer string
    ldapPort   int
    bindDN     string
    password   string
  conn       *ldap.Conn
}
func init() {
    plugin.Register(&Ldapconn{})
}
func (Ldapconn) Info() plugin.Info {
  info := &util.Info{}
    info.GetInfo(Info)

  return plugin.Info{
    Name:        plugin.MakeTranslator("Ldapconn"),
    SlugName:    info.SlugName,
    Description: plugin.MakeTranslator(""),
    Author:      info.Author,
    Version:     info.Version,
    Link:        info.Link,
  }
}

  func New(ldapServer string, ldapPort int, bindDN string, password string) *Ldapconn {
    return &Ldapconn{
      ldapServer: ldapServer,
      ldapPort:   ldapPort,
      bindDN:     bindDN,
      password:   password,
    }
  }

    func (c *Ldapconn) Connect() error {
      // Connect to the LDAP server.
      conn, err := ldap.Dial("tcp", fmt.Sprintf("%s:%d", c.ldapServer, c.ldapPort))
      if err != nil {
        return fmt.Errorf("failed to connect to LDAP server: %v", err)
      }
      c.conn = conn
    
      // Bind with provided DN and password.
      err = c.conn.Bind(c.bindDN, c.password)
      if err != nil {
        return fmt.Errorf("failed to bind to LDAP server: %v", err)
      }
    
      return nil
    }


    // Search performs an LDAP search with the provided base DN and filter.
func (c *Ldapconn) Search(baseDN, filter string) ([]*ldap.Entry, error) {
    // Prepare the search request.
    searchRequest := ldap.NewSearchRequest(
        baseDN,                   // The base DN for the search
        ldap.ScopeWholeSubtree,    // Scope of the search
        ldap.NeverDerefAliases,   // Dereferencing aliases
        0,                         // Time limit (0 = no limit)
        0,                         // Size limit (0 = no limit)
        false,                     // TypesOnly flag (false = return attributes)
        filter,                    // Search filter (e.g., "(uid=jdoe)")
        []string{"dn", "cn", "uid"}, // List of attributes to return
        nil,
    )

    // Execute the search.
    result, err := c.conn.Search(searchRequest)
    if err != nil {
        return nil, fmt.Errorf("failed to search LDAP: %v", err)
    }

    return result.Entries, nil
}

// Close closes the connection to the LDAP server.
func (c *Ldapconn) Close() {
    if c.conn != nil {
        c.conn.Unbind()
        c.conn.Close()
    }
}
  

发布评论

评论列表(0)

  1. 暂无评论