Fixes for read/write ACLs on server and client side

This commit is contained in:
Ian Gulliver
2014-05-30 16:42:30 -07:00
parent 8982e0e2b5
commit e1288a67fb
2 changed files with 28 additions and 9 deletions

View File

@@ -290,10 +290,10 @@ class Subject(db.Model):
}
readable_only_by = Subject.readable_only_by.get_value_for_datastore(self)
if readable_only_by:
ret['readable_only_by'] = readable_only_by
ret['readable_only_by'] = str(readable_only_by)
writable_only_by = Subject.writable_only_by.get_value_for_datastore(self)
if writable_only_by:
ret['writable_only_by'] = writable_only_by
ret['writable_only_by'] = str(writable_only_by)
return ret

View File

@@ -264,7 +264,7 @@ Cosmopolite.prototype.subscribe = function(subject, opt_messages, opt_last_id) {
/** @type {Cosmopolite.typeSubject} */
var canonicalSubject = this.canonicalSubject_(subject);
/** @type {string} */
var subjectString = JSON.stringify(canonicalSubject);
var subjectString = this.subjectString_(canonicalSubject);
if (!(subjectString in this.subscriptions_)) {
this.subscriptions_[subjectString] = {
'messages': [],
@@ -316,7 +316,7 @@ Cosmopolite.prototype.unsubscribe = function(subject) {
/** @type {Cosmopolite.typeSubject} */
var canonicalSubject = this.canonicalSubject_(subject);
/** @type {string} */
var subjectString = JSON.stringify(canonicalSubject);
var subjectString = this.subjectString_(canonicalSubject);
delete this.subscriptions_[subjectString];
var args = {
'subject': canonicalSubject
@@ -364,7 +364,7 @@ Cosmopolite.prototype.getMessages = function(subject) {
/** @type {Cosmopolite.typeSubject} */
var canonicalSubject = this.canonicalSubject_(subject);
/** @type {string} */
var subjectString = JSON.stringify(canonicalSubject);
var subjectString = this.subjectString_(canonicalSubject);
return this.subscriptions_[subjectString].messages;
};
@@ -398,7 +398,7 @@ Cosmopolite.prototype.getPins = function(subject) {
/** @type {Cosmopolite.typeSubject} */
var canonicalSubject = this.canonicalSubject_(subject);
/** @type {string} */
var subjectString = JSON.stringify(canonicalSubject);
var subjectString = this.subjectString_(canonicalSubject);
return this.subscriptions_[subjectString].pins;
};
@@ -546,6 +546,23 @@ Cosmopolite.prototype.canonicalSubject_ = function(subject) {
};
/**
* Stringify a subject for use as an object key.
*
* @param {Cosmopolite.typeSubject} subject
* @return {string}
* @const
* @private
*/
Cosmopolite.prototype.subjectString_ = function(subject) {
return [
subject['name'],
subject['readable_only_by'],
subject['writable_only_by']
].toString();
};
/**
* Callback when a script loads.
*
@@ -1042,13 +1059,15 @@ Cosmopolite.prototype.onLogout_ = function(e) {
*/
Cosmopolite.prototype.onMessage_ = function(e) {
/** @type {string} */
var subjectString = JSON.stringify(e['subject']);
var subjectString = this.subjectString_(e['subject']);
/** @type {Cosmopolite.typeSubscription_} */
var subscription = this.subscriptions_[subjectString];
if (!subscription) {
console.log(
this.loggingPrefix_(),
'message from unrecognized subject:', e);
console.log(this.subscriptions_);
console.log(subjectString);
return;
}
/** @type {boolean} */
@@ -1088,7 +1107,7 @@ Cosmopolite.prototype.onMessage_ = function(e) {
*/
Cosmopolite.prototype.onPin_ = function(e) {
/** @type {string} */
var subjectString = JSON.stringify(e['subject']);
var subjectString = this.subjectString_(e['subject']);
/** @type {Cosmopolite.typeSubscription_} */
var subscription = this.subscriptions_[subjectString];
if (!subscription) {
@@ -1122,7 +1141,7 @@ Cosmopolite.prototype.onPin_ = function(e) {
*/
Cosmopolite.prototype.onUnpin_ = function(e) {
/** @type {string} */
var subjectString = JSON.stringify(e['subject']);
var subjectString = this.subjectString_(e['subject']);
/** @type {Cosmopolite.typeSubscription_} */
var subscription = this.subscriptions_[subjectString];
if (!subscription) {