class RegistrationForm(forms.Form): user_name = forms.TextField(required=True, label=_(u"user name"), max_length=30) email = forms.EmailField(required=True, label=_(u"email address")) password = forms.TextField(required=True, widget=forms.PasswordInput, label=_("password")) password_confirm = forms.TextField(required=True, widget=forms.PasswordInput, label=_("password(again)")) def validate_user_name(self, value): user_classname = settings.AUTH_USER_MODEL user_cls = import_string(user_classname) user = user_cls.get_by_key_name(user_cls.get_key_name(value)) if user: raise ValidationError(_(u"This user name is already taken." " Please choose another user name.")) def context_validate(self, data): if data['password'] != data['password_confirm']: raise ValidationError(_(u"The passwords don't match.")) def save(self): user_classname = settings.AUTH_USER_MODEL user_cls = import_string(user_classname) user = user_cls.create_inactive_user(self['user_name'], self['password'], self['email']) return user
def validator(form, value): items = value.split() if len(items) > 1: raise ValidationError(_(u'You have to enter a valid net address.')) items = items[0].split(':') if len(items) not in (1, 2): raise ValidationError(_(u'You have to enter a valid net address.')) elif len(items) == 2 and not items[1].isdigit(): raise ValidationError(_(u'The port has to be numeric'))
def admin(request): nsform = None namespace = '' if 'namespace' in request.args: nsform = KayNamespaceForm() if nsform.validate(request.args): namespace = nsform['namespace'] or '' nsform = nsform.as_widget() object_list = list(KayLiveSetting.all(namespace=namespace)) forms = dict( map(lambda s: (s.key().name(), KayLiveSettingForm(instance=s, initial={ "key_name": s.key().name(), "namespace": namespace, })), object_list) ) if (request.method == "POST"): key_name = request.form.get('key_name') if key_name: form = forms.get(key_name, None) if not form: form = KayLiveSettingForm() if form.validate(request.form): if 'delete' in request.form: _set_flash_msg(request, _("Deleted the setting '%(key)s'" % { 'key': key_name, })) live_settings.delete(form['key_name'], namespace=namespace) if key_name in forms: del forms[key_name] else: _set_flash_msg(request, _("Updated the setting '%(key)s'" % { 'key': key_name, })) forms[key_name] = form form.instance = live_settings.set( form['key_name'], form['value'], namespace=namespace, ) return redirect( "%s?%s" % ( url_for('live_settings/admin'), url_encode(request.args), ), ) new_form = KayLiveSettingForm() return render_to_response('live_settings/admin.html', { 'flash_msg': _get_flash_msg(request), 'to_local_timezone': to_local_timezone, # ensure we have this function 'nsform': nsform, 'namespace': namespace, 'form_list': map(lambda f: (f.instance, f.as_widget()), forms.values()), 'new_form': new_form.as_widget(), })
def validator(form, value): if '<' in value or '>' in value: raise ValidationError(_(u'Invalid character, < or > are not allowed.')) if value == '/': raise ValidationError(_(u'URL prefix must not be a sole slash.')) if value: if value[:1] != '/': raise ValidationError(_(u'URL prefix must start with a slash.')) if value[-1:] == '/': raise ValidationError(_(u'URL prefix must not end with a slash.'))
def index(request): groups = Group.all().filter("owner =", request.user).fetch(100) if len(groups) == 0: message = _("You don't own any group yet.") else: message = _("The groups you own.") return render_to_response('groupy/index.html', { 'message': message, 'groups': groups })
def validator(form, value): if '<' in value or '>' in value: raise ValidationError( _(u'Invalid character, < or > are not allowed.')) if value == '/': raise ValidationError(_(u'URL prefix must not be a sole slash.')) if value: if value[:1] != '/': raise ValidationError( _(u'URL prefix must start with a slash.')) if value[-1:] == '/': raise ValidationError( _(u'URL prefix must not end with a slash.'))
def preview(request,entity_key): ''' preview page ''' browser_lang = request.lang entity = db.get(entity_key) model_name = entity.kind() key_name = entity.key().name() page = get_page_content(browser_lang,model_name,key_name,True) if page is None: return render_to_response('mainapp/404.html', {}) page.title = '('+_('Preview')+')'+page.title sidebar = {'sidebar_title':_('Link'),'sidebar_list':[{'title':_('About'),'url':'/about/'},{'title':_('Contact'),'url':'/contact/'}]} return render_to_response('mainapp/show_each_page.html', {'page': page,'model_name':model_name,'sidebar':sidebar})
def rss_feed(request): browser_lang = request.lang feed = feedgenerator.Rss201rev2Feed( title = _('RSS feed for Kaybootstrap'), link = request.url, description = _('feed for kaybootstrap'), language = browser_lang) article_results = get_article_list(browser_lang,1,10) for a in article_results['articles']: feed.add_item( title = a['title'], link = 'http://'+request.host+a['url'], description=a['snippet']) rss = feed.writeString("utf-8") return Response(rss, mimetype='text/xml')
class Meta: model = Group exclude = ("owner", "applications", "banned_addresses", "updated", "created") help_texts = { "members": _("Input mail addresses(wave account) separated " "by new lines."), "name": _("Input the name of the group."), "language": _("Main language of this group."), "description": _("This description helps people to know " "this group better.") }
def validate_old_password(self, value): from kay.utils import local try: if not local.request.user.check_password(value): raise except Exception: raise ValidationError(_(u"Can not validate old password."))
def txn(): key_name = cls.get_key_name(user_name) user = cls.get_by_key_name(key_name) if user: from kay.auth import DuplicateKeyError raise DuplicateKeyError(_(u"This user name is already taken." " Please choose another user name.")) salt = crypto.gen_salt() activation_key = crypto.sha1(salt+user_name).hexdigest() profile_key = db.Key.from_path(cls.kind(), key_name, RegistrationProfile.kind(), activation_key) expiration_date = datetime.datetime.now() + \ datetime.timedelta(seconds=settings.ACCOUNT_ACTIVATION_DURATION) taskqueue.add(url=url_for('_internal/expire_registration', registration_key=str(profile_key)), eta=expiration_date, transactional=True) taskqueue.add(url=url_for('_internal/send_registration_confirm', registration_key=str(profile_key)), transactional=True) user = cls(key_name=key_name, activated=False, user_name=user_name, password=crypto.gen_pwhash(password), email=email) profile = RegistrationProfile(user=user, parent=user, key_name=activation_key) db.put([profile, user]) return user
def login_box(request): from kay.auth import login next = unquote_plus(request.values.get("next")) owned_domain_hack = request.values.get("owned_domain_hack") message = "" form = LoginBoxForm() if request.method == "POST": if form.validate(request.form): result = login(request, user_name=form.data['user_name'], password=form.data['password']) if result: if owned_domain_hack == 'True': original_host_url = unquote_plus( request.values.get("original_host_url")) url = original_host_url[:-1] + url_for("auth/post_session") url += '?' + url_encode({ 'session_id': result.key().name(), 'next': next }) return redirect(url) else: return redirect(next) else: message = _("Failed to login.") return render_to_response("auth/loginform.html", { "form": form.as_widget(), "message": message })
def validate_user_name(self, value): user_classname = settings.AUTH_USER_MODEL user_cls = import_string(user_classname) user = user_cls.get_by_key_name(user_cls.get_key_name(value)) if user: raise ValidationError(_(u"This user name is already taken." " Please choose another user name."))
def login(request): from kay.auth import login if settings.AUTH_POST_LOGIN_SUCCESS_DEFAULT_URL: next = unquote_plus(request.values.get("next", settings.AUTH_POST_LOGIN_SUCCESS_DEFAULT_URL)) else: next = unquote_plus(request.values.get("next", "/")) owned_domain_hack = request.values.get("owned_domain_hack") message = "" form = LoginForm() if request.method == "POST": if form.validate(request.form): result = login(request, user_name=form.data['user_name'], password=form.data['password']) if result: if owned_domain_hack == 'True': original_host_url = unquote_plus( request.values.get("original_host_url")) url = original_host_url[:-1] + url_for("auth/post_session") url += '?' + url_encode({'session_id': result.key().name(), 'next': next}) return redirect(url) else: return redirect(next) else: message = _("Failed to login successfully with those credentials, try another or click the 'Forgot Password' link below.") return render_to_response("auth/loginform.html", {"form": form.as_widget(), "message": message})
def login_box(request): from kay.auth import login next = unquote_plus(request.values.get("next")) owned_domain_hack = request.values.get("owned_domain_hack") message = "" form = LoginBoxForm() if request.method == "POST": if form.validate(request.form): result = login(request, user_name=form.data['user_name'], password=form.data['password']) if result: if owned_domain_hack == 'True': original_host_url = unquote_plus( request.values.get("original_host_url")) url = original_host_url[:-1] + url_for("auth/post_session") url += '?' + url_encode({'session_id': result.key().name(), 'next': next}) return redirect(url) else: return redirect(next) else: message = _("Failed to login.") return render_to_response("auth/loginform.html", {"form": form.as_widget(), "message": message})
def txn(): key_name = cls.get_key_name(user_name) user = cls.get_by_key_name(key_name) if user: from kay.auth import DuplicateKeyError raise DuplicateKeyError( _(u"This user name is already taken." " Please choose another user name.")) salt = crypto.gen_salt() activation_key = crypto.sha1(salt + user_name).hexdigest() profile_key = db.Key.from_path(cls.kind(), key_name, RegistrationProfile.kind(), activation_key) expiration_date = datetime.datetime.now() + \ datetime.timedelta(seconds=settings.ACCOUNT_ACTIVATION_DURATION) taskqueue.add(url=url_for('_internal/expire_registration', registration_key=str(profile_key)), eta=expiration_date, transactional=True) taskqueue.add(url=url_for('_internal/send_registration_confirm', registration_key=str(profile_key)), transactional=True) user = cls(key_name=key_name, activated=False, user_name=user_name, password=crypto.gen_pwhash(password), email=email) profile = RegistrationProfile(user=user, parent=user, key_name=activation_key) db.put([profile, user]) return user
def validate_temp_session(self, value): from kay.auth.models import TemporarySession try: session = TemporarySession.get(value) user = session.user except Exception, e: logging.warn(e) raise ValidationError(_(u"Invalid temporary session."))
def show_each_page(request,key_name): ''' each page ''' browser_lang = request.lang try: prior_lang = request.args['hl'] except: prior_lang = None if prior_lang and browser_lang != prior_lang: browser_lang = prior_lang model_name = 'AdminPage' page = get_page_content(browser_lang,model_name,key_name) if page is None: return render_to_response('mainapp/404.html', {}) sidebar = {'sidebar_title':_('Link'),'sidebar_list':[{'title':_('About'),'url':'/about/'},{'title':_('Contact'),'url':'/contact/'}]} return render_to_response('mainapp/show_each_page.html', {'page': page,'model_name':model_name,'sidebar':sidebar})
def group_detail(request): if request.method == "GET": key_name = request.values.get("key_name", None) group = Group.get_by_key_name(key_name) if not group.is_owned_by(request.user): raise Forbidden() return render_to_response("groupy/group_detail.html", { "message": _("The details of the group"), "group": group })
def edit_group(request): error_message = None if request.method == "GET": key_name = request.values.get("key_name", None) group = Group.get_by_key_name(key_name) if not group.is_owned_by(request.user): raise Forbidden() form = get_edit_form(group) elif request.method == "POST": key_name = request.form.get("hidden_key_name", None) group = Group.get_by_key_name(key_name) if not group.is_owned_by(request.user): raise Forbidden() form = get_edit_form(group) if form.validate(request.form): if str(group.updated) == form["hidden_updated"]: group.language = form["language"] group.description = form["description"] group.members = form["members"] group.applications = form["applications"] group.banned_addresses = form["banned_addresses"] group.put() return redirect( url_for('groupy/group_detail', key_name=group.key().name())) else: # re-init because of race condition form = get_edit_form(group) error_message = _("Sorry, It can not be saved because " "a race condition happened. " "Please try again from the start.") else: pass return render_to_response( "groupy/edit_group.html", { "message": _("Editing a group"), "form": form.as_widget(), "error_message": error_message, "group": group })
class KayNamespaceForm(forms.Form): csrf_protected = False namespace = forms.RegexField( "^[0-9A-Za-z._-]*$", max_length=100, required=False, messages={ 'invalid': _("The namespace name can only contain alpha-numeric and '.', '_', '-' characters." ), })
def show_each_article(request,key_name): browser_lang = request.lang try: prior_lang = request.args['hl'] except: prior_lang = None if prior_lang and browser_lang != prior_lang: browser_lang = prior_lang model_name = 'Article' page = get_page_content(browser_lang,model_name,key_name) if page is None: return render_to_response('mainapp/404.html', {}) results_dic = get_article_list(browser_lang,1,10) sidebar = {'sidebar_title':_('Back number'),'sidebar_list':results_dic['articles']} return render_to_response('mainapp/show_each_page.html', {'page': page,'model_name':model_name,'sidebar':sidebar})
def event_feed(request): try: theyear_themonth = request.args['month'].split('-') theyear = int(theyear_themonth[0]) themonth = int(theyear_themonth[1]) feed_title = 'Events of: %s %d' % (calendar.month_name[themonth], theyear) if themonth < 1 or themonth > 12: raise ValueError except: now = datetime.now() theyear = now.year themonth = now.month feed_title = _('Upcoming Event') first_day_of_themonth = datetime(theyear, themonth, 1) + timedelta(days=-1) three_month_after = add_months(first_day_of_themonth, 2) results = Event.all().filter(u'event_date >=', first_day_of_themonth).filter( u'event_date <', three_month_after).order('event_date').fetch(1000) events = [ {'date': r.event_date.strftime('%Y-%m-%d %H:%M'), 'title': r.title, 'description': r.description, 'key': str(r.key())} for r in results] return render_json_response({'events': events, 'title': feed_title}, mimetype='application/json')
def add_group(request): form = AddGroupForm() if request.method == "POST": if form.validate(request.form): form['name'] group = Group.get_or_insert( key_name=Group.get_key_name(form['name']), name=form['name'], language=form['language'], description=unicode(form['description']), owner=request.user, members=form['members']) if group.owner.key() != request.user.key(): form.errors.append("Group creation failed.") else: return redirect( url_for('groupy/group_detail', key_name=group.key().name())) else: pass return render_to_response('groupy/edit_group.html', { 'form': form.as_widget(), 'message': _("Adding a new group") })
class Meta: model = Group exclude = ("name", "owner", "updated", "created") help_texts = { "members": _("Input mail addresses separated by new lines."), "name": _("Input the name of the group."), "language": _("Main language of this group."), "applications": _("People who want to join this group."), "banned_addresses": _("People who are banned from this " "group"), "description": _("This description helps people to know " "this group better.") }
class Group(db.Model): # key_name = name name = db.StringProperty(required=True, verbose_name=_("group name")) language = db.StringProperty(verbose_name=_("language"), default="en", choices=languages) description = db.TextProperty(verbose_name=_("description")) owner = db.ReferenceProperty(GroupyUser, required=True) members = db.StringListProperty(verbose_name=_("members")) applications = db.StringListProperty(verbose_name=_("applications")) banned_addresses = db.StringListProperty(verbose_name=_("banned accounts")) updated = db.DateTimeProperty(auto_now=True) created = db.DateTimeProperty(auto_now_add=True) @classmethod def get_key_name(cls, name): return "g:%s" % name def is_owned_by(self, user): return self.owner.key() == user.key()
def index(request): return render_to_response('catalog/index.html', {'message': _('Hello')})
def validator(form, value): if len(value) > 200: raise ValidationError(_(u'The slug is too long')) elif value.startswith('/'): raise ValidationError(_(u'The slug must not start with a slash'))
def context_validate(self, data): if data['new_password'] != data['password_confirm']: raise ValidationError(_(u"The new passwords don't match.")) if data['new_password'] == data['old_password']: raise ValidationError(_( u"The new password must differ from the old one."))
def context_validate(self, data): if data['new_password'] != data['password_confirm']: raise ValidationError(_(u"The new passwords don't match."))
def validator(form, value): if not value.strip(): raise ValidationError(_(u'The text must not be empty.'))
def context_validate(self, data): if data['password'] != data['password_confirm']: raise ValidationError(_(u"The passwords don't match."))
def image_manager(request): #TODO add image search function by full text search return render_to_response('adminapp/image_manager.html', {'title':_('Image manager')})
def prepare(self): # TODO: check if FlashMiddleware is used. if not self.request.user.is_authenticated(): raise Forbidden(_("You must sign in for this operation.")) self.form = ChangePasswordForm()
def maintenance_page(request): return render_to_response("_internal/maintenance.html", {"message": _('Now it\'s under maintenance.')})
''' original template filters by kaybootstrap ''' import datetime from kay.i18n import gettext as _ def toMarkdown(text): from mainapp.markdown2 import markdown return_html = markdown(text) return return_html def enforceMinus9hours(datetime_string): display_time = datetime.datetime.strptime(datetime_string,'%Y-%m-%d %H:%M') display_time = display_time + datetime.timedelta(hours = -9) return_datetime_string = display_time.strftime('%Y-%m-%d %H:%M') return return_datetime_string MESSAGES = {'default':_('Invalid Parameter'), 'loginfail001':_('Login Failed'), 'loginsuccess001':_('Login Success'), 'logoutsuccess001':_(u'Logout Success'), 'keywordrequired001':_('Keyword required'), 'error001':_('Error')} def returnMessage(message_code): try: message = MESSAGES[message_code] except: message = MESSAGES[message_code] return message
def admin(request): nsform = None namespace = '' if 'namespace' in request.args: nsform = KayNamespaceForm() if nsform.validate(request.args): namespace = nsform['namespace'] or '' nsform = nsform.as_widget() object_list = list(KayLiveSetting.all(namespace=namespace)) forms = dict( map( lambda s: (s.key().name(), KayLiveSettingForm(instance=s, initial={ "key_name": s.key().name(), "namespace": namespace, })), object_list)) if (request.method == "POST"): key_name = request.form.get('key_name') if key_name: form = forms.get(key_name, None) if not form: form = KayLiveSettingForm() if form.validate(request.form): if 'delete' in request.form: _set_flash_msg( request, _("Deleted the setting '%(key)s'" % { 'key': key_name, })) live_settings.delete(form['key_name'], namespace=namespace) if key_name in forms: del forms[key_name] else: _set_flash_msg( request, _("Updated the setting '%(key)s'" % { 'key': key_name, })) forms[key_name] = form form.instance = live_settings.set( form['key_name'], form['value'], namespace=namespace, ) return redirect( "%s?%s" % ( url_for('live_settings/admin'), url_encode(request.args), ), ) new_form = KayLiveSettingForm() return render_to_response( 'live_settings/admin.html', { 'flash_msg': _get_flash_msg(request), 'to_local_timezone': to_local_timezone, # ensure we have this function 'nsform': nsform, 'namespace': namespace, 'form_list': map(lambda f: (f.instance, f.as_widget()), forms.values()), 'new_form': new_form.as_widget(), })
def index(request): admin_page_list = [{'title':_('Page Manager'),'info':AdminPage.__doc__,'url':'/admin/adminpage/list'}, {'title':_('Article Manager'),'info':Article.__doc__,'url':'/admin/article/list'}, {'title':_('Image Manager'),'info':BlobStoreImage.__doc__,'url':'/admin/image/manager/'}] return render_to_response('adminapp/index.html', {'admin_page_list': admin_page_list})