diff --git a/assets/scripts/app/app.coffee b/assets/scripts/app/app.coffee index 9e0d17cd..6514083f 100644 --- a/assets/scripts/app/app.coffee +++ b/assets/scripts/app/app.coffee @@ -24,10 +24,11 @@ unless window.TravisApplication requests: Travis.Request env_var: Travis.EnvVar env_vars: Travis.EnvVar + ssh_key: Travis.SshKey ).property() modelClasses: (-> - [Travis.User, Travis.Build, Travis.Job, Travis.Repo, Travis.Commit, Travis.Worker, Travis.Account, Travis.Broadcast, Travis.Hook, Travis.Annotation, Travis.Request, Travis.EnvVar] + [Travis.User, Travis.Build, Travis.Job, Travis.Repo, Travis.Commit, Travis.Worker, Travis.Account, Travis.Broadcast, Travis.Hook, Travis.Annotation, Travis.Request, Travis.EnvVar, Travis.SshKey] ).property() setup: -> @@ -38,6 +39,9 @@ unless window.TravisApplication Travis.EnvVar.url = "/settings/env_vars" Travis.EnvVar.adapter = Travis.EnvVarsAdapter.create() + Travis.SshKey.url = "/settings/ssh_key" + Travis.SshKey.adapter = Travis.SshKeyAdapter.create() + @slider = new Travis.Slider() @pusher = new Travis.Pusher(Travis.config.pusher_key) if Travis.config.pusher_key @tailing = new Travis.Tailing($(window), '#tail', '#log') diff --git a/assets/scripts/app/controllers.coffee b/assets/scripts/app/controllers.coffee index 41b312bc..9e6534d8 100644 --- a/assets/scripts/app/controllers.coffee +++ b/assets/scripts/app/controllers.coffee @@ -69,3 +69,4 @@ require 'controllers/requests' require 'controllers/env_var' require 'controllers/env_vars' require 'controllers/env_var_new' +require 'controllers/ssh_key' diff --git a/assets/scripts/app/controllers/ssh_key.coffee b/assets/scripts/app/controllers/ssh_key.coffee new file mode 100644 index 00000000..9dbcd473 --- /dev/null +++ b/assets/scripts/app/controllers/ssh_key.coffee @@ -0,0 +1,29 @@ +Travis.SshKeyController = Ember.ObjectController.extend + isEditing: false + defaultKey: null + + needs: ['repoSettings'] + repo: Ember.computed.alias('controllers.repoSettings.model') + + actions: + add: -> + model = Travis.SshKey.create(id: @get('repo.id')) + @set('model', model) + @set('isEditing', true) + + save: -> + @get('model').save().then => + @set('isEditing', false) + + delete: -> + @get('model').deleteRecord().then => + @set('model', null) + + cancel: -> + if model = @get('model') + if model.get('isNew') + @set('model', null) + @set('isEditing', false) + + edit: -> + @set('isEditing', true) diff --git a/assets/scripts/app/helpers/handlebars.coffee b/assets/scripts/app/helpers/handlebars.coffee index bf9c0a2e..15146547 100644 --- a/assets/scripts/app/helpers/handlebars.coffee +++ b/assets/scripts/app/helpers/handlebars.coffee @@ -6,7 +6,7 @@ safe = (string) -> Travis.Tab = Ember.Object.extend url: (-> id = @get('id') - if id == 'env_vars' + if id == 'env_vars' || id == 'ssh_key' id else "repo.settings.#{id}" diff --git a/assets/scripts/app/models.coffee b/assets/scripts/app/models.coffee index 93fa69b4..937eb98b 100644 --- a/assets/scripts/app/models.coffee +++ b/assets/scripts/app/models.coffee @@ -14,3 +14,4 @@ require 'models/request' require 'models/user' require 'models/worker' require 'models/env_var' +require 'models/ssh_key' diff --git a/assets/scripts/app/models/repo.coffee b/assets/scripts/app/models/repo.coffee index ce3bc3b8..91d12919 100644 --- a/assets/scripts/app/models/repo.coffee +++ b/assets/scripts/app/models/repo.coffee @@ -23,6 +23,10 @@ require 'travis/model' } ).property('lastBuildId', 'lastBuildNumber') + sshKey: (-> + Travis.SshKey.find(@get('id')) + ) + envVars: (-> id = @get('id') envVars = Travis.EnvVar.find repository_id: id @@ -42,7 +46,6 @@ require 'travis/model' array ).property() - allBuilds: (-> recordArray = Ember.RecordArray.create({ modelClass: Travis.Build, content: Ember.A([]) }) Travis.Build.registerRecordArray(recordArray) diff --git a/assets/scripts/app/models/ssh_key.coffee b/assets/scripts/app/models/ssh_key.coffee new file mode 100644 index 00000000..59f05b19 --- /dev/null +++ b/assets/scripts/app/models/ssh_key.coffee @@ -0,0 +1,13 @@ +Travis.SshKey = Travis.Model.extend + id: Ember.attr('string') + value: Ember.attr('string') + description: Ember.attr('string') + fingerprint: Ember.attr('string') + + isPropertyLoaded: (key) -> + if key == 'value' + return true + else + @_super(key) + + diff --git a/assets/scripts/app/routes.coffee b/assets/scripts/app/routes.coffee index d1aee059..0e988b70 100644 --- a/assets/scripts/app/routes.coffee +++ b/assets/scripts/app/routes.coffee @@ -67,7 +67,7 @@ Travis.Router.map -> @route 'index', path: '/' @resource 'env_vars', -> @route 'new' - @route 'ssh_key' + @resource 'ssh_key' @route 'first_sync' @route 'insufficient_oauth_permissions' @@ -369,3 +369,26 @@ Travis.EnvVarsRoute = Travis.Route.extend model: (params) -> repo = @modelFor('repo_settings') repo.get('envVars') + +Travis.SshKeyRoute = Travis.Route.extend + model: (params) -> + repo = @modelFor('repo_settings') + self = this + Travis.SshKey.fetch(repo.get('id')).then ( (result) -> result ), (xhr) -> + if xhr.status == 404 + # if there is no model, just return null. I'm not sure if this is the + # best answer, maybe we should just redirect to different route, like + # ssh_key.new or ssh_key.no_key + return null + + afterModel: (model, transition) -> + repo = @modelFor('repo_settings') + Travis.ajax.get "/repositories/#{repo.get('id')}/key", (data) => + @defaultKey = Ember.Object.create(fingerprint: data.fingerprint) + + setupController: (controller, model) -> + @_super.apply this, arguments + + if @defaultKey + controller.set('defaultKey', @defaultKey) + @defaultKey = null diff --git a/assets/scripts/app/templates/repo/settings/ssh_key.hbs b/assets/scripts/app/templates/repo/settings/ssh_key.hbs index 257cc564..8b137891 100644 --- a/assets/scripts/app/templates/repo/settings/ssh_key.hbs +++ b/assets/scripts/app/templates/repo/settings/ssh_key.hbs @@ -1 +1 @@ -foo + diff --git a/assets/scripts/app/templates/ssh_key.hbs b/assets/scripts/app/templates/ssh_key.hbs new file mode 100644 index 00000000..79755f00 --- /dev/null +++ b/assets/scripts/app/templates/ssh_key.hbs @@ -0,0 +1,31 @@ +{{#if model}} + {{#if isEditing}} +
+ {{else}} +
+ Ssh key is set.
+ {{#if description}}
+ Description: {{description}}
+ {{/if}}
+ Fingerprint: {{fingerprint}}
+
+ You don't have any custom key set up. + Currently used key has a following fingerprint: {{defaultKey.fingerprint}} +
+ + +{{/if}} diff --git a/assets/scripts/lib/travis/adapters/ssh_key.coffee b/assets/scripts/lib/travis/adapters/ssh_key.coffee new file mode 100644 index 00000000..11a683b2 --- /dev/null +++ b/assets/scripts/lib/travis/adapters/ssh_key.coffee @@ -0,0 +1,10 @@ +Travis.SshKeyAdapter = Travis.Adapter.extend + buildURL: (klass, id, record) -> + url = @_super.apply this, arguments + + createRecord: (record) -> + url = @buildURL(record.constructor, record.get('id'), record) + self = this + @ajax(url, record.toJSON(), "PATCH").then (data) -> + self.didCreateRecord record, data + record diff --git a/assets/scripts/travis.coffee b/assets/scripts/travis.coffee index a7e68b46..207d1657 100644 --- a/assets/scripts/travis.coffee +++ b/assets/scripts/travis.coffee @@ -163,6 +163,7 @@ Ember.LinkView.reopen require 'travis/ajax' require 'travis/adapter' require 'travis/adapters/env_vars' +require 'travis/adapters/ssh_key' require 'routes' require 'auth' require 'controllers' diff --git a/public/index.html b/public/index.html index 4f5bb6dc..7311301b 100644 --- a/public/index.html +++ b/public/index.html @@ -4,7 +4,7 @@ - +