1
2
3
4
5
6
7
8
9
10 import os
11 import sys
12
13
14 import signal
15
16 try:
17 import xmlrpclib
18 except ImportError:
19 import xmlrpc.client as xmlrpclib
20
21 import gettext
22 t = gettext.translation('rhn-client-tools', fallback=True)
23
24 if not hasattr(t, 'ugettext'):
25 t.ugettext = t.gettext
26 _ = t.ugettext
27
28 from up2date_client import up2dateErrors
29 from up2date_client import config
30 from up2date_client import rhnreg
31 from up2date_client import messageWindow
32
33 from up2date_client import rhnregGui
34 from up2date_client.gtk_compat import gtk, setCursor, getWidgetName
35
36
37
38 -class Gui(rhnregGui.StartPage, rhnregGui.ChooseServerPage, rhnregGui.LoginPage,
39 rhnregGui.ReviewSubscriptionPage, rhnregGui.CreateProfilePage,
40 rhnregGui.ProvideCertificatePage, rhnregGui.FinishPage,
41 rhnregGui.ChooseChannelPage):
42
44 self.cfg = config.initUp2dateConfig()
45
46 gladeFile = "/usr/share/rhn/up2date_client/gui.glade"
47 self.xml = gtk.glade.XML(gladeFile, "mainWin", domain="rhn-client-tools")
48 self.xml.signal_autoconnect (
49 { "onMainWinCancel" : self.onMainWinCancel,
50 "onMainWinPrepare" : self.onMainWinPrepare,
51 "onMainWinApply" : self.onMainWinApply,
52 } )
53
54 rhnregGui.StartPage.__init__(self)
55 rhnregGui.ChooseServerPage.__init__(self)
56 rhnregGui.LoginPage.__init__(self)
57 rhnregGui.ChooseChannelPage.__init__(self)
58 rhnregGui.CreateProfilePage.__init__(self)
59 rhnregGui.ReviewSubscriptionPage.__init__(self)
60 rhnregGui.ProvideCertificatePage.__init__(self)
61 rhnregGui.FinishPage.__init__(self)
62
63
64 contents = self.startPageVbox()
65 container = self.xml.get_widget("startPageVbox")
66 container.pack_start(contents, True, True, 0)
67 contents = self.chooseServerPageVbox()
68 container = self.xml.get_widget("chooseServerPageVbox")
69 container.pack_start(contents, True, True, 0)
70 contents = self.loginPageVbox()
71 container = self.xml.get_widget("loginPageVbox")
72 container.pack_start(contents, True, True, 0)
73 contents = self.chooseChannelPageVbox()
74 container = self.xml.get_widget("chooseChannelPageVbox")
75 container.pack_start(contents, True, True, 0)
76 self.chooseChannelPageVbox = container
77 contents = self.createProfilePageVbox()
78 container = self.xml.get_widget("createProfilePageVbox")
79 container.pack_start(contents, True, True, 0)
80 contents = self.reviewSubscriptionPageVbox()
81 container = self.xml.get_widget("reviewSubscriptionPageVbox")
82 container.pack_start(contents, True, True, 0)
83 contents = self.provideCertificatePageVbox()
84 container = self.xml.get_widget("provideCertificatePageVbox")
85 container.pack_start(contents, True, True, 0)
86 self.provideCertificatePageVbox = container
87 contents = self.finishPageVbox()
88 container = self.xml.get_widget("finishPageVbox")
89 container.pack_start(contents, True, True, 0)
90
91 self.initProfile = False
92 self.oemInfo = {}
93 self.productInfo = {}
94 self.already_registered_already_shown = False
95 self.rhsm_already_registered_already_shown = False
96
97 self.mainWin = self.xml.get_widget("mainWin")
98 self.mainWin.connect("delete-event", gtk.main_quit)
99 self.mainWin.connect("hide", gtk.main_quit)
100 self.mainWin.connect("close", gtk.main_quit)
101
102 self.pages = dict([(getWidgetName(self.mainWin.get_nth_page(n)), n)
103 for n in range(self.mainWin.get_n_pages())])
104
105
106
107
108 def mySetBusyCursor():
109 setCursor(self.mainWin, gtk.CURSOR_WATCH)
110 def mySetArrowCursor():
111 setCursor(self.mainWin, gtk.CURSOR_LEFT_PTR)
112 rhnregGui.setBusyCursor = mySetBusyCursor
113 rhnregGui.setArrowCursor = mySetArrowCursor
114
115 self.mainWin.show_all()
116
117 self.onStartPagePrepare(None, None, manualPrepare=True)
118
119
120 - def onMainWinCancel(self, mainWin):
121 dialog = rhnregGui.ConfirmQuitDialog(mainWin)
122 if dialog.rc == 1:
123 self.mainWin.set_current_page(self.pages['finishPageVbox'])
124 else:
125 return True
126
138
139 - def nextPage(self, vbox):
140
141 self.mainWin.set_current_page(self.pages[vbox]-1)
142
143 - def onMainWinPrepare(self, mainWin, vbox):
144 prepare_func = {
145 "startPageVbox": self.onStartPagePrepare,
146 "chooseServerPageVbox" : self.onChooseServerPagePrepare,
147 "loginPageVbox" : self.onLoginPagePrepare,
148 "chooseChannelPageVbox" : self.onChooseChannelPagePrepare,
149 "createProfilePageVbox" : self.onCreateProfilePagePrepare,
150 "reviewSubscriptionPageVbox" : self.onReviewSubscriptionPagePrepare,
151 "finishPageVbox" : self.onFinishPagePrepare,
152 }
153 vboxId = getWidgetName(vbox)
154 if vboxId in prepare_func:
155 prepare_func[vboxId](mainWin, vbox)
156
157 - def onMainWinApply(self, mainWin):
158 forward_func = {
159 "chooseServerPageVbox" : self.onChooseServerPageNext,
160 "loginPageVbox" : self.onLoginPageNext,
161 "chooseChannelPageVbox" : self.onChooseChannelPageNext,
162 "createProfilePageVbox" : self.onCreateProfilePageNext,
163 "provideCertificatePageVbox" : self.onProvideCertificatePageNext,
164 }
165 currentVbox = mainWin.get_nth_page(mainWin.get_current_page())
166 vboxId = getWidgetName(currentVbox)
167 if vboxId in forward_func:
168 forward_func[vboxId](mainWin, None)
169
170 - def onStartPagePrepare(self, mainWin, vbox, manualPrepare=False):
171 if rhnreg.rhsm_registered() and not self.rhsm_already_registered_already_shown:
172
173 dialog = rhnregGui.AlreadyRegisteredSubscriptionManagerDialog()
174 if dialog.rc == 0:
175 sys.exit(0)
176 self.rhsm_already_registered_already_shown = True
177 if rhnreg.registered() and not self.already_registered_already_shown:
178
179 dialog = rhnregGui.AlreadyRegisteredDialog()
180 if dialog.rc == 0:
181 sys.exit(0)
182 self.already_registered_already_shown = True
183
184 - def onChooseServerPagePrepare(self, mainWin, vbox):
186
187 - def onChooseServerPageNext(self, page, dummy):
188 try:
189 ret = self.chooseServerPageApply()
190 if ret:
191 self.nextPage('chooseServerPageVbox')
192 return
193 if hasattr(self.provideCertificatePageVbox, 'set_visible'):
194 self.provideCertificatePageVbox.set_visible(False)
195 self.nextPage('loginPageVbox')
196 except (up2dateErrors.SSLCertificateVerifyFailedError,\
197 up2dateErrors.SSLCertificateFileNotFound):
198 self.setUrlInWidget()
199
200 - def onLoginPagePrepare(self, mainWin, vbox):
201 self.loginXml.get_widget("loginUserEntry").grab_focus()
202 self.loginPagePrepare()
203
204 - def onLoginPageNext(self, page, dummy):
205 """This must manually switch pages because another function calls it to
206 advance the druid. It returns True to inform the druid of this.
207 """
208 ret = self.loginPageVerify()
209 if ret:
210 self.nextPage('loginPageVbox')
211 return
212
213 ret = self.loginPageApply()
214 if ret:
215 self.nextPage('loginPageVbox')
216 return
217
218 self.goToPageAfterLogin()
219
220
222 """This function is used by the create new account dialog so it doesn't
223 need to have any knowledge of the screen mechanism or order.
224 """
225 if not rhnregGui.ChooseChannelPage.chooseChannelShouldBeShown(self):
226 if hasattr(self.chooseChannelPageVbox, 'set_visible'):
227 self.chooseChannelPageVbox.set_visible(False)
228 else:
229 self.nextPage('createProfilePageVbox')
230
231 - def onChooseChannelPageNext(self, page, dummy):
232 self.chooseChannelPageApply()
233 if self.chose_all_updates or \
234 self.chose_default_channel is False:
235 dialog = rhnregGui.ConfirmAllUpdatesDialog()
236 if dialog.rc == 0:
237 self.nextPage('chooseChannelPageVbox')
238
239 - def onChooseChannelPagePrepare(self, mainWin, vbox):
241
242 - def onCreateProfilePagePrepare(self, mainWin, vbox):
244
245 - def onCreateProfilePageNext(self, page, dummy):
246 ret = self.createProfilePageVerify()
247 if ret:
248 return ret
249 ret = self.createProfilePageApply()
250 if ret:
251 return ret
252
255
256 - def onProvideCertificatePageNext(self, page=None, dummy=None):
257 status = self.provideCertificatePageApply()
258 if status == 0:
259 pass
260 elif status == 1:
261 self.nextPage('finishPageVbox')
262 elif status == 3:
263 self.nextPage('chooseServerPageVbox')
264 else:
265 assert status == 2
266 self.nextPage('provideCertificatePageVbox')
267 return
268
269
270 - def onFinishPagePrepare(self, mainWin, vbox):
271 if rhnregGui.hasBaseChannelAndUpdates():
272
273 title = _("Updates Configured")
274 else:
275
276 title = _("Software Updates Not Set Up")
277 self.finishPagePrepare()
278 self.mainWin.set_title(title)
279 self.mainWin.set_page_title(vbox, title)
280
281
284
285
288
289
291 signal.signal(signal.SIGINT, signal.SIG_DFL)
292
293 if os.geteuid() != 0:
294 rootWarning()
295 sys.exit(1)
296
297 gui = Gui()
298 gtk.main()
299
300
301 if __name__ == "__main__":
302 try:
303 main()
304 except xmlrpclib.ResponseError:
305 print(sys.exc_info()[1])
306 except IOError:
307 e = sys.exc_info()[1]
308 print(_("There was some sort of I/O error: %s") % e.errmsg)
309