source: n4d-proxy/trunk/fuentes/install.n4d-proxy/usr/share/n4d/python-plugins/ProxyManager.py @ 1148

Last change on this file since 1148 was 1148, checked in by mabarracus, 4 years ago

fix squid3 paths

File size: 11.7 KB
Line 
1# npackage example  https://svn.lliurex.net/pandora/n4d-ldap/trunk
2# jinja2 http://jinja.pocoo.org/docs/templates
3
4from jinja2 import Environment
5from jinja2.loaders import FileSystemLoader
6from jinja2 import Template
7import tempfile
8import shutil
9import os
10import subprocess
11import tarfile
12import time
13
14class N4dProxy:
15
16        def __init__(self):
17                #Load template file
18                self.tpl_env = Environment(loader=FileSystemLoader('/usr/share/n4d/templates/squid'))
19                self.proxy_file_list=["/etc/squid/squid.conf","/var/www/proxy.pac","/var/lib/dnsmasq/config/cname-proxy"]
20                self.proxy_dirs=["/etc/squid/lliurex/"]
21               
22        #def init
23       
24        def startup(self,options):
25                # executed when launching n4d
26                pass
27               
28        #def startup
29
30        def apt(self):
31                # executed after apt operations
32                pass
33               
34        #def apt
35       
36        # service test and backup functions #
37       
38        def test(self):
39
40                pass
41               
42        #def test
43
44        def get_time(self):
45               
46                return get_backup_name("ProxyManager")
47               
48        #def get_time
49       
50       
51        def backup(self,dir="/backup"):
52               
53                try:
54               
55                        file_path=dir+"/"+self.get_time()
56               
57                        tar=tarfile.open(file_path,"w:gz")
58                       
59                        for f in self.proxy_file_list:
60                               
61                                tar.add(f)
62                       
63                        for d in self.proxy_dirs:
64                                if os.path.exists(d):
65                                        tar.add(d)
66                       
67                       
68                        tar.close()
69                       
70                        return [True,file_path]
71                       
72                except Exception as e:
73                        return [False,str(e)]
74               
75        #def test
76       
77        def restore(self,file_path=None):
78
79                try:
80
81                        if file_path==None:
82                                for f in sorted(os.listdir("/backup"),reverse=True):
83                                        if "ProxyManager" in f:
84                                                file_path="/backup/"+f
85                                                break                   
86                       
87                        if file_path==None:
88                               
89                                return [False,"Backup file not found"]
90                       
91                        if os.path.exists(file_path):
92                               
93                                tmp_dir=tempfile.mkdtemp()
94                                tar=tarfile.open(file_path)
95                                tar.extractall(tmp_dir)
96                                tar.close()
97                               
98                                for f in self.proxy_file_list:
99                                        tmp_path=tmp_dir+f
100                                        shutil.copy(tmp_path,f)
101                                       
102                                       
103                                for d in self.proxy_dirs:
104                                        tmp_path=tmp_dir+d
105                                        if os.path.exists(tmp_path):
106                                                cmd="cp -r " + tmp_path +"/* "  + d
107                                                if not os.path.exists(d):
108                                                        os.makedirs(d)
109                                                os.system(cmd)
110                                       
111                               
112                               
113                                try:
114                                        if objects["ServerBackupManager"].restoring_version=="14.06":
115                                               
116                                                print("[ProxyManager] Fixing squid.conf ...")
117                                               
118                                                f=open("/etc/squid/squid.conf")
119                                                lines=f.readlines()
120                                                f.close()
121                                               
122                                                f=open("/tmp/squid.conf","w")
123                                                for line in lines:
124                                                        if "acl manager proto cache_object" not in line:
125                                                       
126                                                                f.write(line)
127                                               
128                                                f.close()
129                                               
130                                                shutil.copy("/tmp/squid.conf","/etc/squid/squid.conf")
131                                       
132                                except Exception as llx14_ex:
133                                        print llx14_ex
134                                       
135                                os.system("service squid restart")
136                                               
137                                return [True,""]
138                               
139                        else:
140                                return [False,"Backup file not found"]
141                               
142                except Exception as e:
143                        print e
144                        return [False,str(e)]
145               
146        #def test
147       
148        def calc_longmask(self,bitmask):
149                binario = "1"*bitmask + "0"*(32-bitmask)
150                longmask = longmask = str(int(binario[0:8],2)) + "." + str(int(binario[8:16],2)) + "." + str(int(binario[16:24],2)) + "." + str(int(binario[24:32],2))
151                return longmask
152        #def calc_longmask
153       
154       
155        def load_exports(self):
156                #Get template
157                template = self.tpl_env.get_template("squid.conf")
158                template_dst_domains = self.tpl_env.get_template("allow-dst-domains.conf")
159                template_dst_networks = self.tpl_env.get_template("allow-dst-networks.conf")
160                template_src_networks = self.tpl_env.get_template("allow-src-networks.conf")
161                template_ssl_ports = self.tpl_env.get_template("allow-SSL-ports.conf")
162                template_deny_dst_domain = self.tpl_env.get_template("deny-dst-domains.conf")
163                template_deny_dst_domain_expr = self.tpl_env.get_template("deny-dst-domains-expr.conf")
164                template_deny_dst_networks = self.tpl_env.get_template("deny-dst-networks.conf")
165                template_cache_networks = self.tpl_env.get_template("no_cache_networks.conf")
166                template_proxy_pac = self.tpl_env.get_template("proxy.pac")
167                template_cname = self.tpl_env.get_template("cname")
168                list_variables = {}
169               
170                ###########################
171                #Getting VARS
172                ###########################
173
174                #Obtains SRV_IP
175                list_variables['SRV_IP'] = objects['VariablesManager'].get_variable('SRV_IP')
176                #If variable INTERNAL_IP is not defined returns an error
177                if  list_variables['SRV_IP'] == None:
178                        return {'status':False,'msg':'Variable SRV_IP not defined'}
179                               
180                #Obtains INTERNAL_MASK
181                list_variables['INTERNAL_MASK'] = objects['VariablesManager'].get_variable('INTERNAL_MASK')
182                #If INTERNAL_MASK is not defined returns an error
183                if  list_variables['INTERNAL_MASK'] == None:
184                        return {'status':False,'msg':'Variable INTERNAL_MASK not defined'}
185               
186                #Calculate INTERNAL_LONGMASK
187                list_variables['INTERNAL_LONGMASK'] = self.calc_longmask(list_variables['INTERNAL_MASK'])
188               
189               
190                #Obtains INTERNAL_NETWORK
191                list_variables['INTERNAL_NETWORK'] = objects['VariablesManager'].get_variable('INTERNAL_NETWORK')
192                #If INTERNAL_NETWORK is not defined returns an error
193                if  list_variables['INTERNAL_NETWORK'] == None:
194                        return {'status':False,'msg':'Variable INTERNAL_NETWORK not defined'}
195               
196                #Obtains INTERNAL_DOMAIN
197                list_variables['INTERNAL_DOMAIN'] = objects['VariablesManager'].get_variable('INTERNAL_DOMAIN')
198                #If INTERNAL_DOMAIN is not defined returns an error
199                if  list_variables['INTERNAL_DOMAIN'] == None:
200                        return {'status':False,'msg':'Variable INTERNAL_DOMAIN not defined'}
201                       
202                #Obtains HOSTNAME
203                list_variables['HOSTNAME'] = objects['VariablesManager'].get_variable('HOSTNAME')
204                #If variable SRV_IP is not defined returns an error
205                if  list_variables['HOSTNAME'] == None:
206                        return {'status':False,'msg':'Variable HOSTNAME not defined'}
207                       
208                ###########################
209                #Setting VARS
210                ###########################
211               
212                #Set PROXY_HOST
213                list_variables['PROXY_HOST'] = objects['VariablesManager'].get_variable('PROXY_HOST')
214                #If variable PROXY_HOST is not defined calculate it with args values
215                if  list_variables['PROXY_HOST'] == None:
216                        status,list_variables['PROXY_HOST'] = objects['VariablesManager'].init_variable('PROXY_HOST',{'HOST':"proxy"})
217                               
218                #Set PROXY_HTTP_PORT
219                list_variables['PROXY_HTTP_PORT'] = objects['VariablesManager'].get_variable('PROXY_HTTP_PORT')
220                #If variable PROXY_HTTP_PORT is not defined calculate it with args values
221                if  list_variables['PROXY_HTTP_PORT'] == None:
222                        status,list_variables['PROXY_HTTP_PORT'] = objects['VariablesManager'].init_variable('PROXY_HTTP_PORT',{'PORT':3128})
223               
224                #Set PROXY_ENABLED
225                list_variables['PROXY_ENABLED'] = objects['VariablesManager'].get_variable('PROXY_ENABLED')
226                #If variable PROXY_ENABLED is not defined calculate it with args values
227                if  list_variables['PROXY_ENABLED'] == None:
228                        status,list_variables['PROXY_ENABLED'] = objects['VariablesManager'].init_variable('PROXY_ENABLED',{'ENABLED':True})
229               
230                #Set PROXY_MAX_FILE_SIZE
231                list_variables['PROXY_MAX_FILE_SIZE'] = objects['VariablesManager'].get_variable('PROXY_MAX_FILE_SIZE')
232                #If variable PROXY_ENABLED is not defined calculate it with args values
233                if  list_variables['PROXY_MAX_FILE_SIZE'] == None:
234                        status,list_variables['PROXY_MAX_FILE_SIZE'] = objects['VariablesManager'].init_variable('PROXY_MAX_FILE_SIZE',{'FILE_SIZE':204800})
235               
236                #Encode vars to UTF-8
237                string_template = template.render(list_variables).encode('UTF-8')
238                #Open template file
239                fd, tmpfilepath = tempfile.mkstemp()
240                new_export_file = open(tmpfilepath,'w')
241                new_export_file.write(string_template)
242                new_export_file.close()
243                os.close(fd)
244                #Write template values
245                n4d_mv(tmpfilepath,'/etc/squid/squid.conf',True,'root','root','0644',False )
246               
247                #Encode vars to UTF-8
248                string_template = template_dst_domains.render(list_variables).encode('UTF-8')
249                #Open template file
250                fd, tmpfilepath = tempfile.mkstemp()
251                new_export_file = open(tmpfilepath,'w')
252                new_export_file.write(string_template)
253                new_export_file.close()
254                os.close(fd)
255                #Write template values
256                n4d_mv(tmpfilepath,'/etc/squid/lliurex/allow-dst-domains.conf',True,'root','root','0644',True )
257               
258                #Encode vars to UTF-8
259                string_template = template_dst_networks.render(list_variables).encode('UTF-8')
260                #Open template file
261                fd, tmpfilepath = tempfile.mkstemp()
262                new_export_file = open(tmpfilepath,'w')
263                new_export_file.write(string_template)
264                new_export_file.close()
265                os.close(fd)
266                #Write template values
267                n4d_mv(tmpfilepath,'/etc/squid/lliurex/allow-dst-networks.conf',True,'root','root','0644',True )
268               
269                #Encode vars to UTF-8
270                string_template = template_src_networks.render(list_variables).encode('UTF-8')
271                #Open template file
272                fd, tmpfilepath = tempfile.mkstemp()
273                new_export_file = open(tmpfilepath,'w')
274                new_export_file.write(string_template)
275                new_export_file.close()
276                os.close(fd)
277                #Write template values
278                n4d_mv(tmpfilepath,'/etc/squid/lliurex/allow-src-networks.conf',True,'root','root','0644',True )
279               
280                #Encode vars to UTF-8
281                string_template = template_ssl_ports.render(list_variables).encode('UTF-8')
282                #Open template file
283                fd, tmpfilepath = tempfile.mkstemp()
284                new_export_file = open(tmpfilepath,'w')
285                new_export_file.write(string_template)
286                new_export_file.close()
287                os.close(fd)
288                #Write template values
289                n4d_mv(tmpfilepath,'/etc/squid/lliurex/allow-SSL-ports.conf',True,'root','root','0644',True )
290               
291                #Encode vars to UTF-8
292                string_template = template_cache_networks.render(list_variables).encode('UTF-8')
293                #Open template file
294                fd, tmpfilepath = tempfile.mkstemp()
295                new_export_file = open(tmpfilepath,'w')
296                new_export_file.write(string_template)
297                new_export_file.close()
298                os.close(fd)
299                #Write template values
300                n4d_mv(tmpfilepath,'/etc/squid/lliurex/no_cache_networks.conf',True,'root','root','0644',True )
301               
302                #Encode vars to UTF-8
303                string_template = template_proxy_pac.render(list_variables).encode('UTF-8')
304                #Open template file
305                fd, tmpfilepath = tempfile.mkstemp()
306                new_export_file = open(tmpfilepath,'w')
307                new_export_file.write(string_template)
308                new_export_file.close()
309                os.close(fd)
310                #Write template values
311                n4d_mv(tmpfilepath,'/var/www/proxy.pac',True,'root','root','0644',True )
312               
313                #Encode vars to UTF-8
314                string_template = template_cname.render(list_variables).encode('UTF-8')
315                #Open template file
316                fd, tmpfilepath = tempfile.mkstemp()
317                new_export_file = open(tmpfilepath,'w')
318                new_export_file.write(string_template)
319                new_export_file.close()
320                os.close(fd)
321                #Write template values
322                n4d_mv(tmpfilepath,'/var/lib/dnsmasq/config/cname-proxy',True,'root','root','0644',True )
323               
324                #deny-dst-domains
325                string_template = template_deny_dst_domain.render(list_variables).encode('UTF-8')
326                #Open template file
327                fd, tmpfilepath = tempfile.mkstemp()
328                new_export_file = open(tmpfilepath,'w')
329                new_export_file.write(string_template)
330                new_export_file.close()
331                os.close(fd)
332                #Write template values
333                n4d_mv(tmpfilepath,'/etc/squid/lliurex/deny-dst-domains.conf',True,'root','root','0644',True )
334               
335                #deny-dst-domains-expr
336                string_template = template_deny_dst_domain_expr.render(list_variables).encode('UTF-8')
337                #Open template file
338                fd, tmpfilepath = tempfile.mkstemp()
339                new_export_file = open(tmpfilepath,'w')
340                new_export_file.write(string_template)
341                new_export_file.close()
342                os.close(fd)
343                #Write template values
344                n4d_mv(tmpfilepath,'/etc/squid/lliurex/deny-dst-domains-expr.conf',True,'root','root','0644',True )
345               
346                #deny-dst-networks
347                string_template = template_deny_dst_networks .render(list_variables).encode('UTF-8')
348                #Open template file
349                fd, tmpfilepath = tempfile.mkstemp()
350                new_export_file = open(tmpfilepath,'w')
351                new_export_file.write(string_template)
352                new_export_file.close()
353                os.close(fd)
354                #Write template values
355                n4d_mv(tmpfilepath,'/etc/squid/lliurex/deny-dst-networks.conf',True,'root','root','0644',True )
356               
357               
358                return {'status':True,'msg':'Exports written'}
359        #def load_exports
360
361        def reboot_squid(self):
362                #Restart nfs service
363                subprocess.Popen(['/etc/init.d/squid','restart'],stdout=subprocess.PIPE).communicate()
364                return {'status':True,'msg':'SQUID3 rebooted'}
365        #def reboot_squid
366
367        # ######################### #
368       
369#class N4dProxy
Note: See TracBrowser for help on using the repository browser.