Password authentication (stage 1 - without xosso-terminal)
[urpo] / src / urpoprocess.cpp
index 600e306..7900617 100644 (file)
@@ -23,6 +23,8 @@
 #include "urpoprocess.h"
 #include "urpoconnection.h"
 #include <QTimer>
+#include <QInputDialog>
+#include <QLineEdit>
 
 
 int const UrpoProcess::DEFAULTTIMEOUT;
@@ -59,7 +61,33 @@ void UrpoProcess::timeout()
 {
     // If process is still running, it means timeout!
     if( status_ == Running)
-        fail(Timeout);
+    {
+        // Read output
+        QByteArray bytes = qprocess_.readAllStandardOutput();
+        QString string(bytes);
+        sendDebugMessage(string);
+
+        if(string.contains("'s password:") || string.contains("passphrase:"))
+        {
+            // Try to ask password
+            if( storedPassword_.isEmpty())
+            {
+                if( string.contains("'s password:") )
+                    storedPassword_ = QInputDialog::getText( 0, tr("Server ask password"), tr("Password:"), QLineEdit::PasswordEchoOnEdit );
+                else
+                    storedPassword_ = QInputDialog::getText( 0, tr("Server ask passphrase"), tr("Passphrase:"), QLineEdit::PasswordEchoOnEdit );
+            }
+            qprocess_.write(storedPassword_.toAscii());
+            qprocess_.write("\n");
+
+            QTimer::singleShot( getTimeout(), this, SLOT(timeout()) );
+            status_ = PasswdRunning;
+        }
+        else
+            fail( Timeout );
+    }
+    else if( status_ == PasswdRunning )
+        fail(Timeout);  // FAILS !!!
 }
 
 void UrpoProcess::start(const QString &command)
@@ -104,6 +132,8 @@ void UrpoProcess::processFinished(int exitCode,QProcess::ExitStatus exitStatus)
         output_=string.split("\n");
         status_=Successed;
         emit finished(true);
+
+
     }
 }