-BACKEND_URL = 'https://www-test.allmydata.com/native_client2.php'
-REGISTER_PAGE = 'https://www-test.allmydata.com/register'
+BACKEND_URL = 'https://www-test.allmydata.com/native_client.php'
+#REGISTER_PAGE = 'https://www-test.allmydata.com/register'
TAHOESVC_NAME = 'Tahoe'
WINFUSESVC_NAME = 'Allmydata Tahoe SMB'
import os
import sys
+#import time
import traceback
import urllib2
from urllib import urlencode
-import webbrowser
+#import webbrowser
import wx
from allmydata.util.assertutil import precondition
else:
return root_cap
+def create_account(url, user, passwd, subscribe):
+ args = {
+ 'action': 'create_account',
+ 'email': unicode_to_utf8(user),
+ 'passwd': unicode_to_utf8(passwd),
+ 'subscribe': subscribe and 'true' or 'false',
+ }
+ result_code = post(url, args)
+ return result_code
+
def get_introducer_furl(url):
return post(url, { 'action': 'getintroducerfurl' })
try:
wx.InitAllImageHandlers()
- self.frame = ConfWizFrame(self)
- self.frame.CenterOnScreen()
- self.SetTopWindow(self.frame)
+ self.login_frame = LoginFrame(self)
+ self.login_frame.CenterOnScreen()
+ self.SetTopWindow(self.login_frame)
self.SetExitOnFrameDelete(True)
- self.frame.Show(True)
+ self.login_frame.Show(True)
return True
except:
DisplayTraceback('config wizard init threw an exception')
-class ConfWizFrame(wx.Frame):
+ def swap_to_register_frame(self):
+ try:
+ self.login_frame.Show(False)
+ self.regiser_frame = RegisterFrame(self)
+ self.regiser_frame.CenterOnScreen()
+ self.SetTopWindow(self.regiser_frame)
+ self.SetExitOnFrameDelete(True)
+ self.regiser_frame.Show(True)
+ except:
+ DisplayTraceback('config wizard threw an exception')
+
+class LoginFrame(wx.Frame):
def __init__(self, app):
title = 'Allmydata Tahoe Config Wizard'
wx.Frame.__init__(self, None, -1, title)
background = wx.Panel(self, -1)
background.parent = self
self.login_panel = LoginPanel(background)
- self.register_panel = RegisterPanel(background)
+ self.reg_btn_panel = RegisterButtonPanel(background, app)
sizer = wx.BoxSizer(wx.VERTICAL)
background_sizer = wx.BoxSizer(wx.VERTICAL)
background_sizer.Add(self.login_panel, 1, wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 26)
+ background_sizer.Add(self.reg_btn_panel, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 26)
+ background.SetSizer(background_sizer)
+ sizer.Add(background, 0, wx.EXPAND | wx.ALL, 0)
+ self.SetSizer(sizer)
+ self.SetAutoLayout(True)
+ self.Fit()
+ self.Layout()
+
+ def close(self, event):
+ sys.exit()
+
+class RegisterFrame(wx.Frame):
+ def __init__(self, app):
+ title = 'Allmydata Tahoe Config Wizard'
+ wx.Frame.__init__(self, None, -1, title)
+ self.app = app
+ self.SetSizeHints(100, 100, 600, 800)
+ self.SetIcon(amdicon.getIcon())
+ self.Bind(wx.EVT_CLOSE, self.close)
+
+ background = wx.Panel(self, -1)
+ background.parent = self
+ self.register_panel = RegisterPanel(background)
+ sizer = wx.BoxSizer(wx.VERTICAL)
+ background_sizer = wx.BoxSizer(wx.VERTICAL)
background_sizer.Add(self.register_panel, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 26)
background.SetSizer(background_sizer)
sizer.Add(background, 0, wx.EXPAND | wx.ALL, 0)
def close(self, event):
sys.exit()
+
class LoginPanel(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent, -1)
login_sizer.Add(wx.Size(2,2), 0, wx.ALIGN_RIGHT | wx.ALL, 2)
login_sizer.Add(self.login_button, 0, wx.ALIGN_RIGHT | wx.ALL, 2)
self.sizer.Add(login_sizer, 1, wx.EXPAND | wx.ALL, 2)
- #self.sizer.Add(self.warning_label, 0, wx.EXPAND | wx.ALL, 2)
self.sizer.Add(self.warning_label, 0, wx.CENTER | wx.ALL, 2)
self.SetSizer(self.sizer)
self.SetAutoLayout(True)
def on_login(self, event):
user = self.user_field.GetValue()
passwd = self.pass_field.GetValue()
- self.warning_label.SetLabel('')
+ self.warning_label.SetLabel('Connecting...')
+ self.Layout()
+ wx.Yield()
+
+ if passwd == '':
+ self.warning_label.SetLabel('You must enter a password')
+ self.pass_field.SetFocus()
+ self.Layout()
+ return
try:
root_cap = get_root_cap(BACKEND_URL, user, passwd)
except:
DisplayTraceback('Failed to start windows service "%s"' % (svc_name,))
-class RegisterPanel(wx.Panel):
- def __init__(self, parent):
+class RegisterButtonPanel(wx.Panel):
+ def __init__(self, parent, app):
wx.Panel.__init__(self, parent, -1)
self.parent = parent
+ self.app = app
self.sizer = wx.BoxSizer(wx.VERTICAL)
self.SetAutoLayout(True)
def on_reg_button(self, event):
- webbrowser.open(REGISTER_PAGE)
+ #webbrowser.open(REGISTER_PAGE)
+ self.app.swap_to_register_frame()
+
+class RegisterPanel(wx.Panel):
+ def __init__(self, parent):
+ wx.Panel.__init__(self, parent, -1)
+ self.parent = parent
+
+ self.sizer = wx.BoxSizer(wx.VERTICAL)
+
+ self.user_label = wx.StaticText(self, -1, 'Email')
+ self.pass_label = wx.StaticText(self, -1, 'Password')
+ self.conf_label = wx.StaticText(self, -1, 'Confirm Password')
+ self.user_field = wx.TextCtrl(self, -1, u'', size=(260,-1))
+ self.pass_field = wx.TextCtrl(self, -1, u'', size=(260,-1), style=wx.TE_PASSWORD)
+ self.conf_field = wx.TextCtrl(self, -1, u'', size=(260,-1), style=wx.TE_PASSWORD)
+ self.create_account_button = wx.Button(self, -1, 'Create Account')
+ self.subscribe_box = wx.CheckBox(self, -1, 'Sign up for our Newsletter')
+ self.subscribe_box.SetValue(True)
+ self.warning_label = wx.StaticText(self, -1, '')
+ self.warning_label.SetOwnForegroundColour(wx.RED)
+ wx.EVT_CHAR(self.user_field, self.on_user_entry)
+ wx.EVT_CHAR(self.pass_field, self.on_pass_entry)
+ wx.EVT_CHAR(self.conf_field, self.on_conf_entry)
+ self.Bind(wx.EVT_BUTTON, self.on_create_account, self.create_account_button)
+ login_sizer = wx.FlexGridSizer(4, 2, 5, 4)
+ login_sizer.Add(self.user_label, 0, wx.ALIGN_RIGHT | wx.ALL, 2)
+ login_sizer.Add(self.user_field, 0, wx.EXPAND | wx.ALL, 2)
+ login_sizer.Add(self.pass_label, 0, wx.ALIGN_RIGHT | wx.ALL, 2)
+ login_sizer.Add(self.pass_field, 0, wx.EXPAND | wx.ALL, 2)
+ login_sizer.Add(self.conf_label, 0, wx.ALIGN_RIGHT | wx.ALL, 2)
+ login_sizer.Add(self.conf_field, 0, wx.EXPAND | wx.ALL, 2)
+ login_sizer.Add(wx.Size(2,2), 0, wx.ALIGN_RIGHT | wx.ALL, 2)
+ login_sizer.Add(self.create_account_button, 0, wx.ALIGN_RIGHT | wx.ALL, 2)
+ self.sizer.Add(login_sizer, 1, wx.EXPAND | wx.ALL, 2)
+ self.sizer.Add(self.warning_label, 0, wx.CENTER | wx.ALL, 2)
+ self.sizer.Add(self.subscribe_box, 0, wx.CENTER | wx.ALL, 2)
+ self.SetSizer(self.sizer)
+ self.SetAutoLayout(True)
+
+ def on_user_entry(self, event):
+ if event.GetKeyCode() == wx.WXK_RETURN:
+ self.pass_field.SetFocus()
+ else:
+ event.Skip()
+
+ def on_pass_entry(self, event):
+ if event.GetKeyCode() == wx.WXK_RETURN:
+ self.conf_field.SetFocus()
+ else:
+ event.Skip()
+
+ def on_conf_entry(self, event):
+ if event.GetKeyCode() == wx.WXK_RETURN:
+ self.on_create_account(event)
+ else:
+ event.Skip()
+
+ def on_create_account(self, event):
+ user = self.user_field.GetValue()
+ passwd = self.pass_field.GetValue()
+ pconf = self.conf_field.GetValue()
+ subscribe = self.subscribe_box.IsChecked()
+ self.warning_label.SetLabel('Connecting...')
+ self.Layout()
+ wx.Yield()
+
+ if passwd == '':
+ self.warning_label.SetLabel('You must enter a password')
+ self.pass_field.SetFocus()
+ self.Layout()
+ return
+
+ if passwd != pconf:
+ self.warning_label.SetLabel("Passwords don't match")
+ self.pass_field.SetValue('')
+ self.conf_field.SetValue('')
+ self.pass_field.SetFocus()
+ self.Layout()
+ return
+
+ #print 'calling create_account', time.asctime()
+ result_code = create_account(BACKEND_URL, user, passwd, subscribe)
+
+ if result_code == 'account_exists':
+ # try and log into it; if valid, use it anyway
+ try:
+ #print 'calling get_root_cap (ae)', time.asctime()
+ root_cap = get_root_cap(BACKEND_URL, user, passwd)
+ write_config_file('private/root_dir.cap', root_cap+'\n')
+ except AuthError:
+ self.warning_label.SetLabel('That email address is already registered')
+ self.user_field.SetFocus()
+ self.Layout()
+ return
+ elif result_code == 'error':
+ self.warning_label.SetLabel('an error occurred')
+ self.user_field.SetFocus()
+ self.Layout()
+ return
+ elif result_code == 'ok':
+ #print 'calling get_root_cap (ok)', time.asctime()
+ root_cap = get_root_cap(BACKEND_URL, user, passwd)
+ write_config_file('private/root_dir.cap', root_cap+'\n')
+ else:
+ self.warning_label.SetLabel('an unexpected error occurred ("%s")' % (result_code,))
+ self.user_field.SetFocus()
+ self.Layout()
+ return
+
+ # fetch the introducer furl
+ #print 'calling get_introducer_furl', time.asctime()
+ ifurl = get_introducer_furl(BACKEND_URL)
+ write_config_file('introducer.furl', ifurl+'\n')
+
+ # start service etc.
+ if sys.platform == 'win32':
+ self.start_windows_service(TAHOESVC_NAME)
+ self.start_windows_service(WINFUSESVC_NAME)
+
+ # exit
+ self.parent.parent.Close()
+
+ def start_windows_service(self, svc_name):
+ try:
+ import win32service
+ import win32serviceutil as wsu
+ if wsu.QueryServiceStatus(svc_name)[1] != win32service.SERVICE_RUNNING:
+ wsu.StartService(svc_name)
+ except:
+ DisplayTraceback('Failed to start windows service "%s"' % (svc_name,))
+
def main():
app = ConfWizApp()