Example #1
0
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
Example #2
0
 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'))
Example #3
0
 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'))
Example #4
0
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(),
  })
Example #5
0
 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.'))
Example #6
0
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
    })
Example #7
0
 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.'))
Example #8
0
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})
Example #9
0
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')
Example #10
0
 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.")
     }
Example #11
0
 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."))
Example #12
0
    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
Example #13
0
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
    })
Example #14
0
 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."))
Example #15
0
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})
Example #16
0
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})
Example #17
0
        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
Example #18
0
 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."))
Example #19
0
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})
Example #20
0
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
        })
Example #21
0
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
        })
Example #22
0
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."
              ),
        })
Example #23
0
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})
Example #24
0
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')
Example #25
0
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")
    })
Example #26
0
 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.")
     }
Example #27
0
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()
Example #28
0
def index(request):
  return render_to_response('catalog/index.html', {'message': _('Hello')})
Example #29
0
 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'))
Example #30
0
 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."))
Example #31
0
 def context_validate(self, data):
   if data['new_password'] != data['password_confirm']:
     raise ValidationError(_(u"The new passwords don't match."))
Example #32
0
 def validator(form, value):
   if not value.strip():
     raise ValidationError(_(u'The text must not be empty.'))
Example #33
0
 def context_validate(self, data):
   if data['password'] != data['password_confirm']:
     raise ValidationError(_(u"The passwords don't match."))
Example #34
0
def image_manager(request):
    #TODO add image search function by full text search
    return render_to_response('adminapp/image_manager.html', {'title':_('Image manager')})
Example #35
0
 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()
Example #36
0
 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()
Example #37
0
def maintenance_page(request):
  return render_to_response("_internal/maintenance.html",
                            {"message": _('Now it\'s under maintenance.')})
Example #38
0
 def validator(form, value):
     if not value.strip():
         raise ValidationError(_(u'The text must not be empty.'))
'''
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
Example #40
0
 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'))
Example #41
0
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(),
        })
Example #42
0
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})
Example #43
0
def maintenance_page(request):
    return render_to_response("_internal/maintenance.html",
                              {"message": _('Now it\'s under maintenance.')})