Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
O
OpenBoard
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lifo
Nicolas Ollinger
OpenBoard
Commits
497288d4
Commit
497288d4
authored
Jul 06, 2011
by
shibakaneki
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
First version of the publication on the web
parent
331a82ff
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
119 additions
and
29 deletions
+119
-29
UBDocumentPublisher.cpp
src/adaptors/publishing/UBDocumentPublisher.cpp
+113
-28
UBDocumentPublisher.h
src/adaptors/publishing/UBDocumentPublisher.h
+6
-1
No files found.
src/adaptors/publishing/UBDocumentPublisher.cpp
View file @
497288d4
#include "UBDocumentPublisher.h"
#include <QFileInfo>
#include "UBDocumentPublisher.h"
#include "frameworks/UBPlatformUtils.h"
#include "frameworks/UBPlatformUtils.h"
#include "frameworks/UBFileSystemUtils.h"
#include "frameworks/UBFileSystemUtils.h"
...
@@ -44,6 +46,7 @@ UBDocumentPublisher::UBDocumentPublisher(UBDocumentProxy* pDocument, QObject *pa
...
@@ -44,6 +46,7 @@ UBDocumentPublisher::UBDocumentPublisher(UBDocumentProxy* pDocument, QObject *pa
connect
(
mpWebView
,
SIGNAL
(
loadFinished
(
bool
)),
this
,
SLOT
(
onLoadFinished
(
bool
)));
connect
(
mpWebView
,
SIGNAL
(
loadFinished
(
bool
)),
this
,
SLOT
(
onLoadFinished
(
bool
)));
connect
(
mpWebView
,
SIGNAL
(
linkClicked
(
QUrl
)),
this
,
SLOT
(
onLinkClicked
(
QUrl
)));
connect
(
mpWebView
,
SIGNAL
(
linkClicked
(
QUrl
)),
this
,
SLOT
(
onLinkClicked
(
QUrl
)));
connect
(
this
,
SIGNAL
(
loginDone
()),
this
,
SLOT
(
onLoginDone
()));
init
();
init
();
...
@@ -52,7 +55,7 @@ UBDocumentPublisher::UBDocumentPublisher(UBDocumentProxy* pDocument, QObject *pa
...
@@ -52,7 +55,7 @@ UBDocumentPublisher::UBDocumentPublisher(UBDocumentProxy* pDocument, QObject *pa
UBDocumentPublisher
::~
UBDocumentPublisher
()
UBDocumentPublisher
::~
UBDocumentPublisher
()
{
{
delete
mpWebView
;
//
delete mpWebView;
delete
mPublishingDocument
;
delete
mPublishingDocument
;
}
}
...
@@ -66,11 +69,54 @@ void UBDocumentPublisher::publish()
...
@@ -66,11 +69,54 @@ void UBDocumentPublisher::publish()
mPassword
=
settings
->
communityPassword
();
mPassword
=
settings
->
communityPassword
();
buildUbwFile
();
buildUbwFile
();
UBApplication
::
showMessage
(
tr
(
"Uploading Sankore File on Web."
));
UBApplication
::
showMessage
(
tr
(
"Uploading Sankore File on Web."
));
login
(
mUsername
,
mPassword
);
//sendUbw();
}
void
UBDocumentPublisher
::
onLoginDone
()
{
sendUbw
();
sendUbw
();
}
void
UBDocumentPublisher
::
login
(
QString
username
,
QString
password
)
{
QString
data
,
crlf
;
QByteArray
datatoSend
;
// Create the request body
data
=
"srid=&j_username="
+
username
+
"&j_password="
+
password
+
crlf
+
crlf
;
datatoSend
=
data
.
toAscii
();
// convert data string to byte array for request
// Create the request header
QString
qsLoginURL
=
QString
(
"http://sankore.devxwiki.com/xwiki/bin/loginsubmit/XWiki/XWikiLogin?xredirect=%0"
).
arg
(
DOCPUBLICATION_URL
);
QNetworkRequest
request
(
QUrl
(
qsLoginURL
.
toAscii
().
constData
()));
request
.
setRawHeader
(
"Origin"
,
"http://sankore.devxwiki.com"
);
request
.
setHeader
(
QNetworkRequest
::
ContentTypeHeader
,
"application/x-www-form-urlencoded"
);
request
.
setRawHeader
(
"Accept"
,
"application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"
);
request
.
setRawHeader
(
"Referer"
,
DOCPUBLICATION_URL
);
request
.
setHeader
(
QNetworkRequest
::
ContentLengthHeader
,
datatoSend
.
size
());
request
.
setRawHeader
(
"Accept-Language"
,
"en-US,*"
);
// Generate a session id
//mSessionID = getSessionID();
// Create the cookie
//QList<QNetworkCookie> cookiesList;
//QString qsCookieValue;
//qsCookieValue = mSessionID;
//qsCookieValue += "; language=en";
//QNetworkCookie cookie("JSESSIONID", qsCookieValue.toAscii().constData());
//cookiesList << cookie;
//request.setHeader(QNetworkRequest::CookieHeader, QVariant::fromValue(cookiesList));
// Send the request
mpNetworkMgr
->
post
(
request
,
datatoSend
);
}
}
void
UBDocumentPublisher
::
buildUbwFile
()
void
UBDocumentPublisher
::
buildUbwFile
()
{
{
QDir
d
;
QDir
d
;
...
@@ -537,18 +583,17 @@ void UBDocumentPublisher::onFinished(QNetworkReply *reply)
...
@@ -537,18 +583,17 @@ void UBDocumentPublisher::onFinished(QNetworkReply *reply)
{
{
QByteArray
response
=
reply
->
readAll
();
QByteArray
response
=
reply
->
readAll
();
if
(
!
bCookieSet
)
if
(
!
b
Login
CookieSet
)
{
{
QList
<
QNetworkCookie
>
cookiesList
;
QList
<
QNetworkCookie
>
cookiesList
;
QVariant
cookieHeader
=
reply
->
rawHeader
(
"Set-Cookie"
);
QVariant
cookieHeader
=
reply
->
rawHeader
(
"Set-Cookie"
);
qDebug
()
<<
cookieHeader
.
toString
();
// First we concatenate all the Set-Cookie values (the packet can contains many of them)
// First we concatenate all the Set-Cookie values (the packet can contains many of them)
QStringList
qslCookie
=
cookieHeader
.
toString
().
split
(
"
\n
"
);
QStringList
qslCookie
=
cookieHeader
.
toString
().
split
(
"
\n
"
);
QString
qsCookieValue
=
qslCookie
.
at
(
0
);
QString
qsCookieValue
=
qslCookie
.
at
(
0
);
for
(
int
i
=
1
;
i
<
qslCookie
.
size
();
i
++
)
{
for
(
int
i
=
1
;
i
<
qslCookie
.
size
();
i
++
)
{
qsCookieValue
+=
"; "
+
qslCookie
.
at
(
i
);
qsCookieValue
+=
"; "
+
qslCookie
.
at
(
i
);
}
}
qDebug
()
<<
"qsCookieValue "
<<
qsCookieValue
;
// Now we isolate every cookie value
// Now we isolate every cookie value
QStringList
qslCookieVals
=
qsCookieValue
.
split
(
"; "
);
QStringList
qslCookieVals
=
qsCookieValue
.
split
(
"; "
);
...
@@ -556,31 +601,69 @@ void UBDocumentPublisher::onFinished(QNetworkReply *reply)
...
@@ -556,31 +601,69 @@ void UBDocumentPublisher::onFinished(QNetworkReply *reply)
for
(
int
i
=
0
;
i
<
qslCookieVals
.
size
();
i
++
)
for
(
int
i
=
0
;
i
<
qslCookieVals
.
size
();
i
++
)
{
{
QString
cookieString
=
qslCookieVals
.
at
(
i
);
QString
cookieString
=
qslCookieVals
.
at
(
i
);
qDebug
()
<<
"qslCookieVals.at(i): "
<<
cookieString
.
replace
(
"
\"
"
,
""
);
//
qDebug() << "qslCookieVals.at(i): " << cookieString.replace("\"", "");
QStringList
qslCrntCookie
=
cookieString
.
split
(
"="
);
QStringList
qslCrntCookie
=
cookieString
.
split
(
"="
);
QNetworkCookie
crntCookie
;
QNetworkCookie
crntCookie
;
if
(
qslCrntCookie
.
length
()
==
2
)
if
(
qslCrntCookie
.
length
()
==
2
)
crntCookie
=
QNetworkCookie
(
qslCrntCookie
.
at
(
0
).
toAscii
().
constData
(),
qslCrntCookie
.
at
(
1
).
toAscii
().
constData
());
{
QString
qsValue
=
qslCrntCookie
.
at
(
1
);
qsValue
.
remove
(
"
\"
"
);
crntCookie
=
QNetworkCookie
(
qslCrntCookie
.
at
(
0
).
toAscii
().
constData
(),
qsValue
.
toAscii
().
constData
());
}
else
else
{
crntCookie
=
QNetworkCookie
(
qslCrntCookie
.
at
(
0
).
toAscii
().
constData
());
crntCookie
=
QNetworkCookie
(
qslCrntCookie
.
at
(
0
).
toAscii
().
constData
());
cookiesList
<<
crntCookie
;
}
// HACK : keep only the same cookies as the XWiki website does.
if
(
crntCookie
.
name
()
==
"JSESSIONID"
||
crntCookie
.
name
()
==
"username"
||
crntCookie
.
name
()
==
"password"
||
crntCookie
.
name
()
==
"rememberme"
||
crntCookie
.
name
()
==
"validation"
)
{
cookiesList
<<
crntCookie
;
}
}
QNetworkCookie
langCookie
(
"language"
,
"en"
);
cookiesList
<<
langCookie
;
// DEBUG : Verify
for
(
int
i
=
0
;
i
<
cookiesList
.
size
();
i
++
)
{
qDebug
()
<<
cookiesList
.
at
(
i
).
name
()
<<
"="
<<
cookiesList
.
at
(
i
).
value
();
}
}
// Set the cookiejar : it set the cookies that will be sent with every packet.
// Set the cookiejar : it set the cookies that will be sent with every packet.
qDebug
()
<<
reply
->
url
().
toString
();
mpCookieJar
->
setCookiesFromUrl
(
cookiesList
,
QUrl
(
DOCPUBLICATION_URL
)
/*reply->url()*/
);
mpCookieJar
->
setCookiesFromUrl
(
cookiesList
,
reply
->
url
());
mpNetworkMgr
->
setCookieJar
(
mpCookieJar
);
bCookieSet
=
true
;
}
if
(
response
.
isEmpty
()){
mpNetworkMgr
->
setCookieJar
(
mpCookieJar
);
bLoginCookieSet
=
true
;
emit
loginDone
();
emit
loginDone
();
}
}
else
{
else
// Display the iframe
{
mpWebView
->
setHtml
(
response
,
QUrl
(
"http://sankore.devxwiki.com/xwiki/bin/view/Test/FileUpload"
));
if
(
!
response
.
isEmpty
()){
UBApplication
::
applicationController
->
showSankoreWebDocument
();
// Display the iframe
mpWebView
->
setHtml
(
response
,
QUrl
(
DOCPUBLICATION_URL
));
UBApplication
::
applicationController
->
showSankoreWebDocument
();
}
else
{
// Redirect
QVariant
locationHeader
=
reply
->
rawHeader
(
"Location"
);
qDebug
()
<<
"---------------------------"
;
QList
<
QNetworkCookie
>
clist
=
mpCookieJar
->
cookiesForUrl
(
QUrl
(
locationHeader
.
toString
()));
for
(
int
i
=
0
;
i
<
clist
.
size
();
i
++
)
{
qDebug
()
<<
clist
.
at
(
i
).
name
()
<<
"="
<<
clist
.
at
(
i
).
value
();
}
QNetworkRequest
req
(
QUrl
(
locationHeader
.
toString
()));
mpNetworkMgr
->
get
(
req
);
}
}
}
}
}
...
@@ -591,6 +674,7 @@ void UBDocumentPublisher::sendUbw()
...
@@ -591,6 +674,7 @@ void UBDocumentPublisher::sendUbw()
QFile
f
(
mTmpZipFile
);
QFile
f
(
mTmpZipFile
);
if
(
f
.
open
(
QIODevice
::
ReadOnly
))
if
(
f
.
open
(
QIODevice
::
ReadOnly
))
{
{
QFileInfo
fi
(
f
);
QByteArray
ba
=
f
.
readAll
();
QByteArray
ba
=
f
.
readAll
();
QString
boundary
,
data
,
multipartHeader
;
QString
boundary
,
data
,
multipartHeader
;
QByteArray
datatoSend
;
QByteArray
datatoSend
;
...
@@ -599,23 +683,24 @@ void UBDocumentPublisher::sendUbw()
...
@@ -599,23 +683,24 @@ void UBDocumentPublisher::sendUbw()
multipartHeader
=
"multipart/form-data; boundary="
+
boundary
;
multipartHeader
=
"multipart/form-data; boundary="
+
boundary
;
data
=
"--"
+
boundary
+
mCrlf
;
data
=
"--"
+
boundary
+
mCrlf
;
data
+=
"Content-Disposition: form-data; name=
\"
file
\"
; filename=
\"
"
+
f
.
fileName
()
+
"
\"
"
+
mCrlf
;
data
+=
"Content-Disposition: form-data; name=
\"
file
\"
; filename=
\"
"
+
f
i
.
fileName
()
+
"
\"
"
+
mCrlf
;
data
+=
"Content-Type: application/octet-stream"
+
mCrlf
+
mCrlf
;
data
+=
"Content-Type: application/octet-stream"
+
mCrlf
+
mCrlf
;
datatoSend
=
data
.
toAscii
();
// convert data string to byte array for request
datatoSend
=
data
.
toAscii
();
// convert data string to byte array for request
datatoSend
+=
ba
;
datatoSend
+=
ba
;
datatoSend
+=
mCrlf
.
toAscii
();
datatoSend
+=
mCrlf
;
datatoSend
+=
QString
(
"--%0--%1"
).
arg
(
boundary
).
arg
(
mCrlf
).
toAscii
();
datatoSend
+=
QString
(
"--%0--%1"
).
arg
(
boundary
).
arg
(
mCrlf
);
//datatoSend += QString("%0").arg("Content-Disposition: form-data; name=\"submit\"");
QNetworkRequest
request
(
QUrl
(
"http://sankore.devxwiki.com/xwiki/bin/view/Test/FileUpload"
));
//datatoSend += "Submit Query";
//datatoSend += mCrlf;
//datatoSend += QString("--%0--%1").arg(boundary).arg(mCrlf);
// ?xpage=plain&outputSyntax=plain
QNetworkRequest
request
(
QUrl
(
DOCPUBLICATION_URL
));
request
.
setHeader
(
QNetworkRequest
::
ContentTypeHeader
,
multipartHeader
);
request
.
setHeader
(
QNetworkRequest
::
ContentTypeHeader
,
multipartHeader
);
request
.
setHeader
(
QNetworkRequest
::
ContentLengthHeader
,
datatoSend
.
size
());
request
.
setHeader
(
QNetworkRequest
::
ContentLengthHeader
,
datatoSend
.
size
());
request
.
setRawHeader
(
"Accept"
,
"application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"
);
request
.
setRawHeader
(
"Accept"
,
"application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"
);
request
.
setRawHeader
(
"Accept-Language"
,
"en-US,*"
);
request
.
setRawHeader
(
"Accept-Language"
,
"en-US,*"
);
request
.
setRawHeader
(
"Referer"
,
"http://sankore.devxwiki.com/xwiki/bin/view/Test/FileUpload"
);
request
.
setRawHeader
(
"Referer"
,
DOCPUBLICATION_URL
);
request
.
setRawHeader
(
"Origin"
,
"http://sankore.devxwiki.com"
);
QString
b64Auth
=
getBase64Of
(
QString
(
"%0:%1"
).
arg
(
mUsername
).
arg
(
mPassword
));
request
.
setRawHeader
(
"Authorization"
,
QString
(
"Basic %0"
).
arg
(
b64Auth
).
toAscii
().
constData
());
// Send the file
// Send the file
mpNetworkMgr
->
post
(
request
,
datatoSend
);
mpNetworkMgr
->
post
(
request
,
datatoSend
);
...
...
src/adaptors/publishing/UBDocumentPublisher.h
View file @
497288d4
...
@@ -7,6 +7,9 @@
...
@@ -7,6 +7,9 @@
#include "ui_webPublishing.h"
#include "ui_webPublishing.h"
#include "UBAbstractPublisher.h"
#include "UBAbstractPublisher.h"
#define DOCPUBLICATION_URL "http://sankore.devxwiki.com/xwiki/bin/view/CreateResources/UniboardUpload"
#define XWIKI_ORIGIN_HEADER "http://sankore.devxwiki.com"
class
UBDocumentProxy
;
class
UBDocumentProxy
;
class
UBServerXMLHttpRequest
;
class
UBServerXMLHttpRequest
;
class
UBGraphicsW3CWidgetItem
;
class
UBGraphicsW3CWidgetItem
;
...
@@ -38,6 +41,7 @@ private slots:
...
@@ -38,6 +41,7 @@ private slots:
void
onFinished
(
QNetworkReply
*
reply
);
void
onFinished
(
QNetworkReply
*
reply
);
void
onLinkClicked
(
const
QUrl
&
url
);
void
onLinkClicked
(
const
QUrl
&
url
);
void
onLoadFinished
(
bool
result
);
void
onLoadFinished
(
bool
result
);
void
onLoginDone
();
private
:
private
:
...
@@ -55,9 +59,10 @@ private:
...
@@ -55,9 +59,10 @@ private:
QString
mUsername
;
QString
mUsername
;
QString
mPassword
;
QString
mPassword
;
QString
mCrlf
;
QString
mCrlf
;
bool
bCookieSet
;
bool
b
Login
CookieSet
;
void
buildUbwFile
();
void
buildUbwFile
();
void
login
(
QString
username
,
QString
password
);
QString
mTmpZipFile
;
QString
mTmpZipFile
;
};
};
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment