Switch to side-by-side view

--- a/ForgeClassic/sfx/prweb.py
+++ b/ForgeClassic/sfx/prweb.py
@@ -16,6 +16,8 @@
 class W:
     new_vhost = widgets.NewVHost()
     mysql_password = widgets.MySQLPassword()
+    prweb_email_password = widgets.PRWebEmailPassword()
+
 
 class VHostApp(SFXBaseApp):
     '''This is the VHOST app for PyForge'''
@@ -76,3 +78,32 @@
                 db.update(**kw)
                 flash('Passwords updated')
             redirect('.')
+
+class PRWebEmailApp(SFXBaseApp):
+    '''This is the Project Web Email Password app for PyForge'''
+    tool_label='Project Web Outgoing Email'
+    default_mount_label='PRWebEmail'
+    default_mount_point='sfx-smtp'
+    status='alpha'
+    ordinal=11
+
+    class AdminController(DefaultAdminController):
+
+        @with_trailing_slash
+        @expose('jinja:sfx/prweb_email_admin.html')
+        def index(self, **kw):
+            c.form = W.prweb_email_password
+            return dict(value=SM.PRWebEmailAddress())
+
+        @without_trailing_slash
+        @validate(W.prweb_email_password, error_handler=index)
+        @expose()
+        def save(self, **kw):
+            db = SM.PRWebEmailAddress()
+            if db.passwd is None:
+                SM.PRWebEmailAddress.create(**kw)
+                flash('Password set')
+            else:
+                db.update(**kw)
+                flash('Password updated')
+            redirect('.')