forked from 0x2620/pandora
random checking of new api stuff
This commit is contained in:
parent
d77acd43cd
commit
f2944b1b75
12 changed files with 312 additions and 207 deletions
|
@ -123,6 +123,10 @@ def newMovie(title, director, year):
|
||||||
movie.oxdbId = "__init__%s" % random.randint(0, 100000)
|
movie.oxdbId = "__init__%s" % random.randint(0, 100000)
|
||||||
movie.save()
|
movie.save()
|
||||||
movie.oxdbId = movie.oxid()
|
movie.oxdbId = movie.oxid()
|
||||||
|
print title, director, year
|
||||||
|
print movie.oxdbId
|
||||||
|
print movie.movieId
|
||||||
|
|
||||||
movie.save()
|
movie.save()
|
||||||
return movie
|
return movie
|
||||||
|
|
||||||
|
|
|
@ -1,45 +0,0 @@
|
||||||
from django.conf.urls.defaults import *
|
|
||||||
|
|
||||||
# Uncomment the next two lines to enable the admin:
|
|
||||||
# from django.contrib import admin
|
|
||||||
# admin.autodiscover()
|
|
||||||
|
|
||||||
'''
|
|
||||||
files/find
|
|
||||||
files/info
|
|
||||||
files/add
|
|
||||||
files/remove
|
|
||||||
|
|
||||||
movies/find
|
|
||||||
movies/get
|
|
||||||
movies/edit?movie_id...
|
|
||||||
|
|
||||||
subtitles/list?oshash
|
|
||||||
subtitles/get?oshash&language
|
|
||||||
subtitles/add?oshash&language
|
|
||||||
subtitles/remove?oshash&language
|
|
||||||
'''
|
|
||||||
|
|
||||||
urlpatterns = patterns("backend.views",
|
|
||||||
(r'^find', 'find'),
|
|
||||||
(r'^files/find', 'find_files'),
|
|
||||||
(r'^files/info', 'file_info'),
|
|
||||||
(r'^archive/(?P<archive>.+)/update', 'update_archive'),
|
|
||||||
(r'^file/parse', 'file_parse'),
|
|
||||||
(r'^subtitle/get', 'subtitles'),
|
|
||||||
|
|
||||||
# Example:
|
|
||||||
# (r'^oxdata/', include('oxdata.foo.urls')),
|
|
||||||
|
|
||||||
# Uncomment the admin/doc line below and add 'django.contrib.admindocs'
|
|
||||||
# to INSTALLED_APPS to enable admin documentation:
|
|
||||||
# (r'^admin/doc/', include('django.contrib.admindocs.urls')),
|
|
||||||
|
|
||||||
# Uncomment the next line to enable the admin:
|
|
||||||
# (r'^admin/(.*)', admin.site.root),
|
|
||||||
)
|
|
||||||
|
|
||||||
#add user urls. login, logout, preferences etc
|
|
||||||
import user_management.urls
|
|
||||||
urlpatterns += user_management.urls.urlpatterns
|
|
||||||
|
|
|
@ -122,6 +122,6 @@ def parsePath(path):
|
||||||
r['season'], r['episode'] = oxdb_season_episode(path)
|
r['season'], r['episode'] = oxdb_season_episode(path)
|
||||||
r['series'] = oxdb_series_title(path)
|
r['series'] = oxdb_series_title(path)
|
||||||
r['part'] = oxdb_part(path)
|
r['part'] = oxdb_part(path)
|
||||||
r['imdbId'] = oxweb.imdb.guess(search_title, r['director'])
|
r['imdbId'] = oxweb.imdb.guess(search_title, r['director'], timeout=-1)
|
||||||
return r
|
return r
|
||||||
|
|
||||||
|
|
|
@ -21,11 +21,35 @@ except ImportError:
|
||||||
from oxdjango.shortcuts import render_to_json_response
|
from oxdjango.shortcuts import render_to_json_response
|
||||||
from oxdjango.decorators import login_required_json
|
from oxdjango.decorators import login_required_json
|
||||||
|
|
||||||
|
|
||||||
import models
|
import models
|
||||||
import utils
|
import utils
|
||||||
from daemon import send_bg_message
|
from daemon import send_bg_message
|
||||||
|
|
||||||
|
from oxuser.views import api_login, api_logout, api_register, api_recover, api_preferences
|
||||||
|
|
||||||
|
|
||||||
|
def api(request):
|
||||||
|
function = request.POST['function']
|
||||||
|
#FIXME: possible to do this in f
|
||||||
|
#data = json.loads(request.POST['data'])
|
||||||
|
|
||||||
|
#FIXME: security considerations, web facing api should not call anything in globals!!!
|
||||||
|
f = globals().get('api_'+function, None)
|
||||||
|
if f:
|
||||||
|
response = f(request)
|
||||||
|
else:
|
||||||
|
response = {'status': 404, 'statusText': 'Unknown function %s' % function}
|
||||||
|
return render_to_json_response(response)
|
||||||
|
|
||||||
|
def api_hello(request):
|
||||||
|
'''
|
||||||
|
function: helo
|
||||||
|
'''
|
||||||
|
response = {'status': 200, 'statusText': 'ok'}
|
||||||
|
response.user = request.user.json()
|
||||||
|
return render_to_json_response(response)
|
||||||
|
|
||||||
|
|
||||||
'''
|
'''
|
||||||
field.length -> movie.sort.all()[0].field
|
field.length -> movie.sort.all()[0].field
|
||||||
o=0&n=100
|
o=0&n=100
|
||||||
|
@ -123,7 +147,7 @@ Examples:
|
||||||
#auto compleat in find box
|
#auto compleat in find box
|
||||||
|
|
||||||
'''
|
'''
|
||||||
def order_query(qs, s, prefix='sort__'):
|
def _order_query(qs, s, prefix='sort__'):
|
||||||
order_by = []
|
order_by = []
|
||||||
for e in s.split(','):
|
for e in s.split(','):
|
||||||
o = e.split(':')
|
o = e.split(':')
|
||||||
|
@ -137,7 +161,7 @@ def order_query(qs, s, prefix='sort__'):
|
||||||
qs = qs.order_by(*order_by)
|
qs = qs.order_by(*order_by)
|
||||||
return qs
|
return qs
|
||||||
|
|
||||||
def parse_query(request):
|
def _parse_query(request):
|
||||||
get = request.GET
|
get = request.GET
|
||||||
query = {}
|
query = {}
|
||||||
query['i'] = 0
|
query['i'] = 0
|
||||||
|
@ -167,12 +191,21 @@ def parse_query(request):
|
||||||
#group by only allows sorting by name or number of itmes
|
#group by only allows sorting by name or number of itmes
|
||||||
return query
|
return query
|
||||||
|
|
||||||
def find(request):
|
def api_find(request):
|
||||||
query = parse_query(request)
|
'''
|
||||||
|
function: find
|
||||||
|
data: {'q': query, 's': sort, 'r': range}
|
||||||
|
|
||||||
|
query: query string, can contain field:search more on query syntax at
|
||||||
|
http://wiki.0xdb.org/wiki/QuerySyntax
|
||||||
|
sort: comma seperated list of field:order, default: director:asc,year:desc
|
||||||
|
range: result ragne, from:to or from
|
||||||
|
'''
|
||||||
|
query = _parse_query(request)
|
||||||
response = {}
|
response = {}
|
||||||
if 'p' in query:
|
if 'p' in query:
|
||||||
response['items'] = []
|
response['items'] = []
|
||||||
qs = order_query(query['q'], query['s'])
|
qs = _order_query(query['q'], query['s'])
|
||||||
if 'n' in query:
|
if 'n' in query:
|
||||||
response = {'items': qs.count()}
|
response = {'items': qs.count()}
|
||||||
else:
|
else:
|
||||||
|
@ -218,7 +251,7 @@ def find(request):
|
||||||
order_by = "%s:%s" % (name, order_by[1])
|
order_by = "%s:%s" % (name, order_by[1])
|
||||||
else:
|
else:
|
||||||
order_by = "%s:%s" % (items, order_by[1])
|
order_by = "%s:%s" % (items, order_by[1])
|
||||||
qs = order_query(qs, order_by, '')
|
qs = _order_query(qs, order_by, '')
|
||||||
qs = qs[query['i']:query['o']]
|
qs = qs[query['i']:query['o']]
|
||||||
|
|
||||||
response['items'] = [{'title': i[name], 'items': i[items]} for i in qs]
|
response['items'] = [{'title': i[name], 'items': i[items]} for i in qs]
|
||||||
|
@ -235,6 +268,129 @@ def find(request):
|
||||||
response['duration'] = r['duration__count']
|
response['duration'] = r['duration__count']
|
||||||
return render_to_json_response(response)
|
return render_to_json_response(response)
|
||||||
|
|
||||||
|
def api_getItem(request):
|
||||||
|
'''
|
||||||
|
function: getItem
|
||||||
|
|
||||||
|
api('getItem', id)
|
||||||
|
return item with id
|
||||||
|
'''
|
||||||
|
response = {'status': 200, 'statusText': 'ok'}
|
||||||
|
itemId = json.loads(request.POST['data'])
|
||||||
|
item = models.Movie.objects.get(movieId=itemId)
|
||||||
|
response['item'] = item.json()
|
||||||
|
return render_to_json_response(response)
|
||||||
|
|
||||||
|
def api_editItem(request):
|
||||||
|
response = {'status': 500, 'statusText': 'not implemented'}
|
||||||
|
return render_to_json_response(response)
|
||||||
|
def api_removeItem(request):
|
||||||
|
response = {'status': 500, 'statusText': 'not implemented'}
|
||||||
|
return render_to_json_response(response)
|
||||||
|
def api_addLayer(request):
|
||||||
|
response = {'status': 500, 'statusText': 'not implemented'}
|
||||||
|
return render_to_json_response(response)
|
||||||
|
def api_removeLayer(request):
|
||||||
|
response = {'status': 500, 'statusText': 'not implemented'}
|
||||||
|
return render_to_json_response(response)
|
||||||
|
def api_editLayer(request):
|
||||||
|
response = {'status': 500, 'statusText': 'not implemented'}
|
||||||
|
return render_to_json_response(response)
|
||||||
|
def api_addListItem(request):
|
||||||
|
response = {'status': 500, 'statusText': 'not implemented'}
|
||||||
|
return render_to_json_response(response)
|
||||||
|
def api_removeListItem(request):
|
||||||
|
response = {'status': 500, 'statusText': 'not implemented'}
|
||||||
|
return render_to_json_response(response)
|
||||||
|
def api_addList(request):
|
||||||
|
response = {'status': 500, 'statusText': 'not implemented'}
|
||||||
|
return render_to_json_response(response)
|
||||||
|
def api_editList(request):
|
||||||
|
response = {'status': 500, 'statusText': 'not implemented'}
|
||||||
|
return render_to_json_response(response)
|
||||||
|
def api_removeList(request):
|
||||||
|
response = {'status': 500, 'statusText': 'not implemented'}
|
||||||
|
return render_to_json_response(response)
|
||||||
|
|
||||||
|
'''
|
||||||
|
POST update
|
||||||
|
> files: {
|
||||||
|
oshash: { 'path': .., ..},
|
||||||
|
oshash: { 'path': .., ..},
|
||||||
|
}
|
||||||
|
'''
|
||||||
|
#@login_required_json
|
||||||
|
def api_update(request, archive):
|
||||||
|
print "update request"
|
||||||
|
data = json.loads(request.POST['data'])
|
||||||
|
archive = data['archive']
|
||||||
|
files = data['files']
|
||||||
|
archive = models.Archive.objects.get(name=archive)
|
||||||
|
print "update request for", archive.name
|
||||||
|
needs_data = []
|
||||||
|
rename = {}
|
||||||
|
for oshash in files:
|
||||||
|
print 'checking', oshash
|
||||||
|
data = files[oshash]
|
||||||
|
q = models.ArchiveFile.objects.filter(archive=archive, file__oshash=oshash)
|
||||||
|
if q.count() == 0:
|
||||||
|
print "adding file", oshash, data['path']
|
||||||
|
f = models.ArchiveFile.get_or_create(archive, oshash)
|
||||||
|
f.update(data)
|
||||||
|
if not f.file.movie:
|
||||||
|
send_bg_message({'findMovie': f.file.id})
|
||||||
|
#FIXME: only add if it was not in File
|
||||||
|
else:
|
||||||
|
f = q[0]
|
||||||
|
if data['path'] != f.path:
|
||||||
|
f.path = data['path']
|
||||||
|
f.save()
|
||||||
|
if f.file.needs_data:
|
||||||
|
needs_data.append(oshash)
|
||||||
|
if f.path != f.file.path:
|
||||||
|
rename[oshash] = f.file.path
|
||||||
|
print "processed files for", archive.name
|
||||||
|
#remove all files not in files.keys() from ArchiveFile
|
||||||
|
response = {'status': 200, 'statusText': 'ok'}
|
||||||
|
response['info'] = needs_data
|
||||||
|
response['rename'] = rename
|
||||||
|
return render_to_json_response(response)
|
||||||
|
|
||||||
|
|
||||||
|
def api_upload(request): #video, timeline, frame
|
||||||
|
response = {'status': 500, 'statusText': 'not implemented'}
|
||||||
|
return render_to_json_response(response)
|
||||||
|
|
||||||
|
def api_file(request): #FIXME: should this be file.files. or part of update
|
||||||
|
'''
|
||||||
|
change file / imdb link
|
||||||
|
'''
|
||||||
|
response = {'status': 500, 'statusText': 'not implemented'}
|
||||||
|
return render_to_json_response(response)
|
||||||
|
|
||||||
|
def api_parse(request): #parse path and return info
|
||||||
|
response = {'status': 500, 'statusText': 'not implemented'}
|
||||||
|
return render_to_json_response(response)
|
||||||
|
|
||||||
|
def api_guess(request): #guess imdb based on title, director, year
|
||||||
|
response = {'status': 500, 'statusText': 'not implemented'}
|
||||||
|
return render_to_json_response(response)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#FIXME: old stuff below...
|
||||||
'''
|
'''
|
||||||
GET info?oshash=a41cde31c581e11d
|
GET info?oshash=a41cde31c581e11d
|
||||||
> {
|
> {
|
||||||
|
@ -306,7 +462,7 @@ def list_files(request):
|
||||||
|
|
||||||
def find_files(request):
|
def find_files(request):
|
||||||
response = {}
|
response = {}
|
||||||
query = parse_query(request)
|
query = _parse_query(request)
|
||||||
response['files'] = {}
|
response['files'] = {}
|
||||||
qs = models.UserFile.filter(user=request.user).filter(movie_file__movie__id__in=query['q'])
|
qs = models.UserFile.filter(user=request.user).filter(movie_file__movie__id__in=query['q'])
|
||||||
p = Paginator(qs, 1000)
|
p = Paginator(qs, 1000)
|
||||||
|
@ -405,47 +561,6 @@ def add_video(request, oshash):
|
||||||
response['url'] = f.stream128.url()
|
response['url'] = f.stream128.url()
|
||||||
return render_to_json_response(response)
|
return render_to_json_response(response)
|
||||||
|
|
||||||
'''
|
|
||||||
POST update
|
|
||||||
> files: {
|
|
||||||
oshash: { 'path': .., ..},
|
|
||||||
oshash: { 'path': .., ..},
|
|
||||||
}
|
|
||||||
'''
|
|
||||||
#@login_required_json
|
|
||||||
def update_archive(request, archive):
|
|
||||||
print "update request"
|
|
||||||
archive = models.Archive.objects.get(name=archive)
|
|
||||||
files = json.loads(request.POST['files'])
|
|
||||||
print "update request for", archive.name
|
|
||||||
needs_data = []
|
|
||||||
rename = {}
|
|
||||||
for oshash in files:
|
|
||||||
print 'checking', oshash
|
|
||||||
data = files[oshash]
|
|
||||||
q = models.ArchiveFile.objects.filter(archive=archive, file__oshash=oshash)
|
|
||||||
if q.count() == 0:
|
|
||||||
print "adding file", oshash, data['path']
|
|
||||||
f = models.ArchiveFile.get_or_create(archive, oshash)
|
|
||||||
f.update(data)
|
|
||||||
if not f.file.movie:
|
|
||||||
send_bg_message({'findMovie': f.file.id})
|
|
||||||
#FIXME: only add if it was not in File
|
|
||||||
else:
|
|
||||||
f = q[0]
|
|
||||||
if data['path'] != f.path:
|
|
||||||
f.path = data['path']
|
|
||||||
f.save()
|
|
||||||
if f.file.needs_data:
|
|
||||||
needs_data.append(oshash)
|
|
||||||
if f.path != f.file.path:
|
|
||||||
rename[oshash] = f.file.path
|
|
||||||
print "processed files for", archive.name
|
|
||||||
#remove all files not in files.keys() from ArchiveFile
|
|
||||||
response = {}
|
|
||||||
response['info'] = needs_data
|
|
||||||
response['rename'] = rename
|
|
||||||
return render_to_json_response(response)
|
|
||||||
|
|
||||||
def file_parse(request):
|
def file_parse(request):
|
||||||
response = utils.parsePath(request.POST['path'])
|
response = utils.parsePath(request.POST['path'])
|
||||||
|
|
|
@ -11,9 +11,6 @@ class Group(models.Model):
|
||||||
name = models.CharField(blank=True, max_length=255, unique=True)
|
name = models.CharField(blank=True, max_length=255, unique=True)
|
||||||
users = models.ManyToManyField(User, related_name='groups')
|
users = models.ManyToManyField(User, related_name='groups')
|
||||||
|
|
||||||
class Profile(models.Model):
|
|
||||||
user = models.ForeignKey(User, unique=True)
|
|
||||||
|
|
||||||
class Preference(models.Model):
|
class Preference(models.Model):
|
||||||
created = models.DateTimeField(auto_now_add=True)
|
created = models.DateTimeField(auto_now_add=True)
|
||||||
modified = models.DateTimeField(auto_now=True)
|
modified = models.DateTimeField(auto_now=True)
|
||||||
|
@ -21,3 +18,18 @@ class Preference(models.Model):
|
||||||
key = models.CharField(blank=True, max_length=255)
|
key = models.CharField(blank=True, max_length=255)
|
||||||
value = models.TextField(blank=True)
|
value = models.TextField(blank=True)
|
||||||
|
|
||||||
|
def getPreference(user, key, value=None):
|
||||||
|
q = Preference.objects.filter(user=user, key=key)
|
||||||
|
if q.count() > 0:
|
||||||
|
value = json.loads(q[0].value)
|
||||||
|
return value
|
||||||
|
|
||||||
|
def setPreference(user, key, value):
|
||||||
|
value = json.dumps(value)
|
||||||
|
q = Preference.objects.filter(user=user, key=key)
|
||||||
|
if q.count() > 0:
|
||||||
|
q[0].value = value
|
||||||
|
else:
|
||||||
|
p = Preference(user=user, key=key, value=value)
|
||||||
|
p.save()
|
||||||
|
|
14
oxdb/oxuser/urls.py
Normal file
14
oxdb/oxuser/urls.py
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# vi:si:et:sw=4:sts=4:ts=4
|
||||||
|
|
||||||
|
from django.conf.urls.defaults import *
|
||||||
|
|
||||||
|
|
||||||
|
urlpatterns = patterns("oxdb.oxuser.views",
|
||||||
|
(r'^preferences', 'api_preferences'),
|
||||||
|
(r'^login', 'api_login'),
|
||||||
|
(r'^logout', 'api_logout'),
|
||||||
|
(r'^register', 'api_register'),
|
||||||
|
(r'^recover', 'api_recover'),
|
||||||
|
)
|
||||||
|
|
112
oxdb/oxuser/views.py
Normal file
112
oxdb/oxuser/views.py
Normal file
|
@ -0,0 +1,112 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# vi:si:et:sw=4:sts=4:ts=4
|
||||||
|
|
||||||
|
from django.contrib.auth.models import User
|
||||||
|
from django.shortcuts import render_to_response, get_object_or_404, get_list_or_404
|
||||||
|
from django.template import RequestContext
|
||||||
|
from django.utils import simplejson as json
|
||||||
|
|
||||||
|
from oxdjango.shortcuts import render_to_json_response
|
||||||
|
from oxdjango.decorators import login_required_json
|
||||||
|
|
||||||
|
import models
|
||||||
|
|
||||||
|
|
||||||
|
def api_login(request):
|
||||||
|
'''
|
||||||
|
function: login
|
||||||
|
data: {'username': username, 'password': password}
|
||||||
|
|
||||||
|
username/password to login
|
||||||
|
'''
|
||||||
|
response = {'status': 403, 'statusText': 'login failed'}
|
||||||
|
data = json.loads(request.POST['data'])
|
||||||
|
|
||||||
|
from django.contrib.auth import authenticate, login
|
||||||
|
user = authenticate(username=data['username'], password=data['password'])
|
||||||
|
if user is not None:
|
||||||
|
if user.is_active:
|
||||||
|
user_json = {} #FIXME: preferences etc should be in here
|
||||||
|
login(request, user)
|
||||||
|
response = {'status': 200, 'message': 'You are logged in.', 'user': user_json}
|
||||||
|
else:
|
||||||
|
response = {'status': 403, 'statusText': 'Your account is disabled.'}
|
||||||
|
print "Your account has been disabled!"
|
||||||
|
else:
|
||||||
|
response = {'status': 403, 'statusText': 'Your username and password were incorrect.'}
|
||||||
|
return render_to_json_response(response)
|
||||||
|
|
||||||
|
def api_logout(request):
|
||||||
|
'''
|
||||||
|
function: logout
|
||||||
|
'''
|
||||||
|
response = {'status': 200, 'statusText': 'logged out'}
|
||||||
|
if request.user.is_authenticated():
|
||||||
|
request.user.logout()
|
||||||
|
return render_to_json_response(response)
|
||||||
|
|
||||||
|
def api_register(request):
|
||||||
|
'''
|
||||||
|
function: register
|
||||||
|
data: {'username': username, 'password': password, 'email': email}
|
||||||
|
|
||||||
|
username
|
||||||
|
password
|
||||||
|
email
|
||||||
|
'''
|
||||||
|
data = json.loads(request.POST['data'])
|
||||||
|
response = {'status': 422, 'statusText': 'username exists'}
|
||||||
|
return render_to_json_response(response)
|
||||||
|
|
||||||
|
def api_recover(request):
|
||||||
|
data = json.loads(request.POST['data'])
|
||||||
|
|
||||||
|
username = data['username']
|
||||||
|
user = None
|
||||||
|
q = models.User.objects.filter(username=username)
|
||||||
|
if q.count() > 0:
|
||||||
|
user = q[0]
|
||||||
|
else:
|
||||||
|
q = models.User.objects.filter(email=username)
|
||||||
|
if q.count() > 0:
|
||||||
|
user = q[0]
|
||||||
|
if user:
|
||||||
|
#user.sendmail(...) #FIXME: send recovery mail
|
||||||
|
response = {'status': 200, 'statusText': 'recover email sent.'}
|
||||||
|
else:
|
||||||
|
response = {'status': 404, 'statusText': 'user or email not found.'}
|
||||||
|
return render_to_json_response(response)
|
||||||
|
|
||||||
|
@login_required_json
|
||||||
|
def api_preferences(request):
|
||||||
|
'''
|
||||||
|
function: preferences
|
||||||
|
|
||||||
|
api('preferences')
|
||||||
|
return all preferences
|
||||||
|
api('preferences', 'key1')
|
||||||
|
return preference key1
|
||||||
|
api('preferences', [key1, key2])
|
||||||
|
return preference key1, key2
|
||||||
|
api('preferences', {key: value})
|
||||||
|
set preference key to value
|
||||||
|
'''
|
||||||
|
response = {'status': 200, 'statusText': 'ok'}
|
||||||
|
if 'data' not in request.POST:
|
||||||
|
response['preferences'] = request.user.preferences
|
||||||
|
else:
|
||||||
|
data = json.loads(request.POST['data'])
|
||||||
|
if isinstance(data, basestring):
|
||||||
|
response = {'status': 500, 'statusText': 'fixme: get preferences not implemented'}
|
||||||
|
response['preferences'][data] = models.getPreference(user, data)
|
||||||
|
elif isinstance(data, list):
|
||||||
|
response = {'status': 500, 'statusText': 'fixme: get preferences not implemented'}
|
||||||
|
response['preferences'] = {}
|
||||||
|
for preference in data:
|
||||||
|
response['preferences'][preference] = models.getPreference(user, preference)
|
||||||
|
elif isinstance(data, dict):
|
||||||
|
response = {'status': 500, 'statusText': 'fixme: set preferences not implemented'}
|
||||||
|
for key in data:
|
||||||
|
models.setPreference(user, key, data[key])
|
||||||
|
return render_to_json_response(response)
|
||||||
|
|
|
@ -10,7 +10,7 @@ admin.autodiscover()
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns('',
|
||||||
# Example:
|
# Example:
|
||||||
(r'^ajax_filtered_fields/', include('ajax_filtered_fields.urls')),
|
(r'^ajax_filtered_fields/', include('ajax_filtered_fields.urls')),
|
||||||
(r'^json/', include('backend.urls')),
|
(r'^api/', include('backend.views.api')),
|
||||||
(r'^$', 'app.views.index'),
|
(r'^$', 'app.views.index'),
|
||||||
|
|
||||||
# Uncomment the admin/doc line below and add 'django.contrib.admindocs'
|
# Uncomment the admin/doc line below and add 'django.contrib.admindocs'
|
||||||
|
|
|
@ -1,14 +0,0 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
# vi:si:et:sw=4:sts=4:ts=4
|
|
||||||
|
|
||||||
from django.conf.urls.defaults import *
|
|
||||||
|
|
||||||
|
|
||||||
urlpatterns = patterns("oxdb.user_management.views",
|
|
||||||
(r'^preferences', 'preferences'),
|
|
||||||
(r'^login', 'login'),
|
|
||||||
(r'^logout', 'logout'),
|
|
||||||
(r'^register', 'register'),
|
|
||||||
(r'^recover', 'recover'),
|
|
||||||
)
|
|
||||||
|
|
|
@ -1,93 +0,0 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
# vi:si:et:sw=4:sts=4:ts=4
|
|
||||||
|
|
||||||
from django.contrib.auth.models import User
|
|
||||||
from django.shortcuts import render_to_response, get_object_or_404, get_list_or_404
|
|
||||||
from django.template import RequestContext
|
|
||||||
from django.utils import simplejson as json
|
|
||||||
|
|
||||||
from oxdjango.shortcuts import render_to_json_response
|
|
||||||
from oxdjango.decorators import login_required_json
|
|
||||||
|
|
||||||
import models
|
|
||||||
|
|
||||||
|
|
||||||
def login(request):
|
|
||||||
from django.contrib.auth import authenticate, login
|
|
||||||
response = {'status': 403, 'message': 'login required'}
|
|
||||||
username = request.POST['username']
|
|
||||||
password = request.POST['password']
|
|
||||||
user = authenticate(username=username, password=password)
|
|
||||||
if user is not None:
|
|
||||||
if user.is_active:
|
|
||||||
user_json = {} #FIXME: preferences etc should be in here
|
|
||||||
login(request, user)
|
|
||||||
response = {'status': 200, 'message': 'You are logged in.', 'user': user_json}
|
|
||||||
else:
|
|
||||||
response = {'status': 403, 'message': 'Your account is disabled.'}
|
|
||||||
print "Your account has been disabled!"
|
|
||||||
else:
|
|
||||||
response = {'status': 403, 'message': 'Your username and password were incorrect.'}
|
|
||||||
return render_to_json_response(response)
|
|
||||||
|
|
||||||
def logout(request):
|
|
||||||
response = {'status': 200}
|
|
||||||
if request.user.is_authenticated():
|
|
||||||
request.user.logout()
|
|
||||||
return render_to_json_response(response)
|
|
||||||
|
|
||||||
def register(request):
|
|
||||||
response = {'status': 500, 'message': 'registration failed'}
|
|
||||||
return render_to_json_response(response)
|
|
||||||
|
|
||||||
def recover(request):
|
|
||||||
username = request.POST.get('username', None)
|
|
||||||
user = None
|
|
||||||
q = User.objects.filter(username=username)
|
|
||||||
if q.count() > 0:
|
|
||||||
user = q[0]
|
|
||||||
else:
|
|
||||||
q = User.objects.filter(email=email)
|
|
||||||
if q.count() > 0:
|
|
||||||
user = q[0]
|
|
||||||
if user:
|
|
||||||
#user.sendmail(...) #FIXME: send recovery mail
|
|
||||||
response = {'status': 200, 'message': 'recovert email sent.'}
|
|
||||||
else:
|
|
||||||
response = {'status': 500, 'message': 'user or email not found.'}
|
|
||||||
return render_to_json_response(response)
|
|
||||||
|
|
||||||
'''
|
|
||||||
GET preferences/ //get all keys
|
|
||||||
GET preferences/?key= //get key
|
|
||||||
GEt preferences/?key=&value= //set key
|
|
||||||
'''
|
|
||||||
@login_required_json
|
|
||||||
def preferences(request):
|
|
||||||
response = {'status': 200}
|
|
||||||
key = request.GET.get('key', None)
|
|
||||||
value = request.GET.get('value', None)
|
|
||||||
user = request.user
|
|
||||||
response['preferences'] = {}
|
|
||||||
if not key: # return all preferences for current user
|
|
||||||
for p in models.Preference.objects.filter(user=user):
|
|
||||||
response['preferences'][p.key] = p.value
|
|
||||||
response['preferences']['email'] = user.email
|
|
||||||
elif value == None: #return one preference
|
|
||||||
p, created = models.Preference.objects.get_or_create(user=user, key=key)
|
|
||||||
response['preferences'][key] = p.value
|
|
||||||
else: # set preference
|
|
||||||
del response['preferences']
|
|
||||||
response['message'] = '%s saved.' % key
|
|
||||||
if key == 'password':
|
|
||||||
user.set_password(value)
|
|
||||||
user.save()
|
|
||||||
elif key == 'email':
|
|
||||||
user.email = vaule
|
|
||||||
user.save()
|
|
||||||
else:
|
|
||||||
p, created = models.Preference.objects.get_or_create(user=user, key=key)
|
|
||||||
p.value = value
|
|
||||||
p.save()
|
|
||||||
return render_to_json_response(response)
|
|
||||||
|
|
Loading…
Reference in a new issue