def GET(self): # Must be logged in. login_required() # List all their sources. sources = UserSources.get_user_sources(users.get_current_user()) sources = sorted(sources, key=lambda source: source.title) renderer.addDataList('sources', sources) renderer.addData('messagecount', get_message_count(users.get_current_user())); renderer.addData('messageleft', get_quota(users.get_current_user())); # List all their devices. devices = UserDevices.get_user_devices(users.get_current_user()) devices = sorted(devices, key=lambda device: device.updated) renderer.addDataList('devices', devices) return renderer.render('profile/index.html')
def GET(self): # Must be logged in. login_required() mailbody = "Newtifry user data : \n" mailbody += "User : "******"\n" mailbody += "Message count : " + str(get_message_count(users.get_current_user())) + "\n" mailbody += "Sources : \n" # List all their sources. sources = UserSources.get_user_sources(users.get_current_user()) sources = sorted(sources, key=lambda source: source.title) for source in sources: mailbody += source.title + " " if source.enabled: mailbody += "Enabled " else: mailbody += "Disabled " mailbody += source.externalKey + "\n" mailbody += "\nDevices : \n" devices = UserDevices.get_user_devices(users.get_current_user()) devices = sorted(devices, key=lambda device: device.updated) for device in devices: mailbody += device.deviceNickname + "\n\tHash : " + device.hash() + "\n\tDevicekey " + device.deviceKey + "\n\tDevice Version " + device.deviceVersion + "\n" mailbody += "\n\nRegards\n" # renderer.addDataList('sources', sources) # renderer.addData('messagecount', get_message_count(users.get_current_user())); # renderer.addData('messageleft', get_quota(users.get_current_user())); # List all their devices. # renderer.addDataList('devices', devices) mail.send_mail(sender="Newtifry <*****@*****.**>", to="Newtifry user " + users.get_current_user().email(), subject="Newtifry user data", body=mailbody) renderer.addData('owner_mail', users.get_current_user().email()) return renderer.render('profile/datasent.html')
def POST(self, action): if action == 'list': sources = UserSources.get_user_sources(users.get_current_user()) renderer.addDataList('sources', sources) return renderer.render('sources/list.html') elif action == 'get': source = self.get_source() renderer.addData('source', source) return renderer.render('sources/detail.html') elif action == 'test': # Send a test message to the source and the caller device id. source = self.get_source() input = web.input(deviceid=None, language=None, src=None) logging.debug("Test DDB language : " + get_user_language(users.get_current_user())) if input.src: logging.debug("Test src : " + input.src) if input.language: logging.debug("Test input language : " + input.language) if input.src and input.src == "web": #get language from User DDB input.language = get_user_language(users.get_current_user()); else: if get_user_language(users.get_current_user()) == "English": logging.debug("DDB is English") if get_user_language(users.get_current_user()) == "English" and input.language and input.language != "English": logging.debug("Store new language in DDB") set_user_language(users.get_current_user(), input.language) # Fix up the source pointer. Useful if it's broken somehow. SourcePointer.persist(source) # Now create the test message. message_collection = UserMessages.get_user_message_collection(users.get_current_user()) message = UserMessage.create_test(source, web.ctx.ip, message_collection, input.language) # def transaction(message): # message.put() # message_collection = UserMessages.get_user_message_collection_static(users.get_current_user()) # message_collection.add_message(message) # message_collection.put() # db.run_in_transaction(transaction, message) sender = AC2DM.factory() result = sender.send_to_all(message, input.deviceid) renderer.addData('messagescount', get_message_count(message.source.owner)); renderer.addData('result', result); # And we're done. return renderer.render('sources/test.html') elif action == 'delete': source = self.get_source() message_collection = UserMessages.get_user_message_collection(source.owner) message_collection.delete_for_source(source) source_collection = UserSources.get_user_source_collection(users.get_current_user()) # Notify devices that something changed. # Also, if given a device, exclude that device from # the notification. input = web.input(device = None) source.notify_delete(input.device) def transaction(source): source_collection = UserSources.get_user_source_collection_static(users.get_current_user()) source_collection.remove_source(source) source.delete() source_collection.put() db.run_in_transaction(transaction, source) # Remove the pointer. If this fails, it's not a big issue, as it's # checked anyway before use. SourcePointer.remove(source) renderer.addData('success', True) return renderer.render('sources/deletecomplete.html') else: source = self.get_source() # Get the form and the form data. form = self.get_form() form.fill(source.dict()) if not form.validates(): # Failed to validate. Display the form again. renderer.addTemplate('action', self.get_pretty_action(action)) renderer.addTemplate('form', form) errors = form.getnotes() renderer.addDataList('errors', errors) return renderer.render('sources/edit.html') else: # Validated - proceed. source.updated = datetime.datetime.now() try: title = form.title.get_value() title.replace('\n', ' ') title.replace('\r', ' ') source.title = title except: logging.error('source name error' + form.title.get_value()); source.title = "Bad source name format" #source.description = form.description.get_value() #source.enabled = False source.owner = users.get_current_user() #if form.enabled.get_value(): # source.enabled = True source.enabled = True # Make sure the source collection exists. UserSources.get_user_source_collection(users.get_current_user()) # Place into source collection. def transaction(source): source_collection = UserSources.get_user_source_collection_static(users.get_current_user()) source.put() source_collection.add_source(source) source_collection.put() db.run_in_transaction(transaction, source) # Set up the source pointer. SourcePointer.persist(source) # Notify devices that something changed. # Also, if given a device, exclude that device from # the notification. input = web.input(device = None) source.notify(input.device) if renderer.get_mode() == 'html': # Redirect to the source list. raise web.found('/profile') else: # Send back the source data. renderer.addData('source', source) return renderer.render('apionly.html')