1 /*jshint indent:2, curly:true, eqeqeq:true, immed:true, latedef:true,
2 newcap:true, noarg:true, regexp:true, undef:true, strict:true, trailing:true,
4 /*global XT:true, XM:true, XV:true, Backbone:true, _:true, window:true */
9 XT.extensions.oauth2.initModels = function () {
15 XM.Oauth2client = XM.Model.extend({
17 recordType: "XM.Oauth2client",
21 defaults: function () {
34 bindEvents: function () {
35 XM.Model.prototype.bindEvents.apply(this, arguments);
36 this.on('statusChange', this.statusDidChange);
39 // clientType must not be editable once first saved.
40 statusDidChange: function () {
41 this.setReadOnly('clientType', this.getStatus() !== XM.Model.READY_NEW);
43 if (this.getStatus() === XM.Model.READY_NEW) {
44 this.set('clientID', XT.getOrganizationPath().substring(1) + "_" + XT.generateUUID());
45 // XXX the secret is only relevant for websites, but we generate it here
46 // for both because it's required to be unique on the DB level
47 // secret keys only seem to be applicable for website clients, so we might
48 // not want to make it unique
49 this.set('clientSecret', XT.generateUUID());
50 this.set('issued', new Date());
54 save: function (key, value, options) {
55 // Handle both `"key", value` and `{key: value}` -style arguments.
56 if (_.isObject(key) || _.isEmpty(key)) {
59 options = options ? _.clone(options) : {};
61 var success = options.success,
62 status = this.getStatus(),
65 options.success = function (model, resp, options) {
66 if (status === XM.Model.READY_NEW && that.get("clientType") === 'jwt bearer') {
67 // Download the private key.
68 XV.downloadURL(XT.getOrganizationPath() + '/oauth/generate-key?id=' + that.id);
71 if (success) { success(model, resp, options); }
74 // Handle both `"key", value` and `{key: value}` -style arguments.
75 if (_.isObject(key) || _.isEmpty(key)) {
79 if (status === XM.Model.READY_NEW && that.get("clientType") === 'jwt bearer') {
80 // The order of operations for a new jwt bearer is
81 // 1. Notify the user that the download is coming
83 // 3. Open the download tab.
85 // It's a little curious that 2 happens after 1, but the notify listener
86 // on the workspace gets destroyed by the time we would need it otherwise.
87 that.notify("_generatingPrivateKey".loc(), {callback: function () {
88 XM.Model.prototype.save.call(that, key, value, options);
91 XM.Model.prototype.save.call(this, key, value, options);
97 XM.Oauth2clientRedirs = XM.Model.extend({
99 recordType: "XM.Oauth2clientRedirs",
109 XM.Oauth2clientCollection = XM.Collection.extend({
110 model: XM.Oauth2client
113 XM.Oauth2clientRedirsCollection = XM.Collection.extend({
114 model: XM.Oauth2clientRedirs