make contacts and send api work without server side session. pass account objet back with each api call from client

This commit is contained in:
Shane Caraveo 2011-02-17 16:06:46 -08:00
Родитель 7a17e65e06
Коммит e12bfc2e16
6 изменённых файлов: 50 добавлений и 26 удалений

Просмотреть файл

@ -85,12 +85,13 @@ Name of the group to return.
response={'type': 'object', 'doc': 'Portable Contacts Collection'}
)
def get(self, domain):
username = request.params.get('username')
userid = request.params.get('userid')
group = request.params.get('group', None)
startIndex = int(request.params.get('startindex','0'))
maxResults = int(request.params.get('maxresults','25'))
username = request.POST.get('username')
userid = request.POST.get('userid')
group = request.POST.get('group', None)
startIndex = int(request.POST.get('startindex','0'))
maxResults = int(request.POST.get('maxresults','25'))
keys = session.get('account_keys', '').split(',')
account_data = request.POST.get('account', None)
if not keys:
error = {'provider': domain,
'message': "no user session exists, auth required",
@ -101,12 +102,16 @@ Name of the group to return.
# even if we have a session key, we must have an account for that
# user for the specified domain.
acct = None
for k in keys:
a = session.get(k)
if a and a.get('domain') == domain and (not username or a.get('username')==username and not userid or a.get('userid')==userid):
acct = a
break
if account_data:
acct = json.loads(account_data)
else:
# support for old accounts in the session store
acct = None
for k in keys:
a = session.get(k)
if a and a.get('domain') == domain and (not username or a.get('username')==username and not userid or a.get('userid')==userid):
acct = a
break
if not acct:
error = {'provider': domain,
'message': "not logged in or no user account for that domain",

Просмотреть файл

@ -120,6 +120,7 @@ Site provided description of the shared item, not supported by all services.
shorturl = request.POST.get('shorturl')
userid = request.POST.get('userid')
to = request.POST.get('to')
account_data = request.POST.get('account', None)
if not domain:
error = {
'message': "'domain' is not optional",
@ -138,12 +139,17 @@ Site provided description of the shared item, not supported by all services.
provider = get_provider(domain)
# even if we have a session key, we must have an account for that
# user for the specified domain.
acct = None
for k in keys:
a = session.get(k)
if a and a.get('domain') == domain and (a.get('username')==username or a.get('userid')==userid):
acct = a
break
if account_data:
acct = json.loads(account_data)
else:
raise Exception('foobar')
# support for old account data in session store
acct = None
for k in keys:
a = session.get(k)
if a and a.get('domain') == domain and (a.get('username')==username or a.get('userid')==userid):
acct = a
break
if not acct:
error = {'provider': domain,
'message': "not logged in or no user account for that domain",

Просмотреть файл

@ -26,8 +26,8 @@
localStorage: false, opener: false, setTimeout: false */
'use strict';
define([ 'storage', 'dispatch', 'rdapi'],
function (storage, dispatch, rdapi) {
define([ 'storage', 'dispatch', 'rdapi', 'services'],
function (storage, dispatch, rdapi, services) {
var store = storage(), impl,
changeTypes = {
@ -144,6 +144,11 @@ function (storage, dispatch, rdapi) {
}
store.accountCache = JSON.stringify(accountCache);
}
// clear the contacts cache
var svc = services.domains[domain];
svc.clearCache(store);
impl.changed();
},
@ -161,7 +166,7 @@ function (storage, dispatch, rdapi) {
}
return null;
},
changed: function () {
store.accountChanged = (new Date()).getTime();
//Force the onchange events to occur. Sometimes the storage
@ -246,7 +251,7 @@ function (storage, dispatch, rdapi) {
* @param {string} account username
*/
accounts.getService = function (account, userid, username) {
impl.remove(account, userid, username);
return impl.getService(account, userid, username);
};
/**

Просмотреть файл

@ -215,6 +215,9 @@ function (require, $, fn, rdapi, oauth, jig, url,
return;
}
var svcData = accounts.getService(data.domain, data.userid, data.username);
sendData.account = JSON.stringify(svcData);
rdapi('send', {
type: 'POST',
data: sendData,
@ -297,13 +300,15 @@ function (require, $, fn, rdapi, oauth, jig, url,
svc = services.domains[svcAccount.domain],
contacts = svc.getContacts(store);
if (!contacts) {
var svcData = accounts.getService(svcAccount.domain, svcAccount.userid, svcAccount.username);
rdapi('contacts/' + svcAccount.domain, {
type: 'POST',
data: {
username: svcAccount.username,
userid: svcAccount.userid,
startindex: 0,
maxresults: 500
maxresults: 500,
account: JSON.stringify(svcData)
},
success: function (json) {
//Transform data to a form usable by autocomplete.

Просмотреть файл

@ -138,6 +138,8 @@ function (require, $, fn, rdapi, oauth, jig, url,
showStatus('statusSharing');
sendData = data;
var svcData = accounts.getService(data.domain, data.userid, data.username);
sendData.account = JSON.stringify(svcData);
rdapi('send', {
type: 'POST',

Просмотреть файл

@ -26,10 +26,10 @@
"use strict";
define([ 'blade/object', 'blade/Widget', 'jquery', 'text!./AccountPanel.html',
'TextCounter', 'storage', 'module', 'placeholder', 'dispatch',
'TextCounter', 'storage', 'module', 'placeholder', 'dispatch', 'accounts',
'AutoComplete', 'rdapi', 'blade/fn', './jigFuncs', 'jquery.textOverflow'],
function (object, Widget, $, template,
TextCounter, storage, module, placeholder, dispatch,
TextCounter, storage, module, placeholder, dispatch, accounts,
AutoComplete, rdapi, fn, jigFuncs) {
var store = storage(),
@ -405,13 +405,15 @@ function (object, Widget, $, template,
storeContacts: function () {
var contacts = this.svc.getContacts(store);
if (!contacts) {
var svcData = accounts.getService(this.svcAccount.domain, this.svcAccount.userid, this.svcAccount.username);
rdapi('contacts/' + this.svcAccount.domain, {
type: 'POST',
data: {
username: this.svcAccount.username,
userid: this.svcAccount.userid,
startindex: 0,
maxresults: 500
maxresults: 500,
account: JSON.stringify(svcData)
},
success: fn.bind(this, function (json) {
//Transform data to a form usable by autocomplete.
@ -420,7 +422,6 @@ function (object, Widget, $, template,
data = [];
data = this.svc.getFormattedContacts(entries);
this.svc.setContacts(store, data);
this.updateAutoComplete(this.svcAccount.domain);
}