Browse Source

implement logout feature

PHP-GTK3
yggverse 4 months ago
parent
commit
f6812c9dc2
  1. 142
      src/Entity/Browser/Container/Page/Auth.php
  2. 47
      src/Entity/Browser/Container/Page/Auth/Option/Identity.php

142
src/Entity/Browser/Container/Page/Auth.php

@ -30,7 +30,7 @@ class Auth @@ -30,7 +30,7 @@ class Auth
// Defaults
public const DEFAULT_RESPONSE = GtkResponseType::CANCEL;
public const FORMAT_SECONDARY_TEXT = 'Select identity';
public const MESSAGE_FORMAT = 'Authorization';
public const MESSAGE_FORMAT = 'Auth';
public const MARGIN = 8;
public const SPACING = 1;
@ -71,6 +71,13 @@ class Auth @@ -71,6 +71,13 @@ class Auth
$this::SPACING
);
// Add separator
$content->add(
new GtkSeparator(
GtkOrientation::VERTICAL
)
);
// Init new certificate option
$this->_options[
Auth\Option\Identity::ID_CRT_NEW
@ -96,7 +103,7 @@ class Auth @@ -96,7 +103,7 @@ class Auth
Auth\Option\Identity::ID_CRT_NEW
]->useName();
// Search database for auth records
// Build records from database
foreach ($this->page->container->browser->database->auth->like(
sprintf(
'%s%%',
@ -107,28 +114,48 @@ class Auth @@ -107,28 +114,48 @@ class Auth
// Get related identity records
if ($identity = $this->page->container->browser->database->identity->get($auth->identity))
{
$this->_options[$identity->id] = new Auth\Option\Identity(
$this->_options[
$identity->id
] = new Auth\Option\Identity(
$this
);
$this->_options[$identity->id]->setGroup(
$this->_options[
$identity->id
]->setGroup(
$this->_options[
Auth\Option\Identity::ID_CRT_NEW
]
);
$this->_options[$identity->id]->setLabel(
$this->_options[
$identity->id
]->setLabel(
$identity->id,
$identity->name
);
}
}
// Append separator
$content->add(
new GtkSeparator(
GtkOrientation::VERTICAL
)
// Append logout option
$this->_options[
Auth\Option\Identity::ID_LOG_OUT
] = new Auth\Option\Identity(
$this
);
$this->_options[
Auth\Option\Identity::ID_LOG_OUT
]->setGroup(
$this->_options[
Auth\Option\Identity::ID_CRT_NEW
]
);
$this->_options[
Auth\Option\Identity::ID_LOG_OUT
]->setLabel(
Auth\Option\Identity::ID_LOG_OUT
);
// Build options list
@ -173,7 +200,7 @@ class Auth @@ -173,7 +200,7 @@ class Auth
}
}
// Append empty line separator
// Add final separator
$content->add(
new GtkLabel
);
@ -189,56 +216,71 @@ class Auth @@ -189,56 +216,71 @@ class Auth
{
if ($option->gtk->get_active())
{
// Logout previous identities for this request
$this->page->container->browser->database->auth->logout(
$this->page->navbar->request->getValue()
);
// Activate existing identity
if ($id)
// Route ID
switch ($id)
{
// Add new auth record
$this->page->container->browser->database->auth->add(
$id,
$this->page->navbar->request->getValue()
);
}
case Auth\Option\Identity::ID_LOG_OUT:
// Generate new identity
else
{
// Detect driver
switch (true)
{
case mb_strtolower(
parse_url(
// Logout previous session
$this->page->container->browser->database->auth->logout(
$this->page->navbar->request->getValue()
);
break;
case Auth\Option\Identity::ID_CRT_NEW:
// Logout previous session
$this->page->container->browser->database->auth->logout(
$this->page->navbar->request->getValue()
);
// Detect identity driver
switch (true)
{
case parse_url(
$this->page->navbar->request->getValue(),
PHP_URL_SCHEME
)
) == 'gemini':
) == 'gemini':
// Init identity model
$identity = new Gemini;
// Add new auth record
$this->page->container->browser->database->auth->add(
$this->page->container->browser->database->identity->add(
$identity->crt(),
$identity->key(),
$option->name ? $option->name->getValue() : null
),
$this->page->navbar->request->getValue()
);
// Init identity model
$identity = new Gemini;
break;
// Add new auth record
$this->page->container->browser->database->auth->add(
$this->page->container->browser->database->identity->add(
$identity->crt(),
$identity->key(),
$option->name ? $option->name->getValue() : null
),
$this->page->navbar->request->getValue()
);
default:
break;
throw new Exception;
}
default:
break;
throw new Exception;
}
default:
// Logout previous session
$this->page->container->browser->database->auth->logout(
$this->page->navbar->request->getValue()
);
// Add new auth record
$this->page->container->browser->database->auth->add(
$id,
$this->page->navbar->request->getValue()
);
}
}
break;
}
}
$this->destroy();

47
src/Entity/Browser/Container/Page/Auth/Option/Identity.php

@ -26,7 +26,9 @@ class Identity @@ -26,7 +26,9 @@ class Identity
public const LABEL_DEFAULT = '#%d (%s)';
public const LABEL_NO_NAME = '#%d (no name)';
public const LABEL_CRT_NEW = 'Create new for this resource';
public const LABEL_LOG_OUT = 'Log out..';
public const ID_LOG_OUT =-1;
public const ID_CRT_NEW = 0; // free < 0 > reserved by DB
public function __construct(
@ -76,25 +78,36 @@ class Identity @@ -76,25 +78,36 @@ class Identity
?string $label = null
): void
{
if ($id)
switch ($id)
{
$this->gtk->set_label(
$label ? sprintf(
$this::LABEL_DEFAULT,
$id,
$label
) : sprintf(
$this::LABEL_NO_NAME,
$id
)
);
}
case $this::ID_LOG_OUT:
else
{
$this->gtk->set_label(
$this::LABEL_CRT_NEW
);
$this->gtk->set_label(
$this::LABEL_LOG_OUT
);
break;
case $this::ID_CRT_NEW:
$this->gtk->set_label(
$this::LABEL_CRT_NEW
);
break;
default: // DB
$this->gtk->set_label(
$label ? sprintf(
$this::LABEL_DEFAULT,
$id,
$label
) : sprintf(
$this::LABEL_NO_NAME,
$id
)
);
}
}

Loading…
Cancel
Save