Beispiel #1
0
	def get(self):
		locales = {
			'title': 'Developer Documentation',
			'description': 'Documentation on how to build your own provider',
			'user': users.get_current_user(),
			'session': dal.return_and_global_session_update(self),
			'is_current_user_admin': users.is_current_user_admin()
		}
		template = jinja_environment.get_template('developer/about.html')
		self.response.out.write(template.render(locales))
Beispiel #2
0
	def get(self):
		locales = {
			'title': 'List of Providers',
			'description': 'Get the API',
			'user': users.get_current_user(),
			'section': 'listing',
			'session': dal.return_and_global_session_update(self),
			'is_current_user_admin': users.is_current_user_admin()
		}
		template = jinja_environment.get_template('developer/providers.html')
		self.response.out.write(template.render(locales))
Beispiel #3
0
	def get(self):
		locales = {
			'title': 'Details on Searches',
			'description': 'Get Details on searches that occured for your Provider',
			'user': users.get_current_user(),
			'section': 'details',
			'session': dal.return_and_global_session_update(self),
			'is_current_user_admin': users.is_current_user_admin()
		}
		template = jinja_environment.get_template('developer/details.html')
		self.response.out.write(template.render(locales))
Beispiel #4
0
	def get(self):
		locales = {
			'title': 'Searching with our API',
			'description': 'Learn how to use our API to include searching in your Application',
			'user': users.get_current_user(),
			'section': 'search',
			'session': dal.return_and_global_session_update(self),
			'is_current_user_admin': users.is_current_user_admin()
		}
		template = jinja_environment.get_template('developer/search.html')
		self.response.out.write(template.render(locales))
Beispiel #5
0
	def get(self):

		# Create the locales
		locales = {
			'title': 'About',
			'description': 'Who we are and what we do to search all the registered providers',
			'user': users.get_current_user(),
			'session': dal.return_and_global_session_update(self),
			'is_current_user_admin': users.is_current_user_admin()
		}

		# Parse and send template
		template = jinja_environment.get_template('about.html')
		self.response.out.write(template.render(locales))
Beispiel #6
0
	def get(self):

		# Locales
		locales = {
			'title': 'Privacy Policy',
			'description': 'How we handle data from our users and partners',
			'user': users.get_current_user(),
			'session': dal.return_and_global_session_update(self),
			'is_current_user_admin': users.is_current_user_admin()
		}

		# Parse and output template
		template = jinja_environment.get_template('privacy_statement.html')
		self.response.out.write(template.render(locales))
Beispiel #7
0
	def get(self):

		# Locales
		locales = {
			'title': 'Terms of Service',
			'description': 'On what basis is this service provided. Please read this carefully.',
			'user': users.get_current_user(),
			'session': dal.return_and_global_session_update(self),
			'is_current_user_admin': users.is_current_user_admin()
		}

		# Render and send the template
		template = jinja_environment.get_template('terms_of_service.html')
		self.response.out.write(template.render(locales))
Beispiel #8
0
	def get(self):

		# Get the current logged-in user
		user = users.get_current_user()

		locales = {
			'title': 'Registering a Provider',
			'description': 'Browse all our Registered Providers. These providers have been approved by us and they had to pass numerous requirements to be considered valid.',
			'user': user,
			'session': dal.return_and_global_session_update(self),
			'is_current_user_admin': users.is_current_user_admin()
		}
		template = jinja_environment.get_template('provider/checks.html')
		self.response.out.write(template.render(locales))
Beispiel #9
0
	def get(self):

		# Get the Session
		session = dal.return_and_global_session_update(self)

		# Locales
		locales = {
			'title': 'Welcome',
			'description': 'Search Microchips',
			'user': users.get_current_user(),
			'homepage': True,
			'session': session,
			'is_current_user_admin': users.is_current_user_admin()
		}

		# Render the template
		template = jinja_environment.get_template('homepage.html')
		self.response.out.write(template.render(locales))
Beispiel #10
0
	def get(self):

		# Get the user
		user = users.get_current_user()

		# Check if the user is logged-in
		if user:
			
			# Lists from DAL
			providers = dal.providers_by_user(user)
			clients = dal.get_clients_by_user(user)
			searches = dal.get_user_searches(user, 5, 2)

			# Locales of the Template
			locales = {
				'title': user.nickname(),
				'description': 'Search Microchips',
				'user': user,
				'providers': providers,
				'provider_count': len(providers),
				'clients': clients,
				'client_count': clients.count(),
				'searches': searches,
				'search_count': len(searches),
				'session': dal.return_and_global_session_update(self),
				'is_current_user_admin': users.is_current_user_admin()
			}

			# Create our template
			template = jinja_environment.get_template('user/profile.html')

			# Render Template
			self.response.out.write(template.render(locales))

		else:
			# Redirect to login
			self.redirect('/signin')
Beispiel #11
0
	def get(self, uid, result_number=0):

		if uid:

			# Get the search object and responses
			(search_obj, search_responses) = dal.search_by_token(uid)

			# Check if the search exists and if any responses are associated with it.
			if search_obj and search_responses and search_obj.expires > datetime.datetime.now():

				# Get the current logged-in user
				user = users.get_current_user()

				# Update the expiring date. We allow anyone to view the search x minutes after it's been searched
				search_obj.expires = datetime.datetime.now() + datetime.timedelta( minutes=runner.EXPIRES_AFTER )
				search_obj.put()

				# Filter the Results to what we need
				success_results = []
				failure_results = []

				for response in search_responses:

					if response.status == runner.ProviderResponse.STATUS_FOUND:
						success_results.append(response)
					elif response.status not in [runner.ProviderResponse.STATUS_FOUND, runner.ProviderResponse.STATUS_NOTFOUND]:
						failure_results.append(response)

				# Get the current provider, chip and owner to show
				if len(success_results) > 0:
				
					# What response should we look at ?
					current_index = 0

					if self.request.get('provider'):

						# Only executed if the user provided a provider to check for.
						# This is used when multiple provider gave a response.
						# So we can list all the responses for the user.
						try:

							# Assign custom index from request
							requested_provider_uid = int(self.request.get('provider'))

							# Get the index of a the provider with that id
							current_index = [int(y.provider.key().id()) for y in success_results].index(requested_provider_uid)

						except Exception as ex:

							# Just use the default value
							current_index = 0

					# Check that the index is sane else we make it the first one
					if current_index > (len(success_results)):
						current_index = 0

					# Single Response Object
					single_response = success_results[current_index]

					# Get the provider
					provider = success_results[current_index].provider

					# Get the Chip Details
					chip = json.loads(success_results[current_index].parsed_response)

					# Section of the Result Page to show.
					section = 'info'

					# Set section according to request
					if self.request.get('section'):

						# Parse the string as a section
						requested_section_str = str(self.request.get('section').strip().lower())

						# Is this a valid Section
						if requested_section_str in ['info', 'result', 'contact']:

							# Then we assign it
							section = requested_section_str

					# ########
					# Handle Posts if any
					# ########

					# success_message_flags
					contact_form_success = False

					# Errors
					contact_form_error = False

					# Handle Contact Form
					if self.request.POST.get('form_contact'):

						# Set section as they will want to see their response
						section = 'contact'

						# Handle the contact form
						contact_name = self.request.POST.get('form_contact_name')
						contact_email = self.request.POST.get('form_contact_email')
						contact_message = self.request.POST.get('form_contact_message')

						# Validate
						contact_form_error = None

						if single_response.email_sent == True:
							# We can't send multiple E-Mails to the same user on the same search
							contact_form_error = 'An E-Mail has already been sent to the user. We do not allow multiple E-Mails to prevent spamming. Please give the user some time to response to your E-Mail after which you\'ll be able to communicate directly.'
						elif not contact_name or len(str(contact_name).strip()) == 0:
							# Name is Required
							contact_form_error = 'Your name is Required'
						elif not contact_email or len(str(contact_email).strip()) == 0 or not re.match(r"^[A-Za-z0-9\.\+_-]+@[A-Za-z0-9\._-]+\.[a-zA-Z]*$", contact_email):
							# An Valid E-Mail is Required
							contact_form_error = 'A Valid E-Mail by which the user can reach you again.'
						elif not contact_message or len(str(contact_message).strip()) == 0:
							# Message is required
							contact_form_error = 'We need a message which we will send to the user. This should include basic details such as where you found the pet and your location'
						else:

							# Generate Template to send
							template_locales = {
								'title': 'Search for #' + str(search_obj.uid),
								'description': 'Contact message by User who searched for #' + str(search_obj.uid),
								'chip': chip,
								'subject': 'Contact message by User who searched for #' + str(search_obj.uid),
								'sender_name': str(contact_name).strip(),
								'sender_email': str(contact_email).strip(),
								'message': str(contact_message).strip(),
								'provider': provider
							}

							# The Form parameters were validated
							mailer.send(
								to=str(chip['owner']['email']),
								reply_to=str(template_locales['sender_email']),
								subject=str(template_locales['subject']),
								view='mail/contact_from_search.html',
								locales=template_locales)

							# Update to show that the E-Mail was sent
							single_response.email_sent = True
							single_response.email_sent_from = str(contact_email).strip()
							single_response.email_sent_name = str(contact_name).strip()
							single_response.email_sent_text = str(contact_message).strip()
							single_response.put()

							section = 'info'
							contact_form_success = 'true'

					# Create the Locales for the Page to use
					locales = {
						'title': 'Search for #' + str(search_obj.uid),
						'description': 'The results of the search for the Unique Number #' + str(search_obj.uid),
						'chip': chip,
						'current_response': single_response,
						'search': search_obj,
						'provider': provider,
						'success_results': search_obj.provider_success_responses,
						'failure_results': search_obj.provider_failure_responses,
						'notfound_results': search_obj.provider_notfound_responses,
						'total_providers_asked': search_obj.provider_total_requests,
						'search_obj': search_obj,
						'search_responses': search_responses,
						'search_success_responses': success_results,
						'search_failure_responses': failure_results,
						'user': user,
						'contact_form_error': contact_form_error,
						'contact_form_success': contact_form_success,
						'section': section,
						'post_params': self.request.POST,
						'contact_post_url': '/view/' + search_obj.token + "?provider=" + str(provider.key().id()) + "&response=" + str(single_response.key().id()),
						'session': dal.return_and_global_session_update(self),
						'is_current_user_admin': users.is_current_user_admin()
					}

					# Render the Template with those Values
					template = jinja_environment.get_template('search/result.html')
					self.response.out.write(template.render(locales))

				else:

					session_store = sessions.get_store(request=self.request)
					session = session_store.get_session()

					if 'search_token' not in session:
						session['search_token'] = str(uuid.uuid1())

					session_store.save_sessions(self.response)

					# Well if their was not result we redirect to homepage
					# Create the Locales for the Page to use
					locales = {
						'title': 'No Results found for #' + str(search_obj.uid),
						'description': 'The results of the search for the Unique Number #' + str(search_obj.uid),
						'success_results': search_obj.provider_success_responses,
						'failure_results': search_obj.provider_failure_responses,
						'notfound_results': search_obj.provider_notfound_responses,
						'total_providers_asked': search_obj.provider_total_requests,
						'search_obj': search_obj,
						'search': search_obj,
						'search_responses': search_responses,
						'search_success_responses': success_results,
						'search_failure_responses': failure_results,
						'user': user,
						'session': session,
						'session': dal.return_and_global_session_update(self),
						'is_current_user_admin': users.is_current_user_admin()
					}

					# self.response.out.write("<li>" + detail.provider.name + " <-> <img src=\"" + images.get_serving_url(detail.provider.logo.key(), 32) + "\" /></li>")

					# Render the Template with those Values
					template = jinja_environment.get_template('search/notfound.html')
					self.response.out.write(template.render(locales))

			else:

				# That search does not exist. Redirect them to the homepage.
				self.redirect('/')

		else:

			# They did not give a search uid redirect them to the homepage
			self.redirect('/')
Beispiel #12
0
	def get(self):

		session = dal.return_and_global_session_update(self)

		year = int(time.strftime("%Y"))

		if self.request.get('year'):
			try:
				year = int(self.request.get('year'))
			except:
				pass

		search_count = memcache.get("search_count_" + str(year))
		if search_count is None:
			search_count = db.GqlQuery("SELECT * FROM UserSearch WHERE created > DATE(:1, 1, 1) AND created < DATE(:2, 12, 31)", year, year).count()

			if not memcache.add("search_count_" + str(year), search_count, 60*10):
				pass

		success_search_count = memcache.get("success_search_count_" + str(year))
		if success_search_count is None:
			success_search_count = db.GqlQuery("SELECT * FROM UserSearch WHERE success_status = True AND created > DATE(:1, 1, 1) AND created < DATE(:2, 12, 31)", year, year).count()

			if not memcache.add("success_search_count_" + str(year), success_search_count, 60*10):
				pass

		search_contact_count = memcache.get("search_contact_count_" + str(year))
		if search_contact_count is None:
			search_contact_count = db.GqlQuery("SELECT * FROM UserSearchDetail WHERE email_sent = True AND created > DATE(:1, 1, 1) AND created < DATE(:2, 12, 31)", year, year).count()

			if not memcache.add("search_contact_count_" + str(year), search_contact_count, 60*10):
				pass

		stats = memcache.get("stat_page_" + str(year))
		if stats is None:
			stats = []

			responses = dal.get_stats({
				'year': int(year)
			})
		
			stat = {
				'year': int(year),
				'countries': dal.parse_out_countries(responses),
				'cities': dal.parse_out_cities(responses)
			}
			stats.insert(0, stat)

			if not memcache.add("stat_page_" + str(year), stats, 60*10):
				pass

		locales = {
			'title': 'Statistics',
			'description': 'Some Statistics about Searches that were performed on our website and where they came from.',
			'user': users.get_current_user(),
			'stats': stats,
			'years': xrange(2012, int(time.strftime("%Y"))+1),
			'current_year': year,
			'search_count': search_count,
			'search_contact_count': search_contact_count,
			'success_search_count': success_search_count,
			'session': session,
			'is_current_user_admin': users.is_current_user_admin()
		}
		template = jinja_environment.get_template('stats.html')
		self.response.out.write(template.render(locales))
Beispiel #13
0
	def get(self):

		user = users.get_current_user()

		if user:

			if 'USER_ORGANIZATION' in os.environ:
				user.organization = os.environ['USER_ORGANIZATION']

			session_store = sessions.get_store(request=self.request)
			session = session_store.get_session()

			# Error to show if any
			register_form_error = False

			# Check if this is a form post
			if self.request.POST.get('form_register'):

				# Assign Local cleaned parameters
				provider_name = str(self.request.POST.get('form_provider_name')).strip()
				provider_description = str(self.request.POST.get('form_provider_description')).strip()
				provider_website = str(self.request.POST.get('form_provider_website')).strip()

				# Valdidate
				if not self.request.POST.get('form_provider_name') or len(provider_name) == 0:
					# Name is Required
					register_form_error = 'Name of your Provider is Required'
				elif not self.request.POST.get('form_provider_website') or len(provider_website) == 0 or (not 'http://' in provider_website or 'https://' in provider_website):
					# Website is Required. # We check for http:// or https://
					register_form_error = 'Website of your Provider is Required. The Path must include http:// or https://'
				else:

					# Handle Logo Uploads
					logo = None
					try:
						logo = self.get_uploads()[0]
					except:
						register_form_error = 'Error while uploading Logo'

					# Create our API Secret Key
					d = date.today()
					value_key = str(str(d.year) + "-" + str(d.month) + "-" + str(d.day)) + provider_name + provider_description + provider_website
					provider_secret = hashlib.sha1(value_key).hexdigest()

					# Create the Provider Object and Populate
					provider_obj = schemas.Provider(
						name=provider_name,
						description=provider_description,
						website=provider_website,
						approved=False,
						tested=False,
						logo=logo,
						secret=provider_secret)

					# Save that sucker
					provider_obj.put()

					if self.request.POST.get('form_provider_name') == 'yes' and user.organization and len(user.organization) > 0:

						if 'members' in session:
							for member in session['members']:
								if 'admin' in member and member['admin'] == 'true':
									# Add the current user as the first member
									new_member = users.User(member['email'])
									membership_obj = schemas.ProviderMember(provider=provider_obj,user=new_member)
									membership_obj.put()

					else:
						# Add the current user as the first member
						membership_obj = schemas.ProviderMember(provider=provider_obj,user=user)
						membership_obj.put()

					# The Form parameters were validated
					mailer.send_admin(
						subject='New Provider registered ' + str(provider_obj.name),
						body='New Provider registered ' + str(provider_obj.name))

					# Text
					text_str = 'New Provider Registration Received for IdentiChip'

					# Send Mail to Member
					template_locales = {
						'title': text_str,
						'description': text_str,
						'subject': text_str,
						'provider': provider_obj,
						'user': user
					}

					# Send to Current User
					mailer.send(
						to=str(user.email()),
						reply_to='*****@*****.**',
						subject=template_locales['subject'],
						view='mail/provider/provider_new.html',
						locales=template_locales)

					# Redirect to the new Registered Provider
					self.redirect('/provider/' + str(provider_obj.key().id()))

			# Count of the Admins in the Group
			admin_member_count = 0

			if 'members' in session:
				for member in json.loads(str(session['members'])):
					if 'admin' in member and member['admin'] == 'true':
						admin_member_count = admin_member_count + 1

			# Create the registration layout
			locales = {
				'register_form_error': register_form_error,
				'title': 'Register a New Provider',
				'description': 'Search Microchips',
				'user': user,
				'admin_member_count': admin_member_count,
				'session': session,
				'post_params': self.request.POST,
				'upload_url': blobstore.create_upload_url('/provider/register'),
				'session': dal.return_and_global_session_update(self),
				'is_current_user_admin': users.is_current_user_admin()
			}
			template = jinja_environment.get_template('provider/create.html')
			self.response.out.write(template.render(locales))

		else:
			self.redirect(users.create_login_url('/provider/register'))
Beispiel #14
0
	def get(self, provider_uid):

		provider_obj = schemas.Provider.get_by_id(int(provider_uid))
		user = users.get_current_user()

		if provider_obj is not None and provider_obj is not False:
			
			locales = {
				'title': provider_obj.name,
				'description': 'Dashboard for Provider',
				'user': user,
				'provider': provider_obj,
				'session': dal.return_and_global_session_update(self),
				'is_current_user_admin': users.is_current_user_admin()
			}

			# Ok so Provider exists.
			# Now check if this is a logged in user and if they are a member of this provider.
			# If so we rather so a dashboard and edit properties and controls.
			if user:
				
				# Ok so let's check if they are a member
				membership_obj = dal.membership_by_user(provider_obj, user)
				if membership_obj is not None and membership_obj is not False:

					# Assign post variables
					locales['post_params'] = self.request.POST

					# Provider Information
					form_test_error = False
					form_test_success = False

					# Testing Tool Response
					form_test_response = False

					# Provider response
					form_test_provide_response = False

					# Check if they want to do a form post
					if self.request.POST.get('form_test_tool'):

						# Check the API Url
						if not self.request.POST.get('form_test_api_url'):
							form_test_error = 'Url of the API Endpoint is Required.'
						elif 'http://' not in self.request.POST.get('form_test_api_url') and 'https://' not in self.request.POST.get('form_test_api_url'):
							# Url where we send the information
							form_test_error = 'Url of the API Endpoint is Required. This must include either http:// or https:// and of course we recommend https to keep it secure.'
						elif not self.request.POST.get('form_test_search_uid') or len(str(self.request.POST.get('form_test_search_uid')).lower().strip()) == 0:
							# Search UID is Required
							form_test_error = 'Please provide a valid Search UID to check the endpoint for'
						else:

							# Assign the test url
							provider_obj.api_url = str(self.request.POST.get('form_test_api_url')).strip()

							# Post Params
							search_uid = str(self.request.POST.get('form_test_search_uid')).lower().strip()

							# Ok so run the test
							search_response = runner.search(self.request, str(search_uid), [ provider_obj ])

							# Show the output
							form_test_response = search_response

							# Assign the provider response
							form_test_provide_response = search_response.responses[0]

							# Check if the result is true, if so we update them as tested
							if form_test_provide_response.status == runner.ProviderResponse.STATUS_FOUND:

								# Assign the Boolean
								provider_obj.tested = True
								provider_obj.put()

								# Success !
								form_test_success = 'We tested the new Url and we got a valid response from the server. After which we set the new url as the default one.'

							else:
								form_test_error = 'Response from Server was not a successfull response. Please check the response that was returned and verify that everthing is working and setup. We will not update the API url until this test is passed.'

					# Param Assignment
					locales['form_test_error'] = form_test_error
					locales['form_test_success'] = form_test_success
					locales['form_test_response'] = form_test_response
					locales['form_test_provide_response'] = form_test_provide_response

					if provider_obj.approved and provider_obj.tested:

						register_form_error = False
						register_form_success = False

						# Check if this is a form post
						if self.request.POST.get('form_provider_update'):

							# Assign Local cleaned parameters
							provider_name = str(self.request.POST.get('form_provider_name')).strip()
							provider_description = str(self.request.POST.get('form_provider_description')).strip()
							provider_website = str(self.request.POST.get('form_provider_website')).strip()

							# Valdidate
							if not self.request.POST.get('form_provider_name') or len(provider_name) == 0:
								# Name is Required
								register_form_error = 'Name of your Provider is Required'
							elif not self.request.POST.get('form_provider_website') or len(provider_website) == 0 or (not 'http://' in provider_website or 'https://' in provider_website):
								# Website is Required. # We check for http:// or https://
								register_form_error = 'Website of your Provider is Required. The Path must include http:// or https://'
							else:

								provider_obj.name = provider_name
								provider_obj.description = provider_description
								provider_obj.website = provider_website

								# Handle Logo Uploads
								if len(self.get_uploads()) > 0:
									try:
										logo = self.get_uploads()[0]
										# provider_obj.logo.delete()
										provider_obj.logo = logo
									except Exception as e:
										print e
										register_form_error = 'Error while uploading Logo'

								# Save that sucker
								provider_obj.put()

								self.redirect('/provider/' + str(provider_obj.key().id()) + "?section=profile")

								register_form_success = 'Provider was updated succesfully.'

						locales["register_form_error"] = register_form_error
						locales['register_form_success'] = register_form_success
						locales['upload_url'] = blobstore.create_upload_url('/provider/' + str(provider_obj.key().id()) + "?section=profile")

						# Statistics

						year = int(time.strftime("%Y"))

						if self.request.get('year'):
							try:
								year = int(self.request.get('year'))
							except:
								pass

						search_count = memcache.get("search_count_" + str(year))
						if search_count is None:
							search_count = db.GqlQuery("SELECT * FROM UserSearchDetail WHERE created > DATE(:1, 1, 1) AND created < DATE(:2, 12, 31) AND provider = :3", year, year, provider_obj).count()

							if not memcache.add("search_count_" + str(year), search_count, 60*10):
								pass

						success_search_count = memcache.get("success_search_count_" + str(year))
						if success_search_count is None:
							success_search_count = db.GqlQuery("SELECT * FROM UserSearchDetail WHERE success_status = True AND created > DATE(:1, 1, 1) AND created < DATE(:2, 12, 31) AND provider = :3", year, year, provider_obj).count()

							if not memcache.add("success_search_count_" + str(year), success_search_count, 60*10):
								pass

						search_contact_count = memcache.get("search_contact_count_" + str(year))
						if search_contact_count is None:
							search_contact_count = db.GqlQuery("SELECT * FROM UserSearchDetail WHERE email_sent = True AND created > DATE(:1, 1, 1) AND created < DATE(:2, 12, 31) AND provider = :3", year, year, provider_obj).count()

							if not memcache.add("search_contact_count_" + str(year), search_contact_count, 60*10):
								pass

						stats = memcache.get("stat_page_" + str(year))
						if stats is None:
							stats = []

							responses = dal.get_stats({
								'year': int(year),
								'provider': provider_obj
							})
						
							stat = {
								'year': int(year),
								'countries': dal.parse_out_countries(responses),
								'cities': dal.parse_out_cities(responses)
							}
							stats.insert(0, stat)

							if not memcache.add("stat_page_" + str(year), stats, 60*10):
								pass

						locales['stats' ] = stats
						locales['current_year' ] = year
						locales['search_count'] = search_count
						locales['search_contact_count'] = search_contact_count
						locales['success_search_count'] = success_search_count

						# Show the Dashboard
						section = 'dashboard'
						if self.request.get('section'):
							section = str(self.request.get('section')).strip().lower()

						user.organization = os.environ['USER_ORGANIZATION']

						session_store = sessions.get_store(request=self.request)
						session = session_store.get_session()

						locales['user'] = user
						locales['members'] = dal.memberships_by_provider(provider_obj)

						if 'members' in session:

							list_of_member_emails = []
							for cmember in locales['members']:
								list_of_member_emails.append(cmember.user.email())

							domain_members = []

							for dmember in json.loads(str(session['members'])):
								if dmember['email'] not in list_of_member_emails:
									domain_members.append(dmember)

							locales['domain_members'] = domain_members
						else:
							locales['domain_members'] = False

						locales['request'] = self.request
						locales['section'] = section
						locales['user_org'] = os.environ['USER_ORGANIZATION']
						locales['years'] = xrange(provider_obj.created.year, int(time.strftime("%Y"))+1)
						locales['current_year'] = year
						locales['membership'] = membership_obj

						clients = dal.get_clients_by_provider(provider_obj)
						locales['clients'] = clients
						locales['client_count'] = clients.count()

						template = jinja_environment.get_template('provider/dashboard.html')
						self.response.out.write(template.render(locales))

					elif not provider_obj.approved:

						# Show the Approval Waiting Page
						template = jinja_environment.get_template('provider/being_approved.html')
						self.response.out.write(template.render(locales))

					elif not provider_obj.tested:

						# Show the Approval Waiting Page
						template = jinja_environment.get_template('provider/not_tested.html')
						self.response.out.write(template.render(locales))

					else:
						self.redirect('/')

				else:
					template = jinja_environment.get_template('provider/detail.html')
					self.response.out.write(template.render(locales))

			else:
				# We used to show a Public Profile but decided against this.
				self.redirect('/providers')

		else:
			self.redirect('/providers')
Beispiel #15
0
	def post(self):

		provider_obj = schemas.Provider.get_by_id(int(self.request.get('provider')))
		user = users.get_current_user()

		if provider_obj is not None and provider_obj is not False:
			
			locales = {
				'title': provider_obj.name,
				'description': provider_obj.description,
				'user': user,
				'provider': provider_obj,
				'session': dal.return_and_global_session_update(self),
				'is_current_user_admin': users.is_current_user_admin()
			}

			# Ok so Provider exists.
			# Now check if this is a logged in user and if they are a member of this provider.
			# If so we rather so a dashboard and edit properties and controls.
			if user:
				
				# Ok so let's check if they are a member
				membership_obj = dal.membership_by_user(provider_obj, user)
				if membership_obj is not None and membership_obj is not False:

					# Get the UID
					uid = self.request.get('uid')

					# Check the UID
					if uid:

						test_url = self.request.get('test_url')

						if test_url or provider_obj.api_url:

							if test_url:
								# Set it for now
								provider_obj.api_url = test_url

							# Ok so run the test
							search_response = runner.search(self.request, uid, [ provider_obj ])

							# Take the only response
							response_obj = search_response.responses[0]

							# Our Local Copy of errors
							parse_errors = []

							if response_obj.parse_errors is not None:
								parse_errors = response_obj.parse_errors

							# Now output result
							self.response.out.write(repr({
								'status': response_obj.status,
								'response': response_obj.raw_response,
								'url': test_url,
								'data': response_obj.data_sent_to_server,
								'parse_errors': parse_errors
							}))

							# If the result was success we set the details api url of this provider to that url
							if provider_obj.approved and response_obj.status == runner.ProviderResponse.STATUS_FOUND and test_url:
								
								# Save and update to tested
								provider_obj.tested = True
								provider_obj.put()

						else:
							self.response.out.write({ 'errors': [ 'Test Url to test again must be provided' ] })

					else:
						self.response.out.write({ 'errors': [ 'UID to search for must be presented' ] })

				else:
					self.response.out.write({ 'errors': ['Current user must be a member of the provider to access the test tool'] })
			else:
				self.response.out.write({ 'errors': ['Authenticated Session required'] })

		else:
			self.response.out.write({ 'errors': ['Not a Valid Provider'] })
Beispiel #16
0
	def get(self):

		# Get the current logged-in user
		user = users.get_current_user()

		# Get the Session
		session = dal.return_and_global_session_update(self)

		# Check Login
		if not user:
			self.redirect(users.create_login_url('/admin/providers'))

		# Check if they are a admin
		if users.is_current_user_admin() == False:
			self.redirect('/')

		# Check Provider
		if self.request.get('provider') and self.request.get('action'):

			# Get ID's
			provider_id = int(self.request.get('provider'))
			action_str = self.request.get('action')

			# Provider Object
			provider_obj = schemas.Provider.get_by_id(int(self.request.get('provider')))
			
			# Check if it's a Valid Provider
			if provider_obj is not None and provider_obj is not False:

				# What action
				if action_str == "remove" or action_str == "delete":

					# Get the members to send the Mail to
					members = dal.memberships_by_provider(provider_obj)

					# Loop and Mail the Members
					for member in members:

						# Send Mail to Member
						template_locales = {
							'title': str(provider_obj.name) + ' has been removed from IdentiChip.org',
							'description': str(provider_obj.name) + ' has been removed from IdentiChip.org',
							'subject': str(provider_obj.name) + ' has been removed from IdentiChip.org',
							'provider': provider_obj
						}

						# The Form parameters were validated
						mailer.send(
							to=str(member.user.email()),
							reply_to='*****@*****.**',
							subject=template_locales['subject'],
							view='mail/provider/provider_deleted.html',
							locales=template_locales)

					# Remove Members
					db.delete(dal.memberships_by_provider(provider_obj))

					# Delete the Provider
					db.delete(provider_obj)

				elif action_str == "approve":

					# Set Settings
					provider_obj.approved = self.request.get('flag') == "on"
					
					# Get the members to send the Mail to
					members = dal.memberships_by_provider(provider_obj)

					# Loop and Mail the Members
					for member in members:

						# Is on
						if self.request.get('flag') == "on":

							# Text
							text_str = str(provider_obj.name) + ' has been Approved'

							# Send Mail to Member
							template_locales = {
								'title': text_str,
								'description': text_str,
								'subject': text_str,
								'provider': provider_obj
							}

							# The Form parameters were validated
							mailer.send(
								to=str(member.user.email()),
								reply_to='*****@*****.**',
								subject=template_locales['subject'],
								view='mail/provider/provider_approved.html',
								locales=template_locales)

						else:

							# Text
							text_str = str(provider_obj.name) + ' has had it\'s approval status removed'

							# Send Mail to Member
							template_locales = {
								'title': text_str,
								'description': text_str,
								'subject': text_str,
								'provider': provider_obj
							}

							# The Form parameters were validated
							mailer.send(
								to=str(member.user.email()),
								reply_to='*****@*****.**',
								subject=template_locales['subject'],
								view='mail/provider/provider_not_approved.html',
								locales=template_locales)

					# Save
					provider_obj.put()

				elif action_str == "tested":

					# Set Settings
					provider_obj.tested = self.request.get('flag') == "on"

					# Get the members to send the Mail to
					members = dal.memberships_by_provider(provider_obj)

					# Loop and Mail the Members
					for member in members:

						# Is on
						if self.request.get('flag') == "on":

							# Text
							text_str = str(provider_obj.name) + ' has been Marked as Tested by a Administrator'

							# Send Mail to Member
							template_locales = {
								'title': text_str,
								'description': text_str,
								'subject': text_str,
								'provider': provider_obj
							}

							# The Form parameters were validated
							mailer.send(
								to=str(member.user.email()),
								reply_to='*****@*****.**',
								subject=template_locales['subject'],
								view='mail/provider/provider_tested.html',
								locales=template_locales)

						else:

							# Text
							text_str = str(provider_obj.name) + ' has been had it\'s tested status removed by a Administrator'

							# Send Mail to Member
							template_locales = {
								'title': text_str,
								'description': text_str,
								'subject': text_str,
								'provider': provider_obj
							}

							# The Form parameters were validated
							mailer.send(
								to=str(member.user.email()),
								reply_to='*****@*****.**',
								subject=template_locales['subject'],
								view='mail/provider/provider_not_tested.html',
								locales=template_locales)

					# Save
					provider_obj.put()

				# Tell the Provider they have been included in the searches
				if provider_obj.approved and provider_obj.tested:

					# Get the members to send the Mail to
					members = dal.memberships_by_provider(provider_obj)

					# Loop and Mail the Members
					for member in members:

						# Text
						text_str = str(provider_obj.name) + ' is now regonized as a trusted provider on Identichip.org'

						# Send Mail to Member
						template_locales = {
							'title': text_str,
							'description': text_str,
							'subject': text_str,
							'provider': provider_obj
						}

						# The Form parameters were validated
						mailer.send(
							to=str(member.user.email()),
							reply_to='*****@*****.**',
							subject=template_locales['subject'],
							view='mail/provider/provider_included.html',
							locales=template_locales)

				# Redirect
				self.redirect('/admin/providers#provider_block_' + str(provider_obj.key().id()))

			# Else redirect
			else:
				self.redirect('/admin/providers')

		# Get Providers
		providers_list = dal.get_list_of_providers()

		# Counters
		approved_providers_count = 0
		accepted_providers_count = 0
		tested_providers_count = 0

		# Count
		for provider_list_obj in providers_list:

			# Count Approved
			if provider_list_obj.approved and provider_list_obj.tested:

				# Count
				accepted_providers_count += 1

			# Count Approved
			elif not provider_list_obj.approved:

				# Count
				approved_providers_count += 1

			# Counter
			elif not provider_list_obj.tested:

				# Count
				tested_providers_count += 1

		# Locales
		locales = {
			'title': 'Manage Approved Providers',
			'description': 'Providers',
			'user': users.get_current_user(),
			'session': session,
			'providers': providers_list,
			'approved_providers_count': approved_providers_count,
			'accepted_providers_count': accepted_providers_count,
			'tested_providers_count': tested_providers_count,
			'is_current_user_admin': users.is_current_user_admin()
		}

		# Render the template
		template = jinja_environment.get_template('admin/providers.html')
		self.response.out.write(template.render(locales))