some more functions
authorkonrad <konrad@6e3c4bff-ac9f-4ac1-96c5-d2ea494d3e33>
Sat, 15 Sep 2007 13:47:54 +0000 (13:47 +0000)
committerkonrad <konrad@6e3c4bff-ac9f-4ac1-96c5-d2ea494d3e33>
Sat, 15 Sep 2007 13:47:54 +0000 (13:47 +0000)
more i18n

git-svn-id: https://silmor.de/svn/softmagic/smoke/trunk@27 6e3c4bff-ac9f-4ac1-96c5-d2ea494d3e33

src/mainwindow.cpp
src/overview.cpp
src/overview.h
src/smoke_de.ts
src/smoke_de_SAX.ts
src/webrequest.cpp
src/webrequest.h
www/machine.php

index a51d5bc..f320b51 100644 (file)
@@ -38,12 +38,12 @@ MMainWindow::MMainWindow()
        setWindowTitle("Magic Smoke");
        //create Menu Bar
        QMenuBar*mb=menuBar();
-       QMenu*m=mb->addMenu("&File");
-       m->addAction("&New Profile...",this,SLOT(newProfile()));
-       m->addAction("&Save Profile",this,SLOT(saveProfile()));
+       QMenu*m=mb->addMenu(tr("&File"));
+       m->addAction(tr("&New Profile..."),this,SLOT(newProfile()));
+       m->addAction(tr("&Save Profile"),this,SLOT(saveProfile()));
        m->addSeparator();
-       m->addAction("&Close Window",this,SLOT(close()));
-       m=mb->addMenu("&Configure");
+       m->addAction(tr("&Close Window"),this,SLOT(close()));
+       m=mb->addMenu(tr("&Configure"));
        
        //create central widget
        QWidget *loginwidget;
@@ -93,12 +93,12 @@ MMainWindow::MMainWindow()
        gl->setRowStretch(++lctr,10);
        gl->addLayout(hl=new QHBoxLayout,++lctr,0,1,2);
        QPushButton*p;
-       hl->addWidget(p=new QPushButton("new Profile"),0);
+       hl->addWidget(p=new QPushButton(tr("new Profile")),0);
        connect(p,SIGNAL(clicked()),this,SLOT(newProfile()));
-       hl->addWidget(p=new QPushButton("save Profile"),0);
+       hl->addWidget(p=new QPushButton(tr("save Profile")),0);
        connect(p,SIGNAL(clicked()),this,SLOT(saveProfile()));
        hl->addStretch(10);
-       hl->addWidget(p=new QPushButton("Login"),0);
+       hl->addWidget(p=new QPushButton(tr("Login")),0);
        connect(p,SIGNAL(clicked()),this,SLOT(saveProfile()));
        connect(p,SIGNAL(clicked()),this,SLOT(startLogin()));
        initProfiles();
index 084c5da..dd76f16 100644 (file)
 #include "webrequest.h"
 
 #include <QSettings>
-#include <QCoreApplication>
+#include <QMessageBox>
+#include <QTabWidget>
+#include <QStatusBar>
+#include <QMenuBar>
+#include <QMenu>
 
 MOverview::MOverview(MWebRequest*mw,QString pk)
 {
        req=mw;
        setAttribute(Qt::WA_DeleteOnClose);
        setWindowTitle("MagicSmoke: "+QSettings().value("profiles/"+pk+"/name").toString());
+       
+       //menu
+       QMenuBar*mb=menuBar();
+       QMenu*m=mb->addMenu(tr("&Session"));
+       m->addAction(tr("&Re-Login"),this,SLOT(relogin()));
+       m->addSeparator();
+       m->addAction(tr("&Close Session"),this,SLOT(close()));
+       
+       m=mb->addMenu(tr("&Event"));
+       m=mb->addMenu(tr("&Customer"));
+       m=mb->addMenu(tr("C&onfigure"));
+       //tabs
+       setCentralWidget(tab=new QTabWidget);
+       tab->addTab(new QWidget,tr("Events"));
+       tab->addTab(new QWidget,tr("Customers"));
+       tab->addTab(new QWidget,tr("Order"));
+       
+       //status bar
+       statusBar()->setSizeGripEnabled(true);
 }
 
 void MOverview::closeEvent(QCloseEvent*ce)
@@ -36,3 +59,11 @@ MOverview::~MOverview()
        //free requestor
        req->deleteLater();
 }
+
+void MOverview::relogin()
+{
+       setEnabled(false);
+       if(!req->relogin())
+               QMessageBox::warning(this,tr("Warning"),tr("I was unable to renew the login at the server, the error was: %1").arg(req->errorString()));
+       setEnabled(true);
+}
index 9c216ec..d5ba10a 100644 (file)
 #include <QMainWindow>
 
 class MWebRequest;
+class QTabWidget;
 
 /**Main Overview Window*/
 class MOverview:public QMainWindow
 {
+       Q_OBJECT
        public:
                /**construct the window with web-request/session handler and QSettings-key for current profile*/
                MOverview(MWebRequest*,QString);
                ~MOverview();
        protected:
                void closeEvent(QCloseEvent*);
+       private slots:
+               void relogin();
        private:
+               //my session object
                MWebRequest*req;
+               //the profile associated with this session
                QString profilekey;
+               //widgets
+               QTabWidget*tab;
 };
 
 #endif
index 487dcf5..2e07296 100644 (file)
@@ -33,45 +33,221 @@ At least %1 Bits of random are required.</source>
 <context>
     <name>MMainWindow</name>
     <message>
-        <location filename="mainwindow.cpp" line="51"/>
+        <location filename="mainwindow.cpp" line="55"/>
         <source>Profile:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="55"/>
+        <location filename="mainwindow.cpp" line="59"/>
         <source>Alternate Hostname:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="58"/>
+        <location filename="mainwindow.cpp" line="62"/>
         <source>Server URL:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="61"/>
+        <location filename="mainwindow.cpp" line="65"/>
         <source>Proxy:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="73"/>
+        <location filename="mainwindow.cpp" line="86"/>
         <source>Username:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="76"/>
+        <location filename="mainwindow.cpp" line="89"/>
         <source>Password:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="161"/>
+        <location filename="mainwindow.cpp" line="177"/>
         <source>New Profile</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="161"/>
+        <location filename="mainwindow.cpp" line="177"/>
         <source>Please enter a profile name. It must be non-empty and must not be used yet:</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="mainwindow.cpp" line="74"/>
+        <source>Proxy Username:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="77"/>
+        <source>Proxy Password:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="202"/>
+        <source>Warning</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="202"/>
+        <source>Unable to log in. Error: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="41"/>
+        <source>&amp;File</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="42"/>
+        <source>&amp;New Profile...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="43"/>
+        <source>&amp;Save Profile</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="45"/>
+        <source>&amp;Close Window</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="46"/>
+        <source>&amp;Configure</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="96"/>
+        <source>new Profile</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="98"/>
+        <source>save Profile</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="101"/>
+        <source>Login</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>MOverview</name>
+    <message>
+        <location filename="overview.cpp" line="31"/>
+        <source>&amp;Session</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="overview.cpp" line="32"/>
+        <source>&amp;Re-Login</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="overview.cpp" line="34"/>
+        <source>&amp;Close Session</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="overview.cpp" line="36"/>
+        <source>&amp;Event</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="overview.cpp" line="37"/>
+        <source>&amp;Customer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="overview.cpp" line="38"/>
+        <source>C&amp;onfigure</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="overview.cpp" line="41"/>
+        <source>Events</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="overview.cpp" line="42"/>
+        <source>Customers</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="overview.cpp" line="43"/>
+        <source>Order</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="overview.cpp" line="67"/>
+        <source>Warning</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="overview.cpp" line="67"/>
+        <source>I was unable to renew the login at the server, the error was: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>MWebRequest</name>
+    <message>
+        <location filename="webrequest.cpp" line="146"/>
+        <source>Unable to get server info.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="webrequest.cpp" line="153"/>
+        <source>Error while parsing server info (line %1 col %2): %3</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="webrequest.cpp" line="158"/>
+        <source>Error in server info: missing authentication algorithm info.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="webrequest.cpp" line="163"/>
+        <source>The server requested an unsupported hash algorithm: %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="webrequest.cpp" line="169"/>
+        <source>Unable to get authentication challenge.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="webrequest.cpp" line="173"/>
+        <source>Error while parsing session challenge (line %1 col %2): %3</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="webrequest.cpp" line="179"/>
+        <source>Error in session challenge: missing session ID.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="webrequest.cpp" line="185"/>
+        <source>Error in session challenge: missing host challenge.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="webrequest.cpp" line="191"/>
+        <source>Error in session challenge: missing user challenge.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="webrequest.cpp" line="217"/>
+        <source>Failed to log in: user/password mismatch, non-allowed host key, or challenge timed out.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="webrequest.cpp" line="221"/>
+        <source>Unable to authenticate.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>initkey</name>
index 441d295..390e188 100644 (file)
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!DOCTYPE TS><TS version="1.1" language="de">
+<defaultcodec></defaultcodec>
 <context>
     <name>MKeyGen</name>
     <message>
@@ -33,44 +34,220 @@ At least %1 Bits of random are required.</source>
 <context>
     <name>MMainWindow</name>
     <message>
-        <location filename="mainwindow.cpp" line="51"/>
+        <location filename="mainwindow.cpp" line="55"/>
         <source>Profile:</source>
-        <translation type="unfinished"></translation>
+        <translation>Brofiel:</translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="55"/>
+        <location filename="mainwindow.cpp" line="59"/>
         <source>Alternate Hostname:</source>
-        <translation type="unfinished"></translation>
+        <translation>Andror Reschnername:</translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="58"/>
+        <location filename="mainwindow.cpp" line="62"/>
         <source>Server URL:</source>
-        <translation type="unfinished"></translation>
+        <translation>URL vom diggen Reschnor:</translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="61"/>
+        <location filename="mainwindow.cpp" line="65"/>
         <source>Proxy:</source>
-        <translation type="unfinished"></translation>
+        <translation>Web-Broggsie:</translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="73"/>
+        <location filename="mainwindow.cpp" line="86"/>
         <source>Username:</source>
-        <translation type="unfinished"></translation>
+        <translation>Nudsorname:</translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="76"/>
+        <location filename="mainwindow.cpp" line="89"/>
         <source>Password:</source>
-        <translation type="unfinished"></translation>
+        <translation>Gans doll geheimer Gohd:</translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="161"/>
+        <location filename="mainwindow.cpp" line="177"/>
         <source>New Profile</source>
-        <translation type="unfinished"></translation>
+        <translation>Neues Brofiel</translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="161"/>
+        <location filename="mainwindow.cpp" line="177"/>
         <source>Please enter a profile name. It must be non-empty and must not be used yet:</source>
