things almost work
[encyclr.git] / dur / views.py
bloba8fc0587bc7004a3a391a7d203724017e89f261b
1 from django.template import Context, loader
2 from django.http import HttpResponse
3 from django.http import HttpResponseRedirect
4 import datetime
5 import hashlib
6 from twitterlexer import twitify
7 from encyclrcloud import elc, get_lc_key
8 from summarize import lookup
10 def get_empty_contents(title):
11 try:
12 return lookup(title)[:140]
13 except:
14 return ''
16 def index(request):
17 t = loader.get_template('html/index.html')
18 c = Context(request.session)
19 return HttpResponse(t.render(c))
21 def category(request, title):
22 articles = [] #elc.list_get(get_lc_key('category', title))
23 t = loader.get_template('html/category.html')
24 c = Context(request.session)
25 c.update({ 'title': title, 'articles': articles})
26 return HttpResponse(t.render(c))
28 def authenticate(request):
29 username = request.POST["u"]
30 pword = pwordhash(request)
31 storedpword = elc.get(get_lc_key("user", username))
32 if pword != storedpword:
33 return False
34 else:
35 request.session["user"] = username
36 return True
38 def login(request):
39 referer = request.META.get('HTTP_REFERER', '/')
41 if not "u" in request.POST or not "p" in request.POST or not authenticate(request):
42 request.session["loginfailed"] = True
43 elif "loginfailed" in request.session:
44 del request.session["loginfailed"]
46 return HttpResponseRedirect(referer)
48 def logout(request):
49 if 'user' in request.session:
50 del request.session['user']
51 referer = request.META.get('HTTP_REFERER', '/')
52 return HttpResponseRedirect(referer)
54 def pwordhash(request):
55 username = request.POST["u"]
56 pword = request.POST["p"]
57 return hashlib.sha224(pword + username).hexdigest()
59 def createnewuser(request):
60 errors = {}
61 if 'u' not in request.POST or request.POST['u'] == '':
62 errors['nousername'] = True
63 else:
64 username = request.POST["u"]
65 if elc.get(get_lc_key("user", username)):
66 errors["usernametaken"] = username
67 if 'p' not in request.POST or 'p2' not in request.POST or request.POST['p'] == '':
68 errors['nopassword'] = True
69 else:
70 pword = request.POST["p"]
71 pword2 = request.POST["p2"]
72 if pword != pword2:
73 errors["passwordmismatch"] = True
75 if not errors:
76 elc.set(get_lc_key("user", username), pwordhash(request))
78 return errors
80 def newuser(request):
81 errors = None
82 if request.method == 'POST' or request.method == 'PUT':
83 errors = createnewuser(request)
84 if not errors:
85 authenticate(request)
86 return HttpResponseRedirect("/p")
87 t = loader.get_template('html/newuser.html')
88 c = Context(request.session)
89 c.update(errors)
91 return HttpResponse(t.render(c))
93 def userprefs(request):
94 return HttpResponse('user prefs?')
96 def user(request):
97 return HttpResponse('user info?')
99 def article(request, title):
100 if request.method == 'POST' or request.method == 'PUT':
101 return post(request, title)
103 contents = elc.get(get_lc_key('article', title))
104 if contents is None:
105 contents = 'no contents: please create some'
107 t = loader.get_template('html/article.html')
109 c = Context(request.session)
110 c.update({ 'title': title,
111 'contents': contents })
113 return HttpResponse(t.render(c))
115 def edit(request, title):
116 if "user" not in request.session:
117 return HttpResponseRedirect("/a/%s" % title)
119 contents = elc.get(get_lc_key('rawarticle', title))
121 isnew = None
122 if contents is None:
123 contents = get_empty_contents(title)
124 isnew = True
126 t = loader.get_template('html/edit.html')
127 c = Context(request.session)
128 c.update({ 'title': title,
129 'contents': contents.decode('utf8'),
130 'isnew': isnew })
132 return HttpResponse(t.render(c))
134 def post(request, title):
135 username = None
136 if "user" in request.session:
137 username = request.session["user"]
138 else:
139 return HttpResponseRedirect("/a/%s" % title)
141 if "body" not in request.POST:
142 raise Exception("no body")
144 if len(request.POST["body"]) > 140:
145 raise Exception("contents too long (len = %s)" % (len(request.POST["body"])))
147 contents = request.POST["body"].encode('utf8')
148 processed_contents = twitify(contents).encode('utf8')
150 success = elc.set(get_lc_key('article', title), processed_contents)
151 if not success:
152 raise Exception('error writing to db')
154 success = elc.set(get_lc_key('rawarticle', title), contents)
155 if not success:
156 raise Exception('error writing to db')
158 return HttpResponseRedirect("/a/%s" % title)
160 def search(request):
161 if "s" in request.POST:
162 return HttpResponseRedirect("/a/%s" % request.POST["s"])
164 referer = request.META.get('HTTP_REFERER', '/')
165 return HttpResponseRedirect(referer)