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

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

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