Changeset 6201


Ignore:
Timestamp:
Nov 8, 2017, 2:28:34 PM (2 years ago)
Author:
hectorgh
Message:

moving teachers passwords to json file instead of sqlite

File:
1 edited

Legend:

Unmodified
Added
Removed
  • n4d-server-plugins/trunk/fuentes/server-install-files/usr/share/n4d/python-plugins/PasswordManager.py

    r4994 r6201  
    33import os
    44import shutil
     5import json
     6
    57import sqlite3
    68
    79class PasswordManager:
    810       
    9         PASSWORD_FILE="/net/server-sync/var/lib/n4d/n4d.sqlite"
     11        PASSWORD_FILE="/net/server-sync/var/lib/n4d/n4d.json"
    1012        LOG_PATH="/net/server-sync/var/lib/n4d"
    1113       
    1214        def __init__(self):
    1315                       
     16                self.users={}
     17                       
    1418                if not os.path.exists("/lib/systemd/system/net-server\\x2dsync.mount"):
    15                         self.create_database()
    16                
     19                        self.load_password_file()
    1720               
    1821        #def init
     22
    1923       
    20         def create_database(self):
    21                 if not os.path.exists(PasswordManager.PASSWORD_FILE):
    22                         if not os.path.exists(PasswordManager.LOG_PATH):
    23                                 os.makedirs(PasswordManager.LOG_PATH)
    24                         conn = sqlite3.connect(PasswordManager.PASSWORD_FILE)
    25                         cursor = conn.cursor()
    26                         cursor.execute('create table password (cn text, sn text, uid text, passwd text)')
    27                         conn.commit()
    28                         cursor.close()
    29                         conn.close()
    30                         prevmask = os.umask(0)
    31                         os.chmod(PasswordManager.PASSWORD_FILE,0640)
     24        def sqlite_to_json(self,f=None):
     25               
     26                conn = sqlite3.connect("/net/server-sync/var/lib/n4d/n4d.sqlite")
     27                cursor = conn.cursor()
     28                cursor.execute('select cn,sn,uid,passwd from password')
     29                result = cursor.fetchall()
     30                conn.close()
     31               
     32                self.users={}
     33                for user in result :
     34                        self.users[user[2]]={}
     35                        self.users[user[2]]["cn"] = user[0].encode('utf-8')
     36                        self.users[user[2]]["sn"] = user[1].encode('utf-8')
     37                        self.users[user[2]]["passwd"] = user[3]
     38               
     39                os.remove("/net/server-sync/var/lib/n4d/n4d.sqlite")
     40                self.write_file()
     41               
     42                return True
     43               
     44        #def sqlite_to_json
     45       
     46               
     47        def load_password_file(self, f=None):
     48
     49                if os.path.exists("/net/server-sync/var/lib/n4d/n4d.sqlite"):
     50                        self.sqlite_to_json()
     51                else:
     52                        self.users={}
     53                        if f==None:
     54                                f=PasswordManager.PASSWORD_FILE
     55                       
     56                        try:
     57                                pfile=open(f,"r")
     58                                self.users=json.load(pfile)
     59                                pfile.close()
     60                                                       
     61                        except Exception as e:
     62                                print("[PasswordManager] Error reading file: %s"%e)
     63                               
     64        #def load_json
     65       
     66       
     67        def write_file(self,f=None):
     68               
     69                if f==None:
     70                        f=PasswordManager.PASSWORD_FILE
     71               
     72                set_perms=True
     73                if not os.path.exists(f):
     74                        set_perms=True
     75               
     76                data=unicode(json.dumps(self.users,indent=4,encoding="utf-8",ensure_ascii=False)).encode("utf-8")
     77                output_file=open(f,"w")
     78                output_file.write(data)
     79                output_file.close()
     80               
     81                if set_perms:
     82                        prevmask=os.umask(0)
     83                        os.chmod(f,0640)
    3284                        os.umask(prevmask)
    33                        
    34                 try:
    35                        
    36                         conn = sqlite3.connect(PasswordManager.PASSWORD_FILE)
    37                         cursor = conn.cursor()
    38                         cursor.execute('select cn,sn,uid,passwd from password')
    39                         result = cursor.fetchall()
    40                         cursor.close()
    41                         conn.close()
    42                        
    43                 except:
    44                        
    45                         os.remove(PasswordManager.PASSWORD_FILE)
    46                         self.create_database()
    4785               
    48                
    49                
     86        #def write_file
     87
    5088       
    5189        def add_password(self,user_name,cn,sn,password):
    5290               
    53                 self.create_database()
     91                if user_name not in self.users:
     92                        self.users[user_name]={}
     93                       
     94                self.users[user_name]["cn"]=cn
     95                self.users[user_name]["sn"]=sn
     96                self.users[user_name]["passwd"]=password
    5497               
    55                 conn = sqlite3.connect(PasswordManager.PASSWORD_FILE)
    56                 cursor = conn.cursor()
    57                 cursor.execute('select * from password where uid = "'+user_name+'"')
    58                 result = cursor.fetchall()
    59                 if len(result) > 0 :
    60                         # user on database
    61                         cursor.execute('update password set passwd = "'+password+'" where uid = "'+user_name+'"' )
    62                 else:
    63                         cursor.execute('insert into password (cn,sn,uid,passwd) values ("'+cn+'","'+sn+'","'+user_name+'","'+password+'")')
    64                        
    65                 conn.commit()
    66                 cursor.close()
    67                 conn.close()
    68        
     98                self.write_file()
    6999               
    70100        #def add_password
    71101       
     102       
    72103        def remove_password(self,user_name):
    73104               
    74                 self.create_database()
    75                
    76                 conn = sqlite3.connect(PasswordManager.PASSWORD_FILE)
    77                 cursor = conn.cursor()
    78                 cursor.execute('delete from password where uid = "'+user_name+'"')
    79                 conn.commit()
    80                 cursor.close()
    81                 conn.close()
     105                if user_name in self.users:
     106                        self.users.pop(user_name)
     107                       
     108                return True
    82109       
    83110        #def remove_password
    84111       
     112       
    85113        def get_passwords(self):
    86114               
    87                 self.create_database()
    88                
    89                 list = []
    90                 conn = sqlite3.connect(PasswordManager.PASSWORD_FILE)
    91                 cursor = conn.cursor()
    92                 cursor.execute('select cn,sn,uid,passwd from password')
    93                 result = cursor.fetchall()
    94                 for user in result :
     115                pwd_list = []
     116                for user in self.users :
    95117                        a = {}
    96                         a['cn'] = user[0].encode('utf-8')
    97                         a['sn'] = user[1].encode('utf-8')
    98                         a['uid'] = user[2]
    99                         a['passwd'] = user[3]
    100                         list.append(a)
    101                 conn.close()
    102                 return list
     118                        a['cn'] = self.users[user]["cn"]
     119                        a['sn'] = self.users[user]["sn"]
     120                        a['uid'] = user
     121                        a['passwd'] = self.users[user]["passwd"]
     122                        pwd_list.append(a)
     123
     124                return pwd_list
    103125               
    104126        #def get_passwords
    105127       
     128       
    106129        def is_user_in_database(self,uid):
    107130               
    108                
    109                 for user in self.get_passwords():
    110                         if user["uid"]==uid:
    111                                 return [True,user]
    112                                
    113                 return [False,""]
     131                for user in self.users:
     132                        return True
     133                       
     134                return False
    114135               
    115136        #def is_user_in_database
     
    117138       
    118139        def set_externally_modified(self,uid):
    119                 ret,user=self.is_user_in_database(uid)
    120                 if ret:
    121                         self.add_password(user["uid"],user["cn"],user["sn"],"#! CHANGED MANUALLY !#")
     140               
     141                if self.is_user_in_database(uid):
     142                        self.add_password(uid,self.users[uid]["cn"],self.users[uid]["sn"],"#! CHANGED MANUALLY !#")
    122143                       
    123144        #def set_externally_modified   
     
    129150       
    130151        pm=PasswordManager()
    131         pm.add_password("test","password2")
    132         pm.add_password("test2","password2")
    133         pm.remove_password("raul")
     152        print pm.get_passwords()
     153       
    134154       
    135155
Note: See TracChangeset for help on using the changeset viewer.