#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
直接測試LDAP認證
"""

import ldap3
from ldap3 import Server, Connection, ALL

def test_ldap_auth(username, password):
    """測試LDAP認證"""
    try:
        server = Server('panjit.com.tw', port=389, get_info=ALL)
        bind_dn = "CN=LdapBind,CN=Users,DC=PANJIT,DC=COM,DC=TW"
        bind_password = "panjit2481"
        
        print(f"Testing LDAP authentication for: {username}")
        
        # 建立服務帳號連線
        service_conn = Connection(server, user=bind_dn, password=bind_password, auto_bind=True)
        print("Service connection established")
        
        # 搜尋使用者
        search_base = "OU=PANJIT,DC=panjit,DC=com,DC=tw"
        search_filter = f"(userPrincipalName={username})"
        
        result = service_conn.search(search_base, search_filter, 
                                   attributes=['displayName', 'mail', 'department', 'distinguishedName'])
        
        if not result or not service_conn.entries:
            print("User not found in LDAP directory")
            service_conn.unbind()
            return False
        
        user_entry = service_conn.entries[0]
        user_dn = str(user_entry.distinguishedName)
        
        print(f"Found user: {user_entry.displayName}")
        print(f"DN: {user_dn}")
        print(f"Email: {user_entry.mail}")
        
        service_conn.unbind()
        
        # 驗證使用者密碼
        print("Testing password authentication...")
        user_conn = Connection(server, user=user_dn, password=password)
        
        if user_conn.bind():
            print("Password authentication successful!")
            user_conn.unbind()
            return True
        else:
            print("Password authentication failed")
            print(f"LDAP error: {user_conn.last_error}")
            return False
            
    except Exception as e:
        print(f"LDAP test failed: {e}")
        return False

if __name__ == '__main__':
    # 測試已知的管理員帳號
    username = 'ymirliu@panjit.com.tw'
    password = 'ˇ3EDC4rfv5tgb'
    
    print("=== LDAP Direct Authentication Test ===")
    success = test_ldap_auth(username, password)
    
    if success:
        print("\nResult: LDAP authentication works correctly")
    else:
        print("\nResult: LDAP authentication failed - check credentials or connection")