Example #1
0
 def save(self, **params):
     self.updated = datetime.utcnow()
     if not '_id' in self._doc:
         self.created = datetime.utcnow()
     else:
         revision = Page.get(self._id)
         self.created = datetime.utcnow()
         old_hash = make_hash(revision.title, revision.content)
         new_hash = make_hash(self.title, self.content)
         if old_hash != new_hash:
             del revision._doc['_id']
             del revision._doc['_rev']
             
             revision.parent = self._id
             revision.itemType = 'revision'
             revision.save()
             
             _previous = revision._id
             
             # increment revision number
             # TODO : use revisionid in latest CouchDB
             self.nb_revision = revision.nb_revision + 1
             
             # save previous revision id, could be usefull
             self.previous = _previous
             
             # get changes 
             changes = diff_blocks(revision.content.splitlines(),
                 self.content.splitlines(), 3, 8, 1, 0, 1)
             
             _changes = []
             for row in changes:
                 for change in row:
                     _changes.append(change)
     super(Page, self).save(**params)
Example #2
0
def site_claim(request):
    if request.method == "POST":
        site = get_site(request.site.cname)
        site.password = make_hash(request.form['password'])
        site.email = request.form['email']
        site.privacy = request.form['privacy']
        site.claimed = True
        site.save()
        request.site = site
        
        if site.alias:
            site_url = "http://%s.%s" % (site.alias, settings.SERVER_NAME)
        else:
            site_url = "http://%s/%s" % (settings.SERVER_NAME, site.cname)
        
        mail_subject = u"You claimed %s" % site_url
        mail_content = render_template("site/email_claimed.txt", url=site_url)
        send_mail(mail_subject, mail_content, "CouchIt <*****@*****.**>", 
            [site.email], fail_silently=True)
            
        if local.site_url:
            redirect_url = local.site_url
        else:
            redirect_url = '/'
        
        request.session['%s_authenticated' % site.cname] = True;
        return redirect(redirect_url)
        
    return render_response('site/claim.html')
Example #3
0
def change_password_authenticated(request):
    error = None
    if request.method == 'POST':
        site = get_site(request.site.cname)
        p1 = request.form.get('password', '')
        p2 = request.form.get('old_password', '')
        
        if not p1:
            error = u"New password can't be empty"
        elif not p2:
            error = u"Old password can't be empty"
        elif make_hash(p2) != site.password:
            error = u"Old password is invalid."
        else:
            h = make_hash(p1)
            if (h != site.password):
                site.password = h
                site.save()
            request.site = site
            return redirect(url_for('site_settings'))
        
    return render_response('site/change_password_authenticated.html', error=error)
Example #4
0
def site_change_password(request):
    authenticated = request.session.get('%s_authenticated' % request.site.cname, False)
    if authenticated:
        return change_password_authenticated(request)
    
    error = None
    token = request.values.get('t', None)
    invalid_token = False
    if request.method == 'GET':
        if token is None or not validate_token(request.site._id, token):
            error = u"Invalid token. Please verify url in your mail."
            invalid_token = True
    if request.method == 'POST':
        token = request.form.get('token', '')
        password = request.form.get('password')
        if not validate_token(request.site._id, token):
            error = u"Invalid token. Please verify url in your mail."
            invalid_token = True
        else:
            if password:
                site = get_site(request.site.cname)
                site.password = make_hash(request.form['password'])
                site.save()
            
                # delete token
                del db[token]
            
                request.session['%s_authenticated' % request.site.cname] = True
                request.site = site
                if local.site_url:
                    redirect_url = local.site_url
                else:
                    redirect_url = '/'
            
                return redirect(redirect_url)
            else:
                error=u'Password is empty.'
    return render_response('site/change_password.html', token=token, 
                error=error, invalid_token=invalid_token)
Example #5
0
def validate_password(siteid, password):
    rows = Site.view('site/password', key=[siteid, make_hash(password)])
    lrows = list(iter(rows))
    if lrows:
        return True
    return False