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)
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')
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)
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)
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