@@ -47,68 +47,80 @@ def main():
47
47
48
48
49
49
def sync ():
50
- ldap_connector = ldap .initialize (f"{ config ['LDAP_URI' ]} " )
51
- ldap_connector .set_option (ldap .OPT_REFERRALS , 0 )
52
- ldap_connector .simple_bind_s (
53
- config ['LDAP_BIND_DN' ], config ['LDAP_BIND_DN_PASSWORD' ])
50
+ api_status = api .check_api ()
51
+
52
+ if api_status != True :
53
+ logging .info (f"mailcow is not fully up, skipping this sync..." )
54
+ return
55
+
56
+ try :
57
+ ldap_connector = ldap .initialize (f"{ config ['LDAP_URI' ]} " )
58
+ ldap_connector .set_option (ldap .OPT_REFERRALS , 0 )
59
+ ldap_connector .simple_bind_s (
60
+ config ['LDAP_BIND_DN' ], config ['LDAP_BIND_DN_PASSWORD' ])
61
+ except :
62
+ logging .info (
63
+ f"Can't connect to LDAP server { config ['LDAP_URI' ]} , skipping this sync..." )
64
+ return
54
65
55
66
ldap_results = ldap_connector .search_s (config ['LDAP_BASE_DN' ], ldap .SCOPE_SUBTREE ,
56
67
config ['LDAP_FILTER' ],
57
- ['userPrincipalName ' , 'cn ' , 'userAccountControl' ])
68
+ ['mail ' , 'displayName ' , 'userAccountControl' ])
58
69
70
+ logging .info (ldap_results )
59
71
filedb .session_time = datetime .datetime .now ()
60
72
61
73
for x in ldap_results :
62
74
try :
63
- logging . info ( "Working on " + x [1 ][ 'sAMAccountName' ])
64
- email = x [ 1 ][ 'userPrincipalName' ][ 0 ]. decode ( )
65
- ldap_name = x [ 1 ][ 'displayName' ][ 0 ]. decode ()
66
- ldap_active = False if int (
67
- x [ 1 ][ 'userAccountControl' ][ 0 ]. decode ()) & 0b10 else True
68
-
69
- ( db_user_exists , db_user_active ) = filedb . check_user ( email )
70
- ( api_user_exists , api_user_active , api_name ) = api . check_user ( email )
71
-
72
- unchanged = True
73
-
74
- if not db_user_exists :
75
- filedb . add_user (email , ldap_active )
76
- ( db_user_exists , db_user_active ) = ( True , ldap_active )
77
- logging . info (
78
- f"Added filedb user: { email } (Active: { ldap_active } )" )
79
- unchanged = False
80
-
81
- if not api_user_exists :
82
- api . add_user ( email , ldap_name , ldap_active , 5120 )
83
- ( api_user_exists , api_user_active , api_name ) = (
84
- True , ldap_active , ldap_name )
85
- logging . info (
86
- f"Added Mailcow user: { email } (Active: { ldap_active } )" )
87
- unchanged = False
88
-
89
- if db_user_active != ldap_active :
90
- filedb . user_set_active_to ( email , ldap_active )
91
- logging . info (
92
- f" { 'Activated' if ldap_active else 'Deactived' } { email } in filedb" )
93
- unchanged = False
94
-
95
- if api_user_active != ldap_active :
96
- api . edit_user ( email , active = ldap_active )
97
- logging . info (
98
- f" { 'Activated' if ldap_active else 'Deactived' } { email } in Mailcow" )
99
- unchanged = False
100
-
101
- if api_name != ldap_name :
102
- api . edit_user ( email , name = ldap_name )
103
- logging . info (
104
- f"Changed name of { email } in Mailcow to { ldap_name } " )
105
- unchanged = False
106
-
107
- if unchanged :
108
- logging . info ( f"Checked user { email } , unchanged" )
109
- except Exception :
110
- logging . info ( f"Exception during something. See above" )
111
- pass
75
+ ldap_item = x [1 ]
76
+ logging . info ( f"Working on { ldap_item [ 'mail' ] } " )
77
+ except :
78
+ logging . info (
79
+ f"An error occurred while iterating through the LDAP users, skipping this sync..." )
80
+ return
81
+
82
+ email = ldap_item [ 'mail' ][ 0 ]. decode ( )
83
+ ldap_name = ldap_item [ 'displayName' ][ 0 ]. decode ()
84
+ ldap_active = True
85
+
86
+ ( db_user_exists , db_user_active ) = filedb . check_user ( email )
87
+ ( api_user_exists , api_user_active , api_name ) = api . check_user (email )
88
+
89
+ unchanged = True
90
+
91
+ if not db_user_exists :
92
+ filedb . add_user ( email , ldap_active )
93
+ ( db_user_exists , db_user_active ) = ( True , ldap_active )
94
+ logging . info ( f"Added filedb user: { email } (Active: { ldap_active } )" )
95
+ unchanged = False
96
+
97
+ if not api_user_exists :
98
+ api . add_user ( email , ldap_name , ldap_active , 5120 )
99
+ ( api_user_exists , api_user_active , api_name ) = (
100
+ True , ldap_active , ldap_name )
101
+ logging . info (
102
+ f"Added Mailcow user: { email } (Active: { ldap_active } )" )
103
+ unchanged = False
104
+
105
+ if db_user_active != ldap_active :
106
+ filedb . user_set_active_to ( email , ldap_active )
107
+ logging . info (
108
+ f" { 'Activated' if ldap_active else 'Deactived' } { email } in filedb" )
109
+ unchanged = False
110
+
111
+ if api_user_active != ldap_active :
112
+ api . edit_user ( email , active = ldap_active )
113
+ logging . info (
114
+ f" { 'Activated' if ldap_active else 'Deactived' } { email } in Mailcow" )
115
+ unchanged = False
116
+
117
+ if api_name != ldap_name :
118
+ api . edit_user ( email , name = ldap_name )
119
+ logging . info ( f"Changed name of { email } in Mailcow to { ldap_name } " )
120
+ unchanged = False
121
+
122
+ if unchanged :
123
+ logging . info ( f"Checked user { email } , unchanged" )
112
124
113
125
for email in filedb .get_unchecked_active_users ():
114
126
(api_user_exists , api_user_active , _ ) = api .check_user (email )
0 commit comments