source: n4d-server-plugins/trunk/fuentes/server-install-files/usr/share/n4d/python-plugins/PasswordManager.py @ 6719

Last change on this file since 6719 was 6719, checked in by hectorgh, 20 months ago

Fixing password db encoding

File size: 3.1 KB
Line 
1# -*- coding: utf-8 -*-
2
3import os
4import shutil
5import json
6import codecs
7
8import sqlite3
9
10class PasswordManager:
11       
12        PASSWORD_FILE="/net/server-sync/var/lib/n4d/n4d.json"
13        LOG_PATH="/net/server-sync/var/lib/n4d"
14       
15        def __init__(self):
16                       
17                self.users={}
18                       
19                if not os.path.exists("/lib/systemd/system/net-server\\x2dsync.mount"):
20                       
21                        if os.path.exists("/net/server-sync/var/lib/n4d/n4d.sqlite"):
22                                ret=self.sqlite_to_json(True)
23                                if ret:
24                                        os.remove("/net/server-sync/var/lib/n4d/n4d.sqlite")
25                        else:
26                                self.load_password_file()
27                       
28        #def init
29
30       
31        def sqlite_to_json(self,force_write=False):
32               
33                try:
34                        conn = sqlite3.connect("/net/server-sync/var/lib/n4d/n4d.sqlite")
35                        cursor = conn.cursor()
36                        cursor.execute('select cn,sn,uid,passwd from password')
37                        result = cursor.fetchall()
38                        conn.close()
39                       
40                        self.users={}
41                        for user in result :
42                                self.users[user[2]]={}
43                                self.users[user[2]]["cn"] = user[0].encode('utf-8')
44                                self.users[user[2]]["sn"] = user[1].encode('utf-8')
45                                self.users[user[2]]["passwd"] = user[3]
46                       
47                        if force_write:
48                                self.write_file()
49                       
50                        return True
51                except Exception as e:
52                        print(e)
53                       
54                        return False
55               
56        #def sqlite_to_json
57       
58               
59        def load_password_file(self, f=None):
60
61                self.users={}
62                if f==None:
63                        f=PasswordManager.PASSWORD_FILE
64                try:
65                        pfile=open(f,"r")
66                        self.users=json.load(pfile)
67                        pfile.close()
68                                                       
69                except Exception as e:
70                        print("[PasswordManager] Error reading file: %s"%e)
71                               
72        #def load_json
73       
74       
75        def write_file(self,f=None):
76               
77                if f==None:
78                        f=PasswordManager.PASSWORD_FILE
79               
80                set_perms=False
81                if not os.path.exists(f):
82                        set_perms=True
83               
84                data=unicode(json.dumps(self.users,indent=4,encoding="utf-8",ensure_ascii=False)).encode("utf-8")
85                output_file=open(f,"w")
86                output_file.write(data)
87                output_file.close()
88               
89                if set_perms:
90                        prevmask=os.umask(0)
91                        os.chmod(f,0640)
92                        os.umask(prevmask)
93               
94        #def write_file
95
96       
97        def add_password(self,user_name,cn,sn,password):
98               
99                if user_name not in self.users:
100                        self.users[user_name]={}
101               
102                if type(cn)==str:
103                        cn=cn.decode("utf-8")
104                if type(sn)==str:
105                        sn=sn.decode("utf-8")
106       
107                self.users[user_name]["cn"]=cn
108                self.users[user_name]["sn"]=sn
109                self.users[user_name]["passwd"]=password
110               
111                self.write_file()
112               
113        #def add_password
114       
115       
116        def remove_password(self,user_name):
117               
118                if user_name in self.users:
119                        self.users.pop(user_name)
120                       
121                return True
122       
123        #def remove_password
124       
125       
126        def get_passwords(self):
127               
128                pwd_list = []
129                for user in self.users :
130                        a = {}
131                        a['cn'] = self.users[user]["cn"]
132                        a['sn'] = self.users[user]["sn"]
133                        a['uid'] = user
134                        a['passwd'] = self.users[user]["passwd"]
135                        pwd_list.append(a)
136
137                return pwd_list
138               
139        #def get_passwords
140       
141       
142        def is_user_in_database(self,uid):
143               
144                for user in self.users:
145                        return True
146                       
147                return False
148               
149        #def is_user_in_database
150       
151       
152        def set_externally_modified(self,uid):
153               
154                if self.is_user_in_database(uid):
155                        self.add_password(uid,self.users[uid]["cn"],self.users[uid]["sn"],"#! CHANGED MANUALLY !#")
156                       
157        #def set_externally_modified   
158       
159       
160#class PasswordManager
161
162if __name__=="__main__":
163       
164        pm=PasswordManager()
165       
166
Note: See TracBrowser for help on using the repository browser.