Browse Source

Add showing/adding accounts

master
Chris Smith 14 years ago
parent
commit
48069913c3
1 changed files with 60 additions and 16 deletions
  1. 60
    16
      src/helloworld.py

+ 60
- 16
src/helloworld.py View File

@@ -5,16 +5,12 @@ from google.appengine.api import users
5 5
 from google.appengine.ext.webapp.util import run_wsgi_app
6 6
 from google.appengine.ext import db
7 7
 
8
-class User(db.Model):
9
-    user = db.UserProperty()
10
-    joindate = db.DateTimeProperty(auto_now_add=True)
11
-
12 8
 class AchievementSource(db.Model):
13 9
     name = db.StringProperty()
14 10
     url = db.LinkProperty()
15 11
 
16 12
 class UserAccount(db.Model):
17
-    user = db.ReferenceProperty(reference_class=User)
13
+    user = db.UserProperty()
18 14
     source = db.ReferenceProperty(reference_class=AchievementSource)
19 15
     credentials = db.StringProperty()
20 16
     added = db.DateTimeProperty(auto_now_add=True)
@@ -28,7 +24,7 @@ class Achievement(db.Model):
28 24
 
29 25
 class AwardedAchievement(db.Model):
30 26
     achievement = db.ReferenceProperty(reference_class=Achievement)
31
-    user = db.ReferenceProperty(reference_class=User)
27
+    user = db.UserProperty()
32 28
     awarded = db.DateTimeProperty()
33 29
     discovered = db.DateTimeProperty(auto_now_add=True)
34 30
 
@@ -45,6 +41,8 @@ class MainPage(webapp.RequestHandler):
45 41
         if users.is_current_user_admin():
46 42
             self.show_admin_form()
47 43
 
44
+        self.show_sources()
45
+
48 46
         self.show_footer()
49 47
 
50 48
     def show_header(self):
@@ -62,7 +60,7 @@ class MainPage(webapp.RequestHandler):
62 60
 
63 61
     def show_admin_form(self):
64 62
         self.response.out.write("""
65
-          <h1>Sources</h1>
63
+          <h1>Admin - Sources</h1>
66 64
           <h2>Add</h2>
67 65
           <form action="/admin/addsource" method="post">
68 66
            <label>Name: <input type="text" name="name"/></label>
@@ -75,11 +73,42 @@ class MainPage(webapp.RequestHandler):
75 73
            """)
76 74
 
77 75
         for source in AchievementSource.all():
78
-            self.response.out.write("<tr><td>");
76
+            self.response.out.write("<tr><td>")
79 77
             self.response.out.write(cgi.escape(source.name))
80
-            self.response.out.write("</td><td>");
78
+            self.response.out.write("</td><td>")
81 79
             self.response.out.write(cgi.escape(source.url))
82
-            self.response.out.write("</td></tr>");
80
+            self.response.out.write("</td></tr>")
81
+
82
+        self.response.out.write("</table>")
83
+
84
+    def show_sources(self):
85
+        self.response.out.write("<h1>My Accounts</h1>")
86
+        self.response.out.write("<table>")
87
+        self.response.out.write("<tr><th>Source</th><th>Credentials</th></tr>")
88
+
89
+        for account in UserAccount.gql("WHERE user = :user", user=users.get_current_user()):
90
+            self.response.out.write("<tr><td>")
91
+            self.response.out.write(cgi.escape(account.source.name))
92
+            self.response.out.write("</td><td>")
93
+            self.response.out.write(cgi.escape(account.credentials))
94
+            self.response.out.write("</td></tr>")
95
+
96
+        self.response.out.write("</table>")
97
+        self.response.out.write("""<h2>Add Account</h2>
98
+          <form action="/addaccount" method="post">
99
+           <label>Type: <select name="type">""")
100
+
101
+        for source in AchievementSource.all():
102
+            self.response.out.write('<option value="')
103
+            self.response.out.write(source.key())
104
+            self.response.out.write('">')
105
+            self.response.out.write(cgi.escape(source.name))
106
+            self.response.out.write('</option>')
107
+
108
+        self.response.out.write("""</select></label>
109
+           <label>Credentials: <input type="text" name="credentials"/></label>
110
+           <input type="submit" value="Add"/>
111
+          </form>""")
83 112
 
84 113
 class AddSourcePage(webapp.RequestHandler):
85 114
     def post(self):
@@ -94,16 +123,31 @@ class AddSourcePage(webapp.RequestHandler):
94 123
 
95 124
         self.redirect('/')
96 125
 
126
+class AddAccountPage(webapp.RequestHandler):
127
+    def post(self):
128
+
129
+        if not users.get_current_user():
130
+            self.error(403)
131
+            return
132
+
133
+        source = db.get(db.Key(self.request.get('type')))
134
+
135
+        account = UserAccount(user=users.get_current_user(),
136
+                              source=source,
137
+                              credentials=self.request.get('credentials'))
138
+        account.put()
139
+
140
+        self.redirect('/')
141
+
97 142
 
98
-class Guestbook(webapp.RequestHandler):
143
+class UpdatePage(webapp.RequestHandler):
99 144
     def post(self):
100
-        self.response.out.write('<html><body>You wrote:<pre>')
101
-        self.response.out.write(cgi.escape(self.request.get('content')))
102
-        self.response.out.write('</pre></body></html>')
145
+        account = db.get(db.Key(self.request.get('key')))
103 146
 
104 147
 application = webapp.WSGIApplication([('/', MainPage),
105
-                                      ('/sign', Guestbook),
106
-                                      ('/admin/addsource', AddSourcePage)],
148
+                                      ('/admin/addsource', AddSourcePage),
149
+                                      ('/worker/update', UpdatePage),
150
+                                      ('/addaccount', AddAccountPage)],
107 151
                                      debug=True)
108 152
 
109 153
 def main():

Loading…
Cancel
Save