update suggestions when subscriptions change
[mygpo.git] / couchdb / _design / users / validate_doc_update.js
bloba7c7443b4c8875c53243fee2068e415fc6c3caa5
1 function(newDoc, oldDoc, userCtx)
4     if(newDoc.doc_type == "User")
5     {
6         var device_uids = [];
7         var device_ids = [];
9         for(var n in newDoc.devices)
10         {
11             var device = newDoc.devices[n];
13             if(device_ids.indexOf(device.id) > -1)
14             {
15                 throw({forbidden: "Duplicate Device-Id " + device.id +
16                         " for user " + newDoc._id});
17             }
19             device_ids.push(device.id);
21             if(device_uids.indexOf(device.uid) > -1)
22             {
23                 throw({forbidden: "Duplicate Device-UID " + device.uid +
24                         " for user " + newDoc._id});
25             }
27             if(!device.uid.match("^[\\w_.-]+$"))
28             {
29                 throw({forbidden: "Invalid Device-UID " + device.uid +
30                         " for user " + newDoc._id});
31             }
33             device_uids.push(device.uid);
34         }
36         for(var n in newDoc.sync_groups)
37         {
38             var group = newDoc.sync_groups[n];
40             if(group.length < 2)
41             {
42                 throw({forbidden: "Sync-Group " + n + " must contain at " +
43                         "least two devices for user " + newDoc._id});
44             }
46             for(var i in group)
47             {
48                 var device_id = group[i];
50                 if(device_ids.indexOf(device_id) < 0)
51                 {
52                     throw({forbidden: "Invalid Device-Id " + device_id +
53                             " in Sync-Group " + n + " for user " +
54                             newDoc._id});
55                 }
56             }
57         }
58     }