~rapache-devel/rapache/tobedeleted-development

1 by Emanuele Gentili
Merging rapache-stage0
1
#!/usr/bin/env python
2
3
# Rapache - Apache Configuration Tool
4
# Copyright (C) 2008 Stefano Forenza,  Jason Taylor, Emanuele Gentili
5
# 
6
# This program is free software: you can redistribute it and/or modify
7
# it under the terms of the GNU General Public License as published by
8
# the Free Software Foundation, either version 3 of the License, or
9
# (at your option) any later version.
10
# 
11
# This program is distributed in the hope that it will be useful,
12
# but WITHOUT ANY WARRANTY; without even the implied warranty of
13
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
# GNU General Public License for more details.
15
# 
16
# You should have received a copy of the GNU General Public License
17
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
18
19
import sys
20
import re
21
22
try:
23
     import pygtk
24
     pygtk.require("2.0")
25
except:
26
      pass
27
try:
28
    import gtk
29
    import gtk.glade
30
except:
31
    sys.exit(1)
32
33
import os
34
import pango
35
import tempfile
36
37
from RapacheCore.VirtualHost import *
38
from RapacheGtk import GuiUtils
39
        
40
class VirtualHostWindow:
41
    
42
    create_new = True
43
    name = None
44
    
45
    def __init__ ( self, father = None):
46
        self.father = father
47
        self.gladefile = Configuration.GLADEPATH + "/" + "edit_vhost.glade"  
48
        self.xml = gtk.glade.XML(self.gladefile)     
49
        #Create our dictionary and connect it
50
        dic = { 
51
            "quit" : self.quit
52
            , "on_ok":self.save
53
            , "on_cancel":self.close  
54
            , "domain_name_updated":self.domain_name_updated
55
            , "custom_folder_toggled":self.custom_folder_toggled
56
            }
57
        self.xml.signal_autoconnect(dic)
58
        self.xml.get_widget( 'custom_folder' ).set_action ( gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER )                
59
        font_desc = pango.FontDescription('monospace')
60
        self.xml.get_widget( 'vhost_source' ).modify_font(font_desc)
61
        GuiUtils.style_as_tooltip( self.xml.get_widget( 'message_container' ) )
62
   
63
    def load (self, name ):
64
65
        site = VirtualHostModel( name )
66
        self.create_new = False
67
        self.name = name 
68
        self._get( 'create_hosts_entry' ).hide()
69
        self._get( 'create_hosts_label' ).hide()
70
        try:
71
            site.load()
72
            self._get( 'has_www' ).set_active( site.data[ 'has_www' ] )
73
            self._get( 'domain_name' ).set_text( site.data[ 'ServerName' ] )
74
            self._get( 'default_folder' ).set_text( site.data[ 'DocumentRoot' ] )
75
            self.xml.get_widget( 'ok_button' ).set_sensitive(True);
76
        except "VhostUnparsable":            
77
            self._get( 'notebook' ).get_nth_page( 0 ).hide()
78
        buffer = self.xml.get_widget( 'vhost_source' ).get_buffer()
79
        buffer.set_text( site.get_source() )
80
    def _get(self, id ):
81
        return self.xml.get_widget( id )
82
    
83
    
84
    def error ( self, message ):
85
        self.xml.get_widget( 'message_text' ).set_label( '<b>'+message+'</b>' )
86
        self.xml.get_widget( 'message_container' ).show()
87
        
88
    def quit (self, widget):      
89
        self.father.new_vhost_window = None
90
    
91
    def close ( self, widget = None ):
92
        self.window = self.xml.get_widget( 'vhost_edit_window' )
93
        self.window.destroy()
94
    def domain_name_updated ( self, widget, a = None, b = None, c = None ):
95
        name = widget.get_text()
96
        if ( valid_domain_name( name ) ):
97
            self.xml.get_widget( 'ok_button' ).set_sensitive(True);
98
            if self.create_new :
99
                self.xml.get_widget( 'default_folder' ).set_text( '/var/www/'+name+'/httpdocs' )
100
        else:
101
            self.xml.get_widget( 'ok_button' ).set_sensitive(False);
102
    def custom_folder_toggled( self, widget ):
103
        if ( widget.get_active() == True ):
104
            self.xml.get_widget( 'custom_folder' ).show()
105
            self.xml.get_widget( 'default_folder' ).hide()
106
        else:
107
            self.xml.get_widget( 'custom_folder' ).hide()
108
            self.xml.get_widget( 'default_folder' ).show()            
109
    
110
    
111
    def save( self, widget ):
112
        options = {}
113
        options[ 'has_www' ] = self.xml.get_widget( 'has_www' ).get_active()     
114
        options[ 'domain_name' ] = ( self.xml.get_widget( 'domain_name' ).get_text() )
115
        options[ 'hack_hosts' ] = self.xml.get_widget( 'create_hosts_entry' ).get_active()                
116
        if self.xml.get_widget( 'set_custom_folder' ).get_active():
117
            DocumentRoot =  self.xml.get_widget( 'custom_folder' ).get_filename ()     
118
        else:
119
            DocumentRoot =  self.xml.get_widget( 'default_folder' ).get_text()
120
        options[ 'DocumentRoot' ] = DocumentRoot
121
                       
122
        
123
        try:
124
            if ( self.create_new ):
125
                site = VirtualHostModel( options[ 'domain_name' ] )
126
                site.create ( options )
127
            else:
128
                print "Current name:", self.name
129
                site = VirtualHostModel( self.name )
130
                site.update( options, self.name )
131
            
132
            self.father.refresh_vhosts()        
133
            self.father.please_restart()
134
            self.close()
135
        except "VhostExists":
136
           print "========================"
137
           self.error( "A virtual host with the same name already exists" )     
138
        
139
             
140
        return True