-        <translation type="unfinished"></translation>
+        <translation>Bidde gäben&apos;se &apos;nen Namen für das neue Brofiel ein. Der darf noch ni&apos; benudsd sein und leer darf&apos;or och nedd sein:</translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="74"/>
+        <source>Proxy Username:</source>
+        <translation>Nudsername für&apos;n Broggsie:</translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="77"/>
+        <source>Proxy Password:</source>
+        <translation>Geheimer Gohd für&apos;n Broggsie:</translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="202"/>
+        <source>Warning</source>
+        <translation>Dumm gelaufen</translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="202"/>
+        <source>Unable to log in. Error: %1</source>
+        <translation>Isch gann nisch off&apos;n gross&apos;n Reschner. Der will nisch weil: %1</translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="41"/>
+        <source>&amp;File</source>
+        <translation>&amp;Dadai</translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="42"/>
+        <source>&amp;New Profile...</source>
+        <translation>&amp;Neues Brofiel</translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="43"/>
+        <source>&amp;Save Profile</source>
+        <translation>Brofiel &amp;schbeichorn</translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="45"/>
+        <source>&amp;Close Window</source>
+        <translation>Fänsdor &amp;zumach&apos;n</translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="46"/>
+        <source>&amp;Configure</source>
+        <translation>&amp;Gonfiguriern</translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="96"/>
+        <source>new Profile</source>
+        <translation>Neues Brofiel</translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="98"/>
+        <source>save Profile</source>
+        <translation>Brofiel schbeichorn</translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="101"/>
+        <source>Login</source>
+        <translation>Droff offn&apos; Reschnor</translation>
+    </message>
+</context>
+<context>
+    <name>MOverview</name>
+    <message>
+        <location filename="overview.cpp" line="31"/>
+        <source>&amp;Session</source>
+        <translation>&amp;Sidsung</translation>
+    </message>
+    <message>
+        <location filename="overview.cpp" line="32"/>
+        <source>&amp;Re-Login</source>
+        <translation>&amp;Noch&apos;ma einloggn</translation>
+    </message>
+    <message>
+        <location filename="overview.cpp" line="34"/>
+        <source>&amp;Close Session</source>
+        <translation>Sidsung &amp;Zumachn</translation>
+    </message>
+    <message>
+        <location filename="overview.cpp" line="36"/>
+        <source>&amp;Event</source>
+        <translation>&amp;Veranschdaldung</translation>
+    </message>
+    <message>
+        <location filename="overview.cpp" line="37"/>
+        <source>&amp;Customer</source>
+        <translation>&amp;Gunde</translation>
+    </message>
+    <message>
+        <location filename="overview.cpp" line="38"/>
+        <source>C&amp;onfigure</source>
+        <translation>G&amp;onfiguriern</translation>
+    </message>
+    <message>
+        <location filename="overview.cpp" line="41"/>
+        <source>Events</source>
+        <translation>Veranschdaldungen</translation>
+    </message>
+    <message>
+        <location filename="overview.cpp" line="42"/>
+        <source>Customers</source>
+        <translation>Gunden</translation>
+    </message>
+    <message>
+        <location filename="overview.cpp" line="43"/>
+        <source>Order</source>
+        <translation>Beschdellung</translation>
+    </message>
+    <message>
+        <location filename="overview.cpp" line="67"/>
+        <source>Warning</source>
+        <translation>Dumm gelaufen</translation>
+    </message>
+    <message>
+        <location filename="overview.cpp" line="67"/>
+        <source>I was unable to renew the login at the server, the error was: %1</source>
+        <translation>Isch gann de&apos; Verbindung off&apos;n gross&apos;n Reschner nisch erneuern. Der will nisch weil: %1</translation>
+    </message>
+</context>
+<context>
+    <name>MWebRequest</name>
+    <message>
+        <location filename="webrequest.cpp" line="146"/>
+        <source>Unable to get server info.</source>
+        <translation>Dor grosse Reschner will mir nischd über sisch sach&apos;n. Dummer Hund der.</translation>
+    </message>
+    <message>
+        <location filename="webrequest.cpp" line="153"/>
+        <source>Error while parsing server info (line %1 col %2): %3</source>
+        <translation>Isch gann den gross&apos;n Reschner nich verschdehn. Dor Fählor &quot;%3&quot; bassierd auf dor Dseile %1, Schbalde %2.</translation>
+    </message>
+    <message>
+        <location filename="webrequest.cpp" line="158"/>
+        <source>Error in server info: missing authentication algorithm info.</source>
+        <translation>Dor grosse Reschnor will mir nedd sach&apos;n wie mor offn&apos; droff gommd. Missd.</translation>
+    </message>
+    <message>
+        <location filename="webrequest.cpp" line="163"/>
+        <source>The server requested an unsupported hash algorithm: %1.</source>
+        <translation>Dor grosse Reschnor will &apos;ne Bereschnung von mir, die isch nedd gann: %1.</translation>
+    </message>
+    <message>
+        <location filename="webrequest.cpp" line="169"/>
+        <source>Unable to get authentication challenge.</source>
+        <translation>Dor grosse Reschnor reded nedd mit mir. Isch grich gehn &quot;Schällänsch&quot;.</translation>
+    </message>
+    <message>
+        <location filename="webrequest.cpp" line="173"/>
+        <source>Error while parsing session challenge (line %1 col %2): %3</source>
+        <translation>Isch gann den gross&apos;n Reschner nich verschdehn. Dor Fählor &quot;%3&quot; bassierd auf dor Dseile %1, Schbalde %2.</translation>
+    </message>
+    <message>
+        <location filename="webrequest.cpp" line="179"/>
+        <source>Error in session challenge: missing session ID.</source>
+        <translation>Fählor im &quot;Schällänsch&quot;: der had gehne &quot;Säschn-Ei-Dih&quot;.</translation>
+    </message>
+    <message>
+        <location filename="webrequest.cpp" line="185"/>
+        <source>Error in session challenge: missing host challenge.</source>
+        <translation>Fählor im &quot;Schällänsch&quot;: der had nischd fürn Gombjuder.</translation>
+    </message>
+    <message>
+        <location filename="webrequest.cpp" line="191"/>
+        <source>Error in session challenge: missing user challenge.</source>
+        <translation>Fählor im &quot;Schällänsch&quot;: der had nischd fürn Nudsor.</translation>
+    </message>
+    <message>
+        <location filename="webrequest.cpp" line="217"/>
+        <source>Failed to log in: user/password mismatch, non-allowed host key, or challenge timed out.</source>
+        <translation>Isch gann nisch offn&apos; grossen Reschnor. Das hadd zu lange gedauerd oder Du hasd&apos;sch vordibbd.</translation>
+    </message>
+    <message>
+        <location filename="webrequest.cpp" line="221"/>
+        <source>Unable to authenticate.</source>
+        <translation>Isch gann misch ned anmälden.</translation>
     </message>
 </context>
 <context>
index 82286cc..2e51976 100644 (file)
@@ -132,7 +132,13 @@ static inline QString calcAuth(QString algo,QString cha,QString pwd)
        return QByteArray();
 }
 
-bool MWebRequest::login(QString usr,QString pwd,QString hostname)
+bool MWebRequest::login(QString usr,QString pwd,QString hn)
+{
+       user=usr;passwd=pwd;hostname=hn;
+       return doLogin();
+}
+
+bool MWebRequest::doLogin()
 {
        //get authentication algo
        if(!request("serverinfo"))return false;
@@ -188,7 +194,7 @@ bool MWebRequest::login(QString usr,QString pwd,QString hostname)
        QString ucha=nl.at(0).toElement().text().trimmed();
        //calculate auth
        hcha=calcAuth(algo,hcha,QSettings().value("hostkey").toString());
-       ucha=calcAuth(algo,ucha,pwd);
+       ucha=calcAuth(algo,ucha,passwd);
        //create auth msg
        QDomDocument adoc("Authenticate");
        del=adoc.createElement("SessionAuth");
@@ -199,7 +205,7 @@ bool MWebRequest::login(QString usr,QString pwd,QString hostname)
        el.appendChild(adoc.createTextNode(hcha));
        del.appendChild(el);
        el=adoc.createElement("UserName");
-       el.appendChild(adoc.createTextNode(usr));
+       el.appendChild(adoc.createTextNode(user));
        del.appendChild(el);
        el=adoc.createElement("UserAuth");
        el.appendChild(adoc.createTextNode(ucha));
@@ -222,10 +228,38 @@ bool MWebRequest::login(QString usr,QString pwd,QString hostname)
 
 void MWebRequest::logout()
 {
-       request("closesession",QByteArray());
+       request("closesession");
+}
+
+bool MWebRequest::relogin()
+{
+       request("closesession");
+       return doLogin();
 }
 
 QString MWebRequest::errorString()
 {
        return errstr;
 }
+
+bool MWebRequest::hasRole(QString r)
+{
+       //get roles
+       if(roles.size()==0){
+               //get roles from server
+               if(!request("getmyroles"))return false;
+               //parse data
+               QStringList rls=QString::fromAscii(rspdata).split("\n",QString::SkipEmptyParts);
+               for(int i=0;i<rls.size();i++){
+                       QString rl=rls[i].trimmed().toLower();
+                       if(rl=="")continue;
+                       roles<<rl;
+               }
+               //if none: put in a dummy to avoid asking again
+               if(roles.size()==0)roles<<"__none__";
+       }
+       //check whether we are admin
+       if(roles.contains("_admin"))return true;
+       //check whether we have role
+       return roles.contains(r.toLower());
+}
index 62fa55b..72f0281 100644 (file)
@@ -34,6 +34,9 @@ class MWebRequest:public QObject
                /**returns the last error as string*/
                QString errorString();
                
+               /**returns whether the user has a specific role/right*/
+               bool hasRole(QString);
+               
        public slots:
                /**set how long to wait for a web request*/
                void setTimeout(int);
@@ -44,6 +47,8 @@ class MWebRequest:public QObject
                
                /**log in to web server; requires username/password and the local host name as arguments*/
                bool login(QString user,QString passwd,QString hostname);
+               /**re-log in to web server with previously set values*/
+               bool relogin();
                /**log out of web server*/
                void logout();
                
@@ -63,6 +68,8 @@ class MWebRequest:public QObject
                int webtimeout,proxyport;
                //login data
                QString user,passwd,sessionid,hostname;
+               //accounting data
+               QStringList roles;
                //error data
                QString errstr;
                bool finerr,fin;
@@ -70,6 +77,9 @@ class MWebRequest:public QObject
                QString rspstatus;
                QByteArray rspdata;
                int finid,waitid;
+               
+               /**used by login and relogin to do the actual work*/
+               bool doLogin();
 };
 
 #endif
index 491b96c..433a03c 100644 (file)
@@ -13,7 +13,11 @@ header("Content-Type: application/x-MagicSmoke");
 $ALLOWEDREQUESTS=array(
        "serverinfo", //info request
        "startsession","sessionauth","closesession", //session requests
-       "getmyroles" //role management
+       //all requests below here need authentication
+       "getmyroles", //role management
+       //all requests below here need a role entry in the DB
+       "geteventlist", "geteventdata", //event infos
+       "getcustomerlist" //customer info
 );
 /**contains the low-level request name from the client*/
 $SMOKEREQUEST=strtolower($_SERVER["HTTP_X_MAGICSMOKE_REQUEST"]);