1 package org
.argeo
.security
.ui
.keyring
;
3 import java
.security
.AccessController
;
7 import javax
.security
.auth
.Subject
;
8 import javax
.security
.auth
.callback
.Callback
;
9 import javax
.security
.auth
.callback
.CallbackHandler
;
10 import javax
.security
.auth
.callback
.PasswordCallback
;
11 import javax
.security
.auth
.login
.LoginException
;
12 import javax
.security
.auth
.spi
.LoginModule
;
14 import org
.apache
.commons
.logging
.LogConfigurationException
;
15 import org
.argeo
.util
.crypto
.PasswordBasedEncryption
;
17 public class KeyringLoginModule
implements LoginModule
{
18 private Subject subject
;
19 private CallbackHandler callbackHandler
;
20 private PasswordBasedEncryption passwordBasedEncryption
;
22 public void initialize(Subject subject
, CallbackHandler callbackHandler
,
23 Map
<String
, ?
> sharedState
, Map
<String
, ?
> options
) {
24 this.subject
= subject
;
25 if (subject
== null) {
26 subject
= Subject
.getSubject(AccessController
.getContext());
28 this.callbackHandler
= callbackHandler
;
31 public boolean login() throws LoginException
{
32 Set
<PasswordBasedEncryption
> pbes
= subject
33 .getPrivateCredentials(PasswordBasedEncryption
.class);
36 PasswordCallback pc
= new PasswordCallback("Master password", false);
37 Callback
[] callbacks
= { pc
};
39 callbackHandler
.handle(callbacks
);
40 passwordBasedEncryption
= new PasswordBasedEncryption(
42 } catch (Exception e
) {
43 throw new LogConfigurationException(e
);
48 public boolean commit() throws LoginException
{
49 if (passwordBasedEncryption
!= null)
50 subject
.getPrivateCredentials(PasswordBasedEncryption
.class).add(
51 passwordBasedEncryption
);
55 public boolean abort() throws LoginException
{
59 public boolean logout() throws LoginException
{
60 Set
<PasswordBasedEncryption
> pbes
= subject
61 .getPrivateCredentials(PasswordBasedEncryption
.class);