source: n4d-freeradius/trunk/fuentes/install/usr/share/n4d/python-plugins/FreeRadiusManager.py @ 2766

Last change on this file since 2766 was 2766, checked in by daduve, 3 years ago

wip

File size: 3.5 KB
RevLine 
[782]1#!/usr/bin/env python
2
3import os
4import shutil
5
6import xmlrpclib as x
7
8from jinja2 import Environment
9from jinja2.loaders import FileSystemLoader
10
11
12
13class FreeRadiusManager:
14       
15        def __init__(self):
16               
17                self.radius_path="/etc/freeradius/"
18               
19                self.templates_path="/usr/share/n4d/templates/n4d-freeradius/"
20               
21                self.variable_list=["LDAP_BASE_DN","INTERNAL_NETWORK","INTERNAL_MASK"]
22               
23        #def init
24       
[2766]25        def render_templates(self,server,radius_secret,ldap_user,ldap_pwd,router_ip):
[782]26               
27       
28                '''
29                # TESTING
30               
31                c=x.ServerProxy("https://172.20.9.136:9779")
32                vars=c.get_variable_list("","VariablesManager",self.variable_list)
33               
34                # /TESTING
35                '''
36               
37                vars=objects["VariablesManager"].get_variable_list(self.variable_list)
38               
39                vars["RADIUS_SECRET"]=radius_secret
40                vars["LDAP_USER"]=ldap_user
41                vars["LDAP_PASSWORD"]=ldap_pwd
42                vars["SERVER"]=server
[2761]43                vars["ROUTER_IP"]=router_ip
[782]44               
45                env = Environment(loader=FileSystemLoader(self.templates_path))
46
47                template=env.get_template("clients.conf")
48                str_template=template.render(vars).encode("utf-8")
49                clients_str=str_template
50               
51                f=open(self.templates_path+"modules/ldap")
52                lines=f.readlines()
53                f.close()
54                 
55                str_template=""
56               
57                for line in lines:
58                       
59                        if "%%LDAP_USER%%" in line:
60                                line=line.replace("%%LDAP_USER%%",vars["LDAP_USER"])
61
62                        if "%%LDAP_PASSWORD%%" in line:
63                                line=line.replace("%%LDAP_PASSWORD%%",vars["LDAP_PASSWORD"])
64
65                        if "%%LDAP_BASE_DN%%" in line:
66                                line=line.replace("%%LDAP_BASE_DN%%",vars["LDAP_BASE_DN"])
67
68                        if "%%SERVER%%" in line:
69                                line=line.replace("%%SERVER%%",vars["SERVER"])
70                               
71                        str_template+=line
72
73               
74                ldap_str=str_template
75               
76                return (clients_str,ldap_str)
77       
78        #def render_template
79       
80        def fix_perms(self,f):
81               
82                os.system("chown root:freerad %s"%f)
83                os.system("chmod 640 %s"%f)             
84               
85        #def
86       
[2761]87        def install_conf_files(self,server,radius_secret,ldap_user,ldap_pwd,router_ip):
[782]88               
89                try:
90               
[2761]91                        clients_str,ldap_str=self.render_templates(server,radius_secret,ldap_user,ldap_pwd,router_ip)
[782]92                       
93                        if not os.path.exists(self.radius_path):
94                                os.makedirs(self.radius_path)
95                                #os.sysmte()
96                       
97                        # clients.conf
98                       
99                        f=open(self.radius_path+"clients.conf","w")
100                        f.write(clients_str)
101                        f.close()
102                       
103                        self.fix_perms(self.radius_path+"clients.conf")
104                       
105                       
106                        # modules/ldap
107                       
108                        if not os.path.exists(self.radius_path+"modules"):
109                                os.makedirs(self.radius_path+"modules")
110                       
111                        f=open(self.radius_path+"modules/ldap","w")
112                        f.write(ldap_str)
113                        f.close()
114                       
115                        # default
116                        if not os.path.exists(self.radius_path+"sites-available"):
117                                os.makedirs(self.radius_path+"sites-available")
118                               
119                        shutil.copy(self.templates_path+"sites-available/default",self.radius_path+"sites-available/")
120                       
121                        # inner-tunnel
122                       
123                        shutil.copy(self.templates_path+"sites-available/inner-tunnel",self.radius_path+"sites-available/")
124                       
125                        # radiusd.conf
126                       
127                        shutil.copy(self.templates_path+"radiusd.conf",self.radius_path)
128                        self.fix_perms(self.radius_path+"radiusd.conf")
129                       
130                        # eap.conf
131                       
132                        shutil.copy(self.templates_path+"eap.conf",self.radius_path)
133                        self.fix_perms(self.radius_path+"eap.conf")
134                       
135                        # modules/mschap
136                       
137                        shutil.copy(self.templates_path+"modules/mschap",self.radius_path+"modules/")
138                       
139                        os.system("service freeradius restart")
140                        #os.system("zero-center set-configured lliurex-freeradius")
141                       
142                        return {"status":True,"msg":str(True)}
143                       
144                except Exception as e:
145                       
146                        return {"status":False,"msg":str(e)}
147                       
148               
149               
150        #def install_conf_files
151       
152       
153       
154#class RadiusManager
155
156if __name__=="__main__":
157       
158        r=RadiusManager()
[2766]159        r.install_conf_files("server","myradius1","cn=roadmin...","2","")
Note: See TracBrowser for help on using the repository browser.