source: lliurex-owncloud/trunk/fuentes/install-files/usr/share/n4d/python-plugins/LliurexOwncloud.py @ 4552

Last change on this file since 4552 was 4552, checked in by jrpelegrina, 2 years ago

Fix info to server home page

File size: 9.5 KB
Line 
1import os
2import bcrypt
3import tempfile
4import ConfigParser
5import shutil
6import lliurex.net
7
8from jinja2 import Environment
9from jinja2.loaders import FileSystemLoader
10from jinja2 import Template
11
12
13class LliurexOwncloud:
14       
15        BASE_DIR="/usr/share/lliurex-owncloud/"
16        OWNCLOUD_BASE_DIR=BASE_DIR+"llx-data/"
17        HTACCESS=OWNCLOUD_BASE_DIR+".htaccess"
18        ADMIN_DATA=OWNCLOUD_BASE_DIR+"data/"
19        CONFIG_DATA=OWNCLOUD_BASE_DIR+"config/"
20        TEMPLATE_DIR=OWNCLOUD_BASE_DIR+""
21        SQL_TEMPLATE="owncloud.sql"
22        EASY_SITE=OWNCLOUD_BASE_DIR+"owncloud.json"
23        EASY_SITE_ICON=OWNCLOUD_BASE_DIR+"owncloud.png"
24        #CNAME="cname-owncloud"
25       
26        OWNCLOUD_DATA_DIR="/var/www/owncloud/data/"
27        OWNCLOUD_CONFIG_DIR="/var/www/owncloud/config/"
28        EASY_SITES_DIR="/var/www/srv/links/"
29        EASY_SITES_DIR_ICON="/var/www/srv/icons/"
30       
31       
32       
33        '''
34        # TESTING #
35       
36        TEMPLATE_DIR="/home/netadmin/"
37        BASE_DIR="/home/netadmin/workspace/lliurex-owncloud/install-files"+BASE_DIR
38        OWNCLOUD_BASE_DIR=BASE_DIR+"llx-data/"
39        HTACCESS=OWNCLOUD_BASE_DIR+".htaccess"
40        EASY_SITE=OWNCLOUD_BASE_DIR+"owncloud.json"
41       
42        # TESTING #
43        '''
44       
45        def __init__(self):
46       
47                self.template=None
48                self.template_vars=["DB_USER","DB_PWD","DB_NAME","ADMIN_USER","ADMIN_PWD"]
49               
50        #def init
51       
52        def parse_template(self,template_path):
53               
54                print("* Parsing template...")
55
56                config = ConfigParser.ConfigParser()
57                config.optionxform=str
58                config.read(template_path)
59               
60                self.template={}
61                try:
62
63                        self.template["DB_USER"]=config.get("owncloud","DB_USER")
64                        self.template["DB_PWD"]=config.get("owncloud","DB_PWD")
65                        self.template["DB_NAME"]=config.get("owncloud","DB_NAME")
66                        self.template["ADMIN_USER"]=config.get("owncloud","ADMIN_USER")
67                        self.template["ADMIN_PWD"]=config.get("owncloud","ADMIN_PWD")
68               
69                        self.load_template(self.template)
70                        return [True,""]
71                       
72                except Exception as e:
73                        msg="[!] Error: %s"%(str(e))
74                        print("[!] Error:",e)
75                        return [False,e]
76               
77               
78               
79               
80        #def parse_template
81       
82       
83        def load_template(self,template):
84               
85                print("* Loading template...")
86               
87                if not type({})==type(template):
88                        return [False,""]
89                       
90                for var in self.template_vars:
91                        if var not in template:
92                                return [False,""]
93                       
94                self.template=template
95
96                try:
97
98                        self.template["LDAP_BASE_USER_TREE"]="ou=People,"+objects["VariablesManager"].get_variable("LDAP_BASE_DN")
99                        self.template["LDAP_BASE_GROUP_TREE"]="ou=Groups,"+objects["VariablesManager"].get_variable("LDAP_BASE_DN")
100                        self.template["SRV_IP"]=objects["VariablesManager"].get_variable("SRV_IP")
101                        self.template["INTERNAL_DOMAIN"]=objects["VariablesManager"].get_variable("INTERNAL_DOMAIN")
102                        self.template["EXTERNAL_IP"]=lliurex.net.get_ip(objects["VariablesManager"].get_variable("EXTERNAL_INTERFACE"))
103                       
104                except:
105                        import xmlrpclib as x
106                       
107                        c=x.ServerProxy("https://server:9779")
108                        self.template["LDAP_BASE_USER_TREE"]="ou=People,"+c.get_variable("","VariablesManager","LDAP_BASE_DN")
109                        self.template["LDAP_BASE_GROUP_TREE"]="ou=Groups,"+c.get_variable("","VariablesManager","LDAP_BASE_DN")
110                        self.template["SRV_IP"]=c.get_variable("","VariablesManager","SRV_IP")
111                        self.template["INTERNAL_DOMAIN"]=c.get_variable("","VariablesManager","INTERNAL_DOMAIN")
112                        self.template["EXTERNAL_IP"]=lliurex.net.get_ip(c.get_variable("","VariablesManager","EXTERNAL_INTERFACE"))
113
114                self.template["ADMIN_PWD"]=self.create_password_bhash(self.template["ADMIN_PWD"])
115                return [True,""]
116               
117        #def load_template
118       
119       
120        def mysql_service_init(self):
121               
122                print("* Initializing mysql root passwd (if needed) ...")
123                os.system("sudo mysql_root_passwd -i")
124                return [True,""]
125               
126        #def mysql_service_init
127
128
129        def create_db(self):
130               
131                print("* Creating database...")
132               
133                if self.template==None:
134                        return [False,""]
135                       
136                cmd='mysql -u%s -p%s -e "drop database IF EXISTS %s"'%(self.template["DB_USER"],self.template["DB_PWD"],self.template["DB_NAME"])
137                os.system(cmd)
138               
139                cmd='mysql -u%s -p%s -e "create database %s"'%(self.template["DB_USER"],self.template["DB_PWD"],self.template["DB_NAME"])
140                os.system(cmd)
141               
142                file_path=self.process_sql_template()
143                if file_path==None:
144                        return [False,"Error processing sql template"]
145                cmd="mysql -u %s -p%s %s < %s"%(self.template["DB_USER"],self.template["DB_PWD"],self.template["DB_NAME"],file_path)
146                os.system(cmd)
147                os.remove(file_path)
148               
149                return [True,""]
150               
151        #def init_sql
152       
153        def create_db_user(self):
154       
155                print("* Creating mysql user ...")
156               
157                db_pass=self.template["DB_PWD"]
158                db_user=self.template["DB_USER"]
159                db_name=self.template["DB_NAME"]
160                cmd='mysql -uroot -p$(mysql_root_passwd -g) -e "GRANT ALL PRIVILEGES ON %s.* TO \'%s\'@localhost IDENTIFIED BY \'%s\'"'%(db_name, db_user,db_pass)
161                ret=os.system(cmd)
162               
163                return [True,ret]
164               
165        #def generate_user     
166       
167       
168        def create_password_bhash(self,password):
169               
170                print("* Generating admin password...")
171               
172                salt=bcrypt.gensalt(10)
173                return bcrypt.hashpw(password,bcrypt.gensalt(10))
174               
175        #def create_password_bhash
176       
177       
178        def process_sql_template(self):
179               
180                print("* Procesing SQL template...")
181                try:
182                        template_dir=LliurexOwncloud.TEMPLATE_DIR
183                        sql_template_file=LliurexOwncloud.SQL_TEMPLATE
184                       
185                        tpl_env = Environment(loader=FileSystemLoader(template_dir))
186                        sql_template = tpl_env.get_template(sql_template_file)
187                        content = sql_template.render(self.template).encode('UTF-8')
188
189                        tmp_file=tempfile.mktemp()
190                        f=open(tmp_file,"w")
191                        f.write(content)
192                        f.close()
193                       
194                        return tmp_file
195                except:
196                        return None
197               
198               
199        #def process_sql_template
200       
201        def clean_old_files(self):
202               
203                print("* Cleaning old OwnCloud data...")
204               
205                for dir in [LliurexOwncloud.OWNCLOUD_DATA_DIR,LliurexOwncloud.OWNCLOUD_CONFIG_DIR]:
206                        if os.path.exists(dir):
207                                os.system("rm -rf %s"%dir)
208                               
209                return [True,""]
210               
211        #def clean_old_files
212       
213        def copy_new_files(self):
214               
215                print("* Copying new OwnCloud data...")
216               
217                cmd="cp -r %s/* %s"%(LliurexOwncloud.OWNCLOUD_BASE_DIR,"/var/www/owncloud/")
218                os.system(cmd)
219               
220                for dir in [LliurexOwncloud.OWNCLOUD_DATA_DIR,LliurexOwncloud.OWNCLOUD_CONFIG_DIR]:
221                        if os.path.exists(dir):
222                                os.system("chown -R www-data:www-data %s"%dir)
223                               
224                os.system("chmod 775 %s"%LliurexOwncloud.OWNCLOUD_CONFIG_DIR)
225                os.system("chmod 770 %s"%LliurexOwncloud.OWNCLOUD_DATA_DIR)
226               
227                os.system("mv %s/ADMIN_USER %s/%s"%(LliurexOwncloud.OWNCLOUD_DATA_DIR,LliurexOwncloud.OWNCLOUD_DATA_DIR,self.template["ADMIN_USER"]))
228               
229                cmd="cp %s %s"%(LliurexOwncloud.HTACCESS,"/var/www/owncloud/")
230                os.system(cmd)
231               
232                return [True,""]
233               
234        #def copy_new_files
235       
236        def process_config_file(self):
237               
238                print("* Procesing config template...")
239               
240                template_dir=LliurexOwncloud.OWNCLOUD_CONFIG_DIR
241                template_file="config.php"
242               
243                tpl_env = Environment(loader=FileSystemLoader(template_dir))
244                template = tpl_env.get_template(template_file)
245                content = template.render(self.template).encode('UTF-8')
246               
247                f=open(template_dir+template_file,"w")
248                f.write(content)
249                f.close()               
250               
251                return [True,""]
252               
253        #def process_config_file
254       
255        def enable_easy_site(self):
256               
257                print("* Enabling easy site...")
258               
259                if os.path.exists(LliurexOwncloud.EASY_SITES_DIR):
260                        shutil.copy(LliurexOwncloud.EASY_SITE,LliurexOwncloud.EASY_SITES_DIR)
261                       
262                if os.path.exists(LliurexOwncloud.EASY_SITES_DIR_ICON):
263                        shutil.copy(LliurexOwncloud.EASY_SITE_ICON,LliurexOwncloud.EASY_SITES_DIR_ICON) 
264               
265                return [True,""]
266               
267        #def enable_easy_site
268       
269        def enable_cname(self):
270
271                '''
272                template_dir=LliurexOwncloud.OWNCLOUD_BASE_DIR
273                tpl_env = Environment(loader=FileSystemLoader(template_dir))
274                template = tpl_env.get_template(LliurexOwncloud.CNAME)
275               
276                content = template.render(self.template).encode('UTF-8')
277                f=open("/var/lib/dnsmasq/config/cname-owncloud","w")
278                f.write(content)
279                f.close()
280               
281                '''
282
283                f=open("/etc/n4d/key","r")
284                magic_key=f.readline().strip("\n")
285                f.close()
286                import xmlrpclib as x
287                c=x.ServerProxy("https://server:9779")
288                result = c.set_internal_dns_entry(magic_key,"Dnsmasq","owncloud")
289                if result['status'] == True:
290                        os.system("service dnsmasq restart")
291                        return [True,""]
292                else:
293                        return [False,result['msg']]
294               
295               
296        #def enable_cname
297       
298        def enable_apache_conf(self):
299               
300                os.system("a2enmod ldap")
301                os.system("a2enmod ssl")
302                os.system("a2enmod rewrite")
303                os.system("a2enmod headers")
304                os.system("a2ensite default-ssl.conf")
305                os.system("service apache2 restart")
306                os.system("a2ensite owncloud.conf")
307                os.system("a2enconf owncloud")
308                os.system("service apache2 reload")
309               
310        #def enable_apache_mods
311       
312       
313        def initialize_owncloud(self,template):
314               
315                try:
316
317                        status,ret=self.load_template(template)
318                        if not status:
319                                return [False,ret +"1"]
320
321                        status,ret=self.mysql_service_init()
322                        if not status:
323                                return [False,ret+"3"]
324
325                        status,ret=self.create_db_user()
326                        if not status:
327                                return [False,ret+"4"]
328
329                        status,ret=self.create_db()
330                        if not status:
331                                return [False,ret+"5"]
332
333                        status,ret=self.clean_old_files()
334                        if not status:
335                                return [False,ret+"6"]
336
337                        status,ret=self.copy_new_files()
338                        if not status:
339                                return [False,ret+"7"]
340
341                        status,ret=self.process_config_file()
342                        if not status:
343                                return [False,ret+"8"]
344
345                        status,ret=self.enable_easy_site()
346                        if not status:
347                                return [False,ret+"9"]
348                       
349                        status,ret=self.enable_cname()
350                        if not status:
351                                return [False,ret+"10"]
352                               
353                        self.enable_apache_conf()
354                               
355                        return [True,"SUCCESS"]
356                       
357                except Exception as e:
358                       
359                        return [False,str(e)+" ?"]
360               
361        #def initlializ_owncloud
362       
363       
364#class LliurexOwncloud
365
366if __name__=="__main__":
367       
368        lo=LliurexOwncloud()
369        lo.parse_template("/home/netadmin/owncloud.ini")
370        lo.mysql_service_init()
371        lo.create_db_user()
372        lo.create_db()
373        lo.clean_old_files()
374        lo.copy_new_files()
375        lo.process_config_file()
376        lo.enable_easy_site()
377        lo.enable_apache_conf()
378
379
380       
381       
Note: See TracBrowser for help on using the repository browser.