00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include "qgscredentials.h"
00018 #include "qgslogger.h"
00019
00020 #include <QTextIStream>
00021 #include <QTextOStream>
00022
00023 QgsCredentials *QgsCredentials::smInstance = 0;
00024
00025 void QgsCredentials::setInstance( QgsCredentials *theInstance )
00026 {
00027 if ( smInstance )
00028 QgsDebugMsg( "already registered an instance of QgsCredentials" );
00029
00030 smInstance = theInstance;
00031 }
00032
00033 QgsCredentials *QgsCredentials::instance()
00034 {
00035 if ( smInstance )
00036 return smInstance;
00037
00038 return new QgsCredentialsConsole();
00039 }
00040
00041 QgsCredentials::~QgsCredentials()
00042 {
00043 }
00044
00045 bool QgsCredentials::get( QString realm, QString &username, QString &password, QString message )
00046 {
00047 if ( mCredentialCache.contains( realm ) )
00048 {
00049 QPair<QString, QString> credentials = mCredentialCache.take( realm );
00050 username = credentials.first;
00051 password = credentials.second;
00052 QgsDebugMsg( QString( "retrieved realm:%1 username:%2 password:%3" ).arg( realm ).arg( username ).arg( password ) );
00053 return true;
00054 }
00055 else if ( request( realm, username, password, message ) )
00056 {
00057 QgsDebugMsg( QString( "requested realm:%1 username:%2 password:%3" ).arg( realm ).arg( username ).arg( password ) );
00058 return true;
00059 }
00060 else
00061 {
00062 QgsDebugMsg( QString( "unset realm:%1" ).arg( realm ) );
00063 return false;
00064 }
00065 }
00066
00067 void QgsCredentials::put( QString realm, QString username, QString password )
00068 {
00069 QgsDebugMsg( QString( "inserting realm:%1 username:%2 password:%3" ).arg( realm ).arg( username ).arg( password ) );
00070 mCredentialCache.insert( realm, QPair<QString, QString>( username, password ) );
00071 }
00072
00074
00075
00076 QgsCredentialsConsole::QgsCredentialsConsole()
00077 {
00078 setInstance( this );
00079 }
00080
00081 bool QgsCredentialsConsole::request( QString realm, QString &username, QString &password, QString message )
00082 {
00083 QTextStream in( stdin, QIODevice::ReadOnly );
00084 QTextStream out( stdout, QIODevice::WriteOnly );
00085
00086 out << "credentials for " << realm << endl;
00087 if ( !message.isEmpty() )
00088 out << "message: " << message << endl;
00089 out << "username: ";
00090 in >> username;
00091 out << "password: ";
00092 in >> password;
00093
00094 return true;
00095 }