mirror of
https://github.com/nextcloud/server.git
synced 2026-02-18 18:28:50 -05:00
Cleanup oauth2 admin settings
- Use more vue components - Add link to doc Signed-off-by: Carl Schwan <carl@carlschwan.eu>
This commit is contained in:
parent
d3f66e2310
commit
53db418ee9
8 changed files with 66 additions and 29 deletions
|
|
@ -28,21 +28,23 @@ namespace OCA\OAuth2\Settings;
|
|||
|
||||
use OCA\OAuth2\Db\ClientMapper;
|
||||
use OCP\AppFramework\Http\TemplateResponse;
|
||||
use OCP\IInitialStateService;
|
||||
use OCP\AppFramework\Services\IInitialState;
|
||||
use OCP\Settings\ISettings;
|
||||
use OCP\IURLGenerator;
|
||||
|
||||
class Admin implements ISettings {
|
||||
private IInitialState $initialState;
|
||||
private ClientMapper $clientMapper;
|
||||
private IURLGenerator $urlGenerator;
|
||||
|
||||
/** @var IInitialStateService */
|
||||
private $initialStateService;
|
||||
|
||||
/** @var ClientMapper */
|
||||
private $clientMapper;
|
||||
|
||||
public function __construct(IInitialStateService $initialStateService,
|
||||
ClientMapper $clientMapper) {
|
||||
$this->initialStateService = $initialStateService;
|
||||
public function __construct(
|
||||
IInitialState $initialState,
|
||||
ClientMapper $clientMapper,
|
||||
IURLGenerator $urlGenerator
|
||||
) {
|
||||
$this->initialState = $initialState;
|
||||
$this->clientMapper = $clientMapper;
|
||||
$this->urlGenerator = $urlGenerator;
|
||||
}
|
||||
|
||||
public function getForm(): TemplateResponse {
|
||||
|
|
@ -58,7 +60,8 @@ class Admin implements ISettings {
|
|||
'clientSecret' => $client->getSecret(),
|
||||
];
|
||||
}
|
||||
$this->initialStateService->provideInitialState('oauth2', 'clients', $result);
|
||||
$this->initialState->provideInitialState('clients', $result);
|
||||
$this->initialState->provideInitialState('oauth2-doc-link', $this->urlGenerator->linkToDocs('admin-oauth2'));
|
||||
|
||||
return new TemplateResponse(
|
||||
'oauth2',
|
||||
|
|
|
|||
|
|
@ -20,11 +20,9 @@
|
|||
-
|
||||
-->
|
||||
<template>
|
||||
<div id="oauth2" class="section">
|
||||
<h2>{{ t('oauth2', 'OAuth 2.0 clients') }}</h2>
|
||||
<p class="settings-hint">
|
||||
{{ t('oauth2', 'OAuth 2.0 allows external services to request access to {instanceName}.', { instanceName: OC.theme.name}) }}
|
||||
</p>
|
||||
<SettingsSection :title="t('oauth2', 'OAuth 2.0 clients')"
|
||||
:description="t('oauth2', 'OAuth 2.0 allows external services to request access to {instanceName}.', { instanceName })"
|
||||
:doc-url="oauthDocLink">
|
||||
<table v-if="clients.length > 0" class="grid">
|
||||
<thead>
|
||||
<tr>
|
||||
|
|
@ -56,20 +54,28 @@
|
|||
type="url"
|
||||
name="redirectUri"
|
||||
:placeholder="t('oauth2', 'Redirection URI')">
|
||||
<input type="submit" class="button" :value="t('oauth2', 'Add')">
|
||||
<Button class="inline-button">
|
||||
{{ t('oauth2', 'Add') }}
|
||||
</Button>
|
||||
</form>
|
||||
</div>
|
||||
</SettingsSection>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import axios from '@nextcloud/axios'
|
||||
import OAuthItem from './components/OAuthItem'
|
||||
import { generateUrl } from '@nextcloud/router'
|
||||
import { getCapabilities } from '@nextcloud/capabilities'
|
||||
import SettingsSection from '@nextcloud/vue/dist/Components/SettingsSection'
|
||||
import Button from '@nextcloud/vue/dist/Components/Button'
|
||||
import { loadState } from '@nextcloud/initial-state'
|
||||
|
||||
export default {
|
||||
name: 'App',
|
||||
components: {
|
||||
OAuthItem,
|
||||
SettingsSection,
|
||||
Button,
|
||||
},
|
||||
props: {
|
||||
clients: {
|
||||
|
|
@ -85,8 +91,14 @@ export default {
|
|||
errorMsg: '',
|
||||
error: false,
|
||||
},
|
||||
oauthDocLink: loadState('oauth2', 'oauth2-doc-link'),
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
instanceName() {
|
||||
return getCapabilities().theming.name
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
deleteClient(id) {
|
||||
axios.delete(generateUrl('apps/oauth2/clients/{id}', { id }))
|
||||
|
|
@ -122,4 +134,10 @@ export default {
|
|||
table {
|
||||
max-width: 800px;
|
||||
}
|
||||
|
||||
/** Overwrite button height and position to be aligned with the text input */
|
||||
.inline-button {
|
||||
min-height: 34px !important;
|
||||
display: inline-flex !important;
|
||||
}
|
||||
</style>
|
||||
|
|
|
|||
|
|
@ -42,14 +42,29 @@
|
|||
</table>
|
||||
</td>
|
||||
<td class="action-column">
|
||||
<span><a class="icon-delete has-tooltip" :title="t('oauth2', 'Delete')" @click="$emit('delete', id)" /></span>
|
||||
<Button type="tertiary-no-background"
|
||||
:aria-label="t('oauth2', 'Delete')"
|
||||
@click="$emit('delete', id)">
|
||||
<template #icon>
|
||||
<Delete :size="20"
|
||||
:title="t('oauth2', 'Delete')" />
|
||||
</template>
|
||||
</Button>
|
||||
</td>
|
||||
</tr>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
import Delete from 'vue-material-design-icons/Delete'
|
||||
import Button from '@nextcloud/vue/dist/Components/Button'
|
||||
|
||||
export default {
|
||||
name: 'OAuthItem',
|
||||
components: {
|
||||
Delete,
|
||||
Button,
|
||||
},
|
||||
props: {
|
||||
client: {
|
||||
type: Object,
|
||||
|
|
|
|||
|
|
@ -26,7 +26,8 @@ namespace OCA\OAuth2\Tests\Settings;
|
|||
use OCA\OAuth2\Db\ClientMapper;
|
||||
use OCA\OAuth2\Settings\Admin;
|
||||
use OCP\AppFramework\Http\TemplateResponse;
|
||||
use OCP\IInitialStateService;
|
||||
use OCP\AppFramework\Services\IInitialState;
|
||||
use OCP\IURLGenerator;
|
||||
use PHPUnit\Framework\MockObject\MockObject;
|
||||
use Test\TestCase;
|
||||
|
||||
|
|
@ -36,7 +37,7 @@ class AdminTest extends TestCase {
|
|||
private $admin;
|
||||
|
||||
/** @var IInitialStateService|MockObject */
|
||||
private $initialStateService;
|
||||
private $initialState;
|
||||
|
||||
/** @var ClientMapper|MockObject */
|
||||
private $clientMapper;
|
||||
|
|
@ -44,10 +45,10 @@ class AdminTest extends TestCase {
|
|||
protected function setUp(): void {
|
||||
parent::setUp();
|
||||
|
||||
$this->initialStateService = $this->createMock(IInitialStateService::class);
|
||||
$this->initialState = $this->createMock(IInitialState::class);
|
||||
$this->clientMapper = $this->createMock(ClientMapper::class);
|
||||
|
||||
$this->admin = new Admin($this->initialStateService, $this->clientMapper);
|
||||
$this->admin = new Admin($this->initialState, $this->clientMapper, $this->createMock(IURLGenerator::class));
|
||||
}
|
||||
|
||||
public function testGetForm() {
|
||||
|
|
|
|||
4
dist/core-common.js
vendored
4
dist/core-common.js
vendored
File diff suppressed because one or more lines are too long
2
dist/core-common.js.map
vendored
2
dist/core-common.js.map
vendored
File diff suppressed because one or more lines are too long
4
dist/oauth2-oauth2.js
vendored
4
dist/oauth2-oauth2.js
vendored
File diff suppressed because one or more lines are too long
2
dist/oauth2-oauth2.js.map
vendored
2
dist/oauth2-oauth2.js.map
vendored
File diff suppressed because one or more lines are too long
Loading…
Reference in a new issue