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

Last change on this file since 782 was 782, checked in by jrpelegrina, 5 years ago

First release to xenial

File size: 3.5 KB
Line 
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       
25        def render_templates(self,server,radius_secret,ldap_user,ldap_pwd):
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
43               
44                env = Environment(loader=FileSystemLoader(self.templates_path))
45
46                template=env.get_template("clients.conf")
47                str_template=template.render(vars).encode("utf-8")
48                clients_str=str_template
49               
50                f=open(self.templates_path+"modules/ldap")
51                lines=f.readlines()
52                f.close()
53                 
54                str_template=""
55               
56                for line in lines:
57                       
58                        if "%%LDAP_USER%%" in line:
59                                line=line.replace("%%LDAP_USER%%",vars["LDAP_USER"])
60
61                        if "%%LDAP_PASSWORD%%" in line:
62                                line=line.replace("%%LDAP_PASSWORD%%",vars["LDAP_PASSWORD"])
63
64                        if "%%LDAP_BASE_DN%%" in line:
65                                line=line.replace("%%LDAP_BASE_DN%%",vars["LDAP_BASE_DN"])
66
67                        if "%%SERVER%%" in line:
68                                line=line.replace("%%SERVER%%",vars["SERVER"])
69                               
70                        str_template+=line
71
72               
73                ldap_str=str_template
74               
75                return (clients_str,ldap_str)
76       
77        #def render_template
78       
79        def fix_perms(self,f):
80               
81                os.system("chown root:freerad %s"%f)
82                os.system("chmod 640 %s"%f)             
83               
84        #def
85       
86        def install_conf_files(self,server,radius_secret,ldap_user,ldap_pwd):
87               
88                try:
89               
90                        clients_str,ldap_str=self.render_templates(server,radius_secret,ldap_user,ldap_pwd)
91                       
92                        if not os.path.exists(self.radius_path):
93                                os.makedirs(self.radius_path)
94                                #os.sysmte()
95                       
96                        # clients.conf
97                       
98                        f=open(self.radius_path+"clients.conf","w")
99                        f.write(clients_str)
100                        f.close()
101                       
102                        self.fix_perms(self.radius_path+"clients.conf")
103                       
104                       
105                        # modules/ldap
106                       
107                        if not os.path.exists(self.radius_path+"modules"):
108                                os.makedirs(self.radius_path+"modules")
109                       
110                        f=open(self.radius_path+"modules/ldap","w")
111                        f.write(ldap_str)
112                        f.close()
113                       
114                        # default
115                        if not os.path.exists(self.radius_path+"sites-available"):
116                                os.makedirs(self.radius_path+"sites-available")
117                               
118                        shutil.copy(self.templates_path+"sites-available/default",self.radius_path+"sites-available/")
119                       
120                        # inner-tunnel
121                       
122                        shutil.copy(self.templates_path+"sites-available/inner-tunnel",self.radius_path+"sites-available/")
123                       
124                        # radiusd.conf
125                       
126                        shutil.copy(self.templates_path+"radiusd.conf",self.radius_path)
127                        self.fix_perms(self.radius_path+"radiusd.conf")
128                       
129                        # eap.conf
130                       
131                        shutil.copy(self.templates_path+"eap.conf",self.radius_path)
132                        self.fix_perms(self.radius_path+"eap.conf")
133                       
134                        # modules/mschap
135                       
136                        shutil.copy(self.templates_path+"modules/mschap",self.radius_path+"modules/")
137                       
138                        os.system("service freeradius restart")
139                        #os.system("zero-center set-configured lliurex-freeradius")
140                       
141                        return {"status":True,"msg":str(True)}
142                       
143                except Exception as e:
144                       
145                        return {"status":False,"msg":str(e)}
146                       
147               
148               
149        #def install_conf_files
150       
151       
152       
153#class RadiusManager
154
155if __name__=="__main__":
156       
157        r=RadiusManager()
158        r.install_conf_files("server","myradius1","cn=roadmin...","2")
Note: See TracBrowser for help on using the repository browser.