@ -28,6 +28,8 @@ import java.io.IOException;
import java.security.Principal ;
import javax.security.auth.Subject ;
import net.yacy.data.UserDB.AccessRight ;
import net.yacy.data.UserDB.Entry ;
import net.yacy.search.Switchboard ;
import net.yacy.search.SwitchboardConstants ;
@ -42,29 +44,49 @@ import org.eclipse.jetty.util.security.Credential;
* /
public class YaCyLoginService extends MappedLoginService {
@Override
protected UserIdentity loadUser ( String username ) {
/*if(username.equals("admin"))*/ {
// TODO: implement legacy credentials
final Switchboard sb = Switchboard . getSwitchboard ( ) ;
final String adminAccountBase64MD5 = sb . getConfig ( SwitchboardConstants . ADMIN_ACCOUNT_B64MD5 , "" ) ;
// in YaCy the credential hash is composed of username:pwd so the username is needed to create valid credential
// not just the password (as usually in Jetty). As the accountname for the std. adminuser is not stored a useridentity
// is created for current user (and the pwd checked against the stored username:pwd setting)
Credential credential = YaCyLegacyCredential . getCredentialsFromConfig ( username , adminAccountBase64MD5 ) ;
// TODO: YaCy user:pwd hashes should longterm likely be switched to separable username + pwd-hash entries
// and/or the standard admin account username shuld be fix = "admin"
Principal userPrincipal = new MappedLoginService . KnownUser ( username , credential ) ;
Subject subject = new Subject ( ) ;
subject . getPrincipals ( ) . add ( userPrincipal ) ;
subject . getPrivateCredentials ( ) . add ( credential ) ;
subject . setReadOnly ( ) ;
IdentityService is = getIdentityService ( ) ;
return is . newUserIdentity ( subject , userPrincipal , new String [ ] { "admin" } ) ;
}
// return null;
}
@Override
protected UserIdentity loadUser ( String username ) {
// TODO: implement legacy credentials
final Switchboard sb = Switchboard . getSwitchboard ( ) ;
String adminuser = sb . getConfig ( "adminAccount" , "admin" ) ;
if ( username . equals ( adminuser ) ) {
final String adminAccountBase64MD5 = sb . getConfig ( SwitchboardConstants . ADMIN_ACCOUNT_B64MD5 , "" ) ;
// in YaCy the credential hash is composed of username:pwd so the username is needed to create valid credential
// not just the password (as usually in Jetty). As the accountname for the std. adminuser is not stored a useridentity
// is created for current user (and the pwd checked against the stored username:pwd setting)
Credential credential = YaCyLegacyCredential . getCredentialsFromConfig ( username , adminAccountBase64MD5 ) ;
// TODO: YaCy user:pwd hashes should longterm likely be switched to separable username + pwd-hash entries
// and/or the standard admin account username shuld be fix = "admin"
Principal userPrincipal = new MappedLoginService . KnownUser ( username , credential ) ;
Subject subject = new Subject ( ) ;
subject . getPrincipals ( ) . add ( userPrincipal ) ;
subject . getPrivateCredentials ( ) . add ( credential ) ;
subject . setReadOnly ( ) ;
IdentityService is = getIdentityService ( ) ;
return is . newUserIdentity ( subject , userPrincipal , new String [ ] { AccessRight . ADMIN_RIGHT . toString ( ) } ) ;
} else { // get user data from UserDB
Entry user = sb . userDB . getEntry ( username ) ;
if ( user ! = null ) {
String [ ] role ;
if ( user . hasRight ( AccessRight . ADMIN_RIGHT ) ) {
role = new String [ ] { AccessRight . ADMIN_RIGHT . toString ( ) } ;
Credential credential = YaCyLegacyCredential . getCredentials ( username , user . getMD5EncodedUserPwd ( ) ) ;
Principal userPrincipal = new MappedLoginService . KnownUser ( username , credential ) ;
Subject subject = new Subject ( ) ;
subject . getPrincipals ( ) . add ( userPrincipal ) ;
subject . getPrivateCredentials ( ) . add ( credential ) ;
subject . setReadOnly ( ) ;
IdentityService is = getIdentityService ( ) ;
return is . newUserIdentity ( subject , userPrincipal , role ) ;
}
}
}
return null ;
}
@Override
protected void loadUsers ( ) throws IOException {