summaryrefslogtreecommitdiff
path: root/src/fauxton/app/core/couchdbSession.js
blob: 93bfd8ac6699b5984eadd24ae82e0aeae7cbd036 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
// the License at
//
//   http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations under
// the License.

define([
  "core/base"
],
function (FauxtonAPI) {
  var CouchdbSession = {
    Session: FauxtonAPI.Model.extend({
      url: '/_session',

      user: function () {
        var userCtx = this.get('userCtx');

        if (!userCtx || !userCtx.name) { return null; }

        return {
          name: userCtx.name,
          roles: userCtx.roles
        };
      },

      fetchUser: function (opt) {
        var that = this,
        currentUser = this.user();

        return this.fetchOnce(opt).then(function () {
          var user = that.user();

          // Notify anyone listening on these events that either a user has changed
          // or current user is the same
          if (currentUser !== user) {
            that.trigger('session:userChanged');
          } else {
            that.trigger('session:userFetched');
          }

          // this will return the user as a value to all function that calls done on this
          // eg. session.fetchUser().done(user) { .. do something with user ..}
          return user; 
        });
      }
    })
  };

  return CouchdbSession;
});