Skip to content

Commit

Permalink
Move OAuth settings to Integration settings
Browse files Browse the repository at this point in the history
  • Loading branch information
partydragen committed Dec 15, 2023
1 parent b3300b2 commit 7f211d4
Show file tree
Hide file tree
Showing 5 changed files with 156 additions and 134 deletions.
14 changes: 14 additions & 0 deletions core/classes/Misc/NamelessOAuth.php
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,20 @@ public function getProviders(): array {
return $this->_providers;
}

/**
* Get or create an instance of a specific provider.
*
* @param string $provider The provider name
* @return null|array An array of registered OAuth provider.
*/
public function getProvider(string $provider): ?array {
if (array_key_exists($provider, $this->_providers)) {
return $this->_providers[$provider];
}

return null;
}

/**
* Determine if OAuth is available if at least one provider is setup.
*
Expand Down
61 changes: 61 additions & 0 deletions custom/panel_templates/Default/core/integrations_edit.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,67 @@
</div>
{/if}

{if isset($OAUTH)}
<h5>{$OAUTH}</h5>
<div class="card shadow border-left-primary">
<div class="card-body">
<h5><i class="icon fa fa-info-circle"></i> {$INFO}</h5>
{$OAUTH_INFO}
</div>
</div>
<br />
<form action="" method="post">
<div class="row">
<div class="col">
<div class="card shadow mb-4">
<div class="card-body">
<div class="form-group custom-control custom-switch">
<input id="enable" name="enable"
type="checkbox" class="custom-control-input" {if $OAUTH_PROVIDER_DATA['enabled']
&& $OAUTH_PROVIDER_DATA['setup']} checked{/if} />
<label for="enable" id="enable"
class="custom-control-label">
{$OAUTH_PROVIDER_DATA['name']|ucfirst}
{if $OAUTH_PROVIDER_DATA['logo_url']}
<img src="{$OAUTH_PROVIDER_DATA['logo_url']}" alt="{$OAUTH_PROVIDER_DATA['name']|ucfirst} Logo" style="width: 16px; height: auto;">
{elseif $OAUTH_PROVIDER_DATA['icon']}
<i class="{$OAUTH_PROVIDER_DATA['icon']}"></i>
{/if}
</label>
</div>

<div class="form-group">
<label for="client-id">{$CLIENT_ID}</label>
<input type="text" name="client-id" class="form-control"
id="client-id" placeholder="Client ID"
value="{$OAUTH_PROVIDER_DATA['client_id']}">
</div>

<div class="form-group">
<label for="client-secret">{$CLIENT_SECRET}</label>
<input type="password" name="client-secret"
class="form-control" id="client-secret"
placeholder="Client Secret" value="{$OAUTH_PROVIDER_DATA['client_secret']}">
</div>

<div class="form-group">
<label for="client-url">{$REDIRECT_URL}</label>
<input type="text" class="form-control" id="client-url"
readonly value="{$OAUTH_PROVIDER_DATA['client_url']}">
</div>
</div>
</div>
</div>
</div>

<div class="form-group">
<input type="hidden" name="action" value="oauth">
<input type="hidden" name="token" value="{$TOKEN}">
<input type="submit" class="btn btn-primary" value="{$SUBMIT}">
</div>
</form>
{/if}

<!-- Spacing -->
<div style="height:1rem;"></div>

Expand Down
61 changes: 0 additions & 61 deletions custom/panel_templates/Default/core/registration.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -139,67 +139,6 @@
</div>
</div>

<h5>{$OAUTH}</h5>
<div class="card shadow border-left-primary">
<div class="card-body">
<h5><i class="icon fa fa-info-circle"></i> {$INFO}</h5>
{$OAUTH_INFO}
</div>
</div>
<br />
<form action="" method="post">
<div class="row">
{foreach from=$OAUTH_PROVIDER_DATA key="provider_name" item="provider_data"}
<div class="col">
<div class="card shadow mb-4">
<div class="card-body">
<div class="form-group custom-control custom-switch text-center">
<input id="enable-{$provider_name}" name="enable-{$provider_name}"
type="checkbox" class="custom-control-input" {if $provider_data['enabled']
&& $provider_data['setup']} checked{/if} />
<label for="enable-{$provider_name}" id="enable-{$provider_name}"
class="custom-control-label">
{$provider_name|ucfirst}
{if $provider_data['logo_url']}
<img src="{$provider_data['logo_url']}" alt="{$provider_name|ucfirst} Logo" style="width: 16px; height: auto;">
{elseif $provider_data['icon']}
<i class="{$provider_data['icon']}"></i>
{/if}
</label>
</div>

<div class="form-group">
<label for="client-id-{$provider_name}">{$CLIENT_ID}</label>
<input type="text" name="client-id-{$provider_name}" class="form-control"
id="client-id-{$provider_name}" placeholder="Client ID"
value="{$provider_data['client_id']}">
</div>

<div class="form-group">
<label for="client-secret-{$provider_name}">{$CLIENT_SECRET}</label>
<input type="password" name="client-secret-{$provider_name}"
class="form-control" id="client-secret-{$provider_name}"
placeholder="Client Secret" value="{$provider_data['client_secret']}">
</div>

<div class="form-group">
<label for="client-url-{$provider_name}">{$REDIRECT_URL}</label>
<input type="text" class="form-control" id="client-url-{$provider_name}"
readonly value="{$OAUTH_URL|replace:'{{provider}}':$provider_name}">
</div>
</div>
</div>
</div>
{/foreach}
</div>

<div class="form-group">
<input type="hidden" name="action" value="oauth">
<input type="hidden" name="token" value="{$TOKEN}">
<input type="submit" class="btn btn-primary" value="{$SUBMIT}">
</div>
</form>

<!-- Spacing -->
<div style="height:1rem;"></div>

Expand Down
47 changes: 47 additions & 0 deletions modules/Core/pages/panel/integrations.php
Original file line number Diff line number Diff line change
Expand Up @@ -57,12 +57,28 @@

if (Token::check()) {
if (Input::get('action') === 'general_settings') {
// Update general settings
DB::getInstance()->update('integrations', $integration->data()->id, [
'enabled' => Output::getClean(Input::get('enabled')),
'can_unlink' => Output::getClean(Input::get('can_unlink')),
'required' => Output::getClean(Input::get('required'))
]);

Session::flash('integrations_success', $language->get('admin', 'integration_updated_successfully'));
Redirect::to(URL::build('/panel/core/integrations/', 'integration=' . $integration->getName()));
} else if (Input::get('action') === 'oauth') {
// Update OAuth settings
$provider_name = strtolower($integration->getName());

$client_id = Input::get("client-id");
$client_secret = Input::get("client-secret");
if ($client_id && $client_secret) {
NamelessOAuth::getInstance()->setEnabled($provider_name, Input::get("enable") == 'on' ? 1 : 0);
} else {
NamelessOAuth::getInstance()->setEnabled($provider_name, 0);
}
NamelessOAuth::getInstance()->setCredentials($provider_name, $client_id, $client_secret);

Session::flash('integrations_success', $language->get('admin', 'integration_updated_successfully'));
Redirect::to(URL::build('/panel/core/integrations/', 'integration=' . $integration->getName()));
}
Expand All @@ -81,6 +97,37 @@
}
}

// OAuth integration?
$provider_name = strtolower($integration->getName());
$provider = NamelessOAuth::getInstance()->getProvider($provider_name);
if ($provider != null) {
[$client_id, $client_secret] = NamelessOAuth::getInstance()->getCredentials($provider_name);

$oauth_provider_data = [
'name' => $provider_name,
'enabled' => NamelessOAuth::getInstance()->isEnabled($provider_name),
'setup' => NamelessOAuth::getInstance()->isSetup($provider_name),
'icon' => $provider_data['icon'] ?? null,
'logo_url' => $provider_data['logo_url'] ?? null,
'client_id' => $client_id,
'client_secret' => $client_secret,
'client_url' => rtrim(URL::getSelfURL(), '/') . URL::build('/oauth', 'provider=' . $provider_name, 'non-friendly'),
];

$smarty->assign([
'OAUTH' => $language->get('admin', 'oauth'),
'OAUTH_INFO' => $language->get('admin', 'oauth_info', [
'docLinkStart' => '<a href="https://docs.namelessmc.com/en/oauth" target="_blank">',
'docLinkEnd' => '</a>'
]),
'REDIRECT_URL' => $language->get('admin', 'redirect_url'),
'CLIENT_ID' => $language->get('admin', 'client_id'),
'CLIENT_SECRET' => $language->get('admin', 'client_secret'),
'OAUTH_URL' => rtrim(URL::getSelfURL(), '/') . URL::build('/oauth', 'provider={{provider}}', 'non-friendly'),
'OAUTH_PROVIDER_DATA' => $oauth_provider_data
]);
}

$smarty->assign([
'EDITING_INTEGRATION' => $language->get('admin', 'editing_integration_x', ['integration' => Output::getClean($integration->getName())]),
'BACK' => $language->get('general', 'back'),
Expand Down

0 comments on commit 7f211d4

Please sign in to comment.