Skip to content

Commit

Permalink
tweaks to functionality, minor updating of libs
Browse files Browse the repository at this point in the history
  • Loading branch information
nod committed Apr 12, 2016
1 parent 3ac7e3a commit cbc036c
Show file tree
Hide file tree
Showing 9 changed files with 78 additions and 63 deletions.
2 changes: 2 additions & 0 deletions settings.py
Expand Up @@ -3,6 +3,8 @@
# tornado specific
settings = dict(

users = {},

blog_admin = None,
dbposts = None, # BAD! Stores in MEMORY
dbpaste = None, # BAD! Stores in MEMORY
Expand Down
21 changes: 13 additions & 8 deletions templates/base.html
Expand Up @@ -62,14 +62,7 @@
<li><a href="/projects">projects</a></li>
<li><a href="/pb">pastebin</a></li>
<li><a href="/about">about</a></li>
{% if current_user %}
<li>
<span class="hdr-logged-in">
<img src="{{ current_user.avatar }}" />
{{ current_user.nick }}
<a href="/auth/logout">[logout]</a>
</span></li>
{% end %}

</ul>

</div>
Expand Down Expand Up @@ -113,6 +106,18 @@
</ul>
</div>
</div>

{% if current_user %}
<div>
<img src="{{ current_user.avatar }}" style="height:36px"/>
{{ current_user.nick }}
<a href="/logout">[logout]</a>
</div>
{% else %}
<div>
<a href="/login">[login]</a>
</div>
{% end %}
</div>
</div>
</div>
Expand Down
16 changes: 12 additions & 4 deletions templates/login.html
Expand Up @@ -11,7 +11,7 @@ <h2> login </h2>
</p>

<p>
You can try to login with Twitter if you'd like, but it won't do much for ya.
You can try to login, but it's probably not worth it.
</p>
</div>

Expand All @@ -20,9 +20,17 @@ <h2> login </h2>
{% block content-alt %}

<div style="padding-top: 100px;">

<a class="sign_in_with_twitter" href="/auth/twitter"></a>

<form class="form-inline" method="POST">
<div class="form-group">
<label class="sr-only" for="exampleInputEmail3">Email address</label>
<input type="email" class="form-control" id="exampleInputEmail3" placeholder="Enter email" name="email">
</div>
<div class="form-group">
<label class="sr-only" for="exampleInputPassword3">Password</label>
<input type="password" class="form-control" id="exampleInputPassword3" placeholder="Password" name="password">
</div>
<button type="submit" class="btn btn-primary">Sign in</button>
</form>
</div>


Expand Down
4 changes: 2 additions & 2 deletions templates/page.html
Expand Up @@ -18,13 +18,13 @@ <h2 class="block-hdr">
</div>

<div>
this version created: {{ page.c_at }} by <img src="{{page.cr_avatar}}" height="18"/> {{ page.cr_name }}
this version created: {{ page.c_at }} by <img src="{{page.cr_avatar}}" style="height:18px"/> {{ page.cr_name }}
</div>

<div>
authors include:
{% for nm,av in page_authors %}
<a href="http://twitter.com/#!/{{nm}}"><img src="{{av}}" height="16"/>{{nm}}</a>
<a href="http://twitter.com/#!/{{nm}}"><img src="{{av}}" style="height:16px"/>{{nm}}</a>
{% end %}
</div>

Expand Down
37 changes: 16 additions & 21 deletions views/auth.py
Expand Up @@ -7,33 +7,28 @@
from . import route
from .viewlib import BaseHandler

@route('/auth/logout')

@route('/logout')
class Logout(BaseHandler):

def get(self):
self.set_current_user({})
self.set_current_user(None)
self.redirect('/')


@route('/auth/twitter/?')
class AuthTwitter(BaseHandler, TwitterMixin):
@route('/login/?')
class AuthLogin(BaseHandler):

@asynchronous
def get(self):
if not self.get_argument("oauth_token", False):
cb_uri = self.application.settings.get('twitter_callback_uri')
return self.authorize_redirect(callback_uri = cb_uri)
self.get_authenticated_user(self._on_auth)

def _on_auth(self, user_d):
if not user_d:
raise HTTPError(500, "Twitter auth failed")
self.set_current_user(user_d)
self.redirect('/')

return self.render('login.html')

def post(self):
users = self.application.settings.get('users', {})
email = self.get_argument('email', '')
paswd = self.get_argument('password', '')
if email in users and users[email] == paswd:
self.set_current_user(email)
self.redirect('/')
else:
self.redirect('/login')

@route('/auth/?')
class Login(BaseHandler):

def get(self):
self.render('login.html')
5 changes: 3 additions & 2 deletions views/blog.py
Expand Up @@ -15,9 +15,10 @@ def prepare(self):
self.blog = Blog( self.application.settings.get('dbposts') )

def require_admin(self):
if not self.current_user.is_admin:
if not self.current_user:
raise HTTPError(301)


@route(r'/blog/?(?P<year>\d{4})?$')
class BlogList(BlogBase):

Expand Down Expand Up @@ -109,7 +110,7 @@ def post(self, slug):
self.redirect('/blog/%s' % slug)


@route(r'/blog/(?P<key>[a-zA-Z0-9-_]+)/?$')
@route(r'/blog/(?P<key>[a-zA-Z0-9-_]+)/?')
class BlogPost(BlogBase):
def get(self, key):
self.render('blog_post.html', post=self.blog.post(key))
Expand Down
3 changes: 2 additions & 1 deletion views/pages.py
Expand Up @@ -5,7 +5,7 @@
from tornado.escape import xhtml_escape as html_escape

from pagelib import Book
from useful import gen_key
from useful import gen_key, avatar_url
from viewlib import BaseHandler
from . import route

Expand All @@ -21,6 +21,7 @@ def _page(self, pkey):
return None
return self._book.page(pkey) if pkey in self._book else None


@route('/pages/__all')
class AllPages(PageBase):

Expand Down
11 changes: 11 additions & 0 deletions views/useful.py
Expand Up @@ -20,6 +20,17 @@ def hashint(num):
return sign + result


def hash_val(val):
import hashlib
return hashlib.md5(val.lower().strip()).hexdigest()


def avatar_url(email):
eml = hash_val(email)
print "EML is", eml
return 'http://www.gravatar.com/avatar/{}?s=200'.format(eml)


def gen_key():
return hashint(abs(randint(100,90000)))

Expand Down
42 changes: 17 additions & 25 deletions views/viewlib.py
Expand Up @@ -4,20 +4,21 @@
import tornado.web
from markdown import Markdown

from useful import avatar_url

class User(object):
"""
convenience object to make it easy to unify login settings
"""
def __init__(self, nick, name, avatar, source, is_admin=False):
self.nick = nick # short name
self.name = name # long name
self.avatar = avatar # url to their avatar
self.source = source # str giving hint. twitter? local? etc
self.is_admin = is_admin
def __init__(self, email):
self.nick = email.split('@')[0]
self.email = email
print "END USER"
self.avatar = avatar_url(email)
self.source = 'local' # str giving hint. twitter? local? etc

def uniq_id(self):
return '{}::{}'.format(self.source, self.nick)
return '{}::{}'.format(self.source, self.email)


class BaseHandler(tornado.web.RequestHandler):
Expand All @@ -31,26 +32,15 @@ def render_string(self, templ, **kwa):
return super(BaseHandler, self).render_string(
templ,
markdown=Markdown(['codehilite']).convert,
current_user=self.current_user,
**kwa
)

def _instantiate_user(self, d):
"""
accepts a twitter oauth'd user object and builds a User
"""
return User(
d['username'],
d.get('name', d['username']),
d.get('profile_image_url', '/static/images/dunno.png'),
'twitter',
d['username'] in self.application.settings.get(
'twitter_admins', [] )
)

def get_current_user(self):
try:
u_ = json.loads(self.get_secure_cookie("authed_user"))
return self._instantiate_user(u_) if u_ else None
u_ = self.get_secure_cookie("authed_user")
u = User(u_) if u_ else None
return u
except TypeError:
pass

Expand All @@ -59,10 +49,12 @@ def set_current_user(self, user):
to be called AFTER the user has authenticated successfully. Right now
we assume it's twitter auth.
`user` should be a dictionary returned from successful oauth
`user` should be an email addr or None
"""
u_ = json.dumps(user)
self.set_secure_cookie("authed_user", u_)
if user is not None:
self.set_secure_cookie("authed_user", user)
else:
self.clear_cookie('authed_user')

def ok(self, data=None):
self.write(json.dumps({'status':'ok', 'data':data}))
Expand Down

0 comments on commit cbc036c

Please sign in to comment.