Signed-off-by: Robin Appelman <icewind@owncloud.com>tags/v11.0RC2
@@ -151,6 +151,10 @@ class DefaultToken extends Entity implements IToken { | |||
} | |||
public function setScope($scope) { | |||
return parent::setScope(json_encode($scope)); | |||
if (is_string($scope)) { | |||
$this->scope = $scope; | |||
} else { | |||
return parent::setScope(json_encode($scope)); | |||
} | |||
} | |||
} |
@@ -83,6 +83,7 @@ class DefaultTokenMapper extends Mapper { | |||
if ($data === false) { | |||
throw new DoesNotExistException('token does not exist'); | |||
} | |||
; | |||
return DefaultToken::fromRow($data); | |||
} | |||
@@ -67,13 +67,25 @@ interface IToken extends JsonSerializable { | |||
public function getLastCheck(); | |||
/** | |||
* Get the timestamp of the last password check | |||
* Set the timestamp of the last password check | |||
* | |||
* @param int $time | |||
*/ | |||
public function setLastCheck($time); | |||
/** | |||
* Get the authentication scope for this token | |||
* | |||
* If the scope is null no limitations exist for the token | |||
* | |||
* @return array|null | |||
*/ | |||
public function getScope(); | |||
/** | |||
* Set the authentication scope for this token | |||
* | |||
* @param array|null $scope | |||
*/ | |||
public function setScope($scope); | |||
} |
@@ -149,6 +149,12 @@ table.nostyle td { padding: 0.2em 0; } | |||
padding: 10px 10px 10px 0; | |||
} | |||
#sessions .token-list td.icon, | |||
#apppasswords .token-list td.icon { | |||
width: 16px; | |||
padding: 10px; | |||
} | |||
#sessions .token-list td, | |||
#apppasswords .token-list td { | |||
border-top: 1px solid #DDD; | |||
@@ -162,8 +168,8 @@ table.nostyle td { padding: 0.2em 0; } | |||
#apppasswords tr *:nth-child(2) { | |||
text-align: right; | |||
} | |||
#sessions .token-list td a.icon-delete, | |||
#apppasswords .token-list td a.icon-delete { | |||
#sessions .token-list td a.icon, | |||
#apppasswords .token-list td a.icon { | |||
display: block; | |||
opacity: 0.6; | |||
} |
@@ -29,11 +29,16 @@ | |||
'<tr data-id="{{id}}">' | |||
+ '<td class="has-tooltip" title="{{title}}"><span class="token-name">{{name}}</span></td>' | |||
+ '<td><span class="last-activity has-tooltip" title="{{lastActivityTime}}">{{lastActivity}}</span></td>' | |||
+ '<td class="icon">' | |||
+ '{{#if canScope}}' | |||
+ '<a class="icon icon-settings has-tooltip" title="' + t('core', 'Configure') + '"></a>' | |||
+ '{{/if}}' | |||
+ '</td>' | |||
+ '<td class="icon">' | |||
+ '{{#if canDelete}}' | |||
+ '<td><a class="icon-delete has-tooltip" title="' + t('core', 'Disconnect') + '"></a></td>' | |||
+ '{{else}}' | |||
+ '<td></td>' | |||
+ '<a class="icon icon-delete has-tooltip" title="' + t('core', 'Disconnect') + '"></a>' | |||
+ '{{/if}}' | |||
+ '</td>' | |||
+ '<tr>'; | |||
var SubView = OC.Backbone.View.extend({ | |||
@@ -78,7 +83,7 @@ | |||
this._toggleHeader(tokens.length > 0); | |||
tokens.forEach(function (token) { | |||
var viewData = this._formatViewData(token.toJSON()); | |||
var viewData = this._formatViewData(token); | |||
var html = _this.template(viewData); | |||
var $html = $(html); | |||
$html.find('.has-tooltip').tooltip({container: 'body'}); | |||
@@ -94,10 +99,12 @@ | |||
this.$('.hidden-when-empty').toggleClass('hidden', !show); | |||
}, | |||
_formatViewData: function (viewData) { | |||
_formatViewData: function (token) { | |||
var viewData = token.toJSON(); | |||
var ts = viewData.lastActivity * 1000; | |||
viewData.lastActivity = OC.Util.relativeModifiedDate(ts); | |||
viewData.lastActivityTime = OC.Util.formatDate(ts, 'LLL'); | |||
viewData.canScope = token.get('type') === '1'; | |||
// preserve title for cases where we format it further | |||
viewData.title = viewData.name; |
@@ -220,6 +220,7 @@ if($_['passwordChangeSupported']) { | |||
<th><?php p($l->t('Name'));?></th> | |||
<th><?php p($l->t('Last activity'));?></th> | |||
<th></th> | |||
<th></th> | |||
</tr> | |||
</thead> | |||
<tbody class="token-list icon-loading"> |