diff --git a/app/routes/settings.coffee b/app/routes/settings.coffee
index 33d63f16..76889e85 100644
--- a/app/routes/settings.coffee
+++ b/app/routes/settings.coffee
@@ -42,12 +42,31 @@ Route = TravisRoute.extend
response.active
);
+ hasPushAccess: ->
+ repoId = parseInt @modelFor('repo').get('id')
+ pushAccess = true
+
+ Ajax.get '/users/permissions', (data) =>
+
+ admin = data.admin.filter (item) ->
+ return item == repoId
+ push = data.push.filter (item) ->
+ return item == repoId
+ pull = data.pull.filter (item) ->
+ return item == repoId
+
+ if Ember.isEmpty admin && Ember.isEmpty push && !Ember.isEmpty pull
+ pushAccess = false
+
+ pushAccess
+
model: () ->
return Ember.RSVP.hash({
settings: @modelFor('repo').fetchSettings(),
envVars: this.fetchEnvVars(),
sshKey: this.fetchSshKey(),
customSshKey: this.fetchCustomSshKey(),
+ hasPushAccess: this.hasPushAccess(),
repositoryActive: this.fetchRepositoryActiveFlag()
});
diff --git a/app/templates/components/ssh-key.hbs b/app/templates/components/ssh-key.hbs
index 91b8cadf..6120f9aa 100644
--- a/app/templates/components/ssh-key.hbs
+++ b/app/templates/components/ssh-key.hbs
@@ -11,12 +11,19 @@
{{#if isDeleting}}
{{loading-indicator}}
{{else}}
-
+ {{#if pushAccess}}
+
+ {{else}}
+
+ {{/if}}
{{/if}}
{{else}}
diff --git a/app/templates/settings.hbs b/app/templates/settings.hbs
index 0fdaecb0..60e25c6d 100644
--- a/app/templates/settings.hbs
+++ b/app/templates/settings.hbs
@@ -30,12 +30,19 @@
SSH Key
{{#if model.customSshKey}}
- {{ssh-key key=model.customSshKey sshKeyDeleted="sshKeyDeleted"}}
+ {{ssh-key key=model.customSshKey sshKeyDeleted="sshKeyDeleted" pushAccess=model.hasPushAccess}}
{{else}}
{{ssh-key key=model.sshKey}}
- {{add-ssh-key repo=repo sshKeyAdded="sshKeyAdded"}}
+
+ {{#if model.hasPushAccess}}
+ {{add-ssh-key repo=repo sshKeyAdded="sshKeyAdded"}}
+ {{/if}}
{{/if}}
+ {{#unless model.hasPushAccess}}
+ You don't have sufficient permissons to add or remove ssh keys on this repository.
+ {{/unless}}
+
{{/if}}
{{!--
diff --git a/tests/integration/components/ssh-key-test.js b/tests/integration/components/ssh-key-test.js
index 0844f31b..ebdf5390 100644
--- a/tests/integration/components/ssh-key-test.js
+++ b/tests/integration/components/ssh-key-test.js
@@ -41,7 +41,7 @@ test('it renders the custom ssh key if custom key is set', function(assert) {
});
-test('it deletes a custom key', function(assert) {
+test('it deletes a custom key if permissions are right', function(assert) {
assert.expect(1);
var store = this.container.lookup('store:main');
@@ -52,7 +52,7 @@ test('it deletes a custom key', function(assert) {
});
this.set('key', key);
- this.render(hbs`{{ssh-key key=key sshKeyDeleted="sshKeyDeleted"}}`);
+ this.render(hbs`{{ssh-key key=key sshKeyDeleted="sshKeyDeleted" pushAccess=true}}`);
this.on('sshKeyDeleted', function() {});
this.$('.ssh-key-action a').click();
@@ -60,3 +60,20 @@ test('it deletes a custom key', function(assert) {
assert.ok(key.get('isDeleted'), 'key should be deleted');
});
+
+test('it does not delete the custom key if permissions are insufficient', function(assert) {
+ assert.expect(1);
+
+ var store = this.container.lookup('store:main');
+
+ var key;
+ Ember.run(function() {
+ key = store.push('sshKey', {description: 'fookey', fingerprint: 'somethingthing', id: 1});
+ });
+
+ this.set('key', key);
+ this.render(hbs`{{ssh-key key=key sshKeyDeleted="sshKeyDeleted" pushAccess=false}}`);
+
+ assert.ok(Ember.isEmpty(this.$('.ssh-key-action').find('a')), 'delete link should not be displayed');
+
+});
\ No newline at end of file