mirror of
https://thingvellir.net/git/overte
synced 2025-03-27 23:52:03 +01:00
Get Domain creation working; revise metaverse forwarding. (TLS init fail issue present)
This commit is contained in:
parent
74b185f6c6
commit
c266b003fb
5 changed files with 168 additions and 34 deletions
|
@ -73,10 +73,10 @@ export default {
|
|||
|
||||
methods: {
|
||||
async onSubmit () {
|
||||
const metaverseURL = await this.retrieveMetaverseUrl();
|
||||
const result = await this.attemptLogin(metaverseURL, this.username, this.password);
|
||||
const metaverseUrl = await this.retrieveMetaverseUrl();
|
||||
const result = await this.attemptLogin(metaverseUrl, this.username, this.password);
|
||||
|
||||
this.$emit("loginResult", { "success": result.success, "metaverse": metaverseURL, "data": result.response });
|
||||
this.$emit("loginResult", { "success": result.success, "metaverse": metaverseUrl, "data": result.response });
|
||||
},
|
||||
|
||||
// TODO: This needs to be addressed in a more modular fashion to reuse and save state across multiple components.
|
||||
|
|
|
@ -232,7 +232,7 @@
|
|||
{{ connectMetaverseSuccess ? 'Connected' : 'Connect' }}
|
||||
</q-btn>
|
||||
<q-btn
|
||||
@click="$refs.stepper.next()"
|
||||
@click="connectMetaverseSuccess ? $refs.stepper.next() : mainWizardStep = 6"
|
||||
class="q-mb-md"
|
||||
:size="connectMetaverseSuccess ? 'md' : 'sm'"
|
||||
outline
|
||||
|
@ -265,9 +265,58 @@
|
|||
|
||||
<q-step
|
||||
:name="5"
|
||||
title="Access"
|
||||
title="Configure Metaverse"
|
||||
caption="Recommended"
|
||||
:done="mainWizardStep > 5"
|
||||
>
|
||||
<q-card
|
||||
class="wizardCard"
|
||||
>
|
||||
<q-card-section>
|
||||
<div class="text-h6 text-weight-light text-center">Let's give your Domain a label.</div>
|
||||
<div class="text-h7 text-weight-light text-center">This is to help you identify your Domains in your Metaverse account.</div>
|
||||
</q-card-section>
|
||||
|
||||
<q-card-section>
|
||||
<q-input
|
||||
v-model="domainLabel"
|
||||
filled
|
||||
dark
|
||||
label="Label"
|
||||
hint="Enter a nickname for your Domain."
|
||||
lazy-rules
|
||||
:rules="[ val => val && val.length > 0 || 'Please enter a label.']"
|
||||
/>
|
||||
</q-card-section>
|
||||
|
||||
<q-card-actions vertical align="right">
|
||||
<q-btn
|
||||
@click="saveMetaverseConfiguration"
|
||||
class="q-mb-md"
|
||||
size="md"
|
||||
outline
|
||||
text-color="white"
|
||||
icon-right="chevron_right"
|
||||
>
|
||||
Next
|
||||
</q-btn>
|
||||
<q-btn
|
||||
@click="$refs.stepper.previous()"
|
||||
size="sm"
|
||||
flat
|
||||
icon="chevron_left"
|
||||
>
|
||||
Back
|
||||
</q-btn>
|
||||
</q-card-actions>
|
||||
</q-card>
|
||||
</q-step>
|
||||
|
||||
<q-step
|
||||
:name="6"
|
||||
title="Access"
|
||||
caption="Recommended"
|
||||
:done="mainWizardStep > 6"
|
||||
>
|
||||
<q-card
|
||||
class="wizardCard"
|
||||
|
@ -276,7 +325,7 @@
|
|||
<div class="text-h6 text-weight-light text-center">Let's configure some security settings for your world.</div>
|
||||
</q-card-section>
|
||||
|
||||
<q-card-section>
|
||||
<q-card-section v-show="connectMetaverseSuccess">
|
||||
<div class="text-h6 text-weight-light text-center">Who should be an <b>in-world admin</b> of your Domain?</div>
|
||||
<q-select
|
||||
label="Metaverse usernames (press enter)"
|
||||
|
@ -323,7 +372,7 @@
|
|||
Next
|
||||
</q-btn>
|
||||
<q-btn
|
||||
@click="$refs.stepper.previous()"
|
||||
@click="connectMetaverseSuccess ? $refs.stepper.previous() : mainWizardStep = 4"
|
||||
size="sm"
|
||||
flat
|
||||
icon="chevron_left"
|
||||
|
@ -335,10 +384,10 @@
|
|||
</q-step>
|
||||
|
||||
<q-step
|
||||
:name="6"
|
||||
:name="7"
|
||||
title="Administrator"
|
||||
caption="Highly Recommended"
|
||||
:done="mainWizardStep > 6"
|
||||
:done="mainWizardStep > 7"
|
||||
>
|
||||
<q-card
|
||||
class="wizardCard"
|
||||
|
@ -444,10 +493,10 @@
|
|||
</q-step>
|
||||
|
||||
<q-step
|
||||
:name="7"
|
||||
:name="8"
|
||||
title="Performance"
|
||||
caption=""
|
||||
:done="mainWizardStep > 7"
|
||||
:done="mainWizardStep > 8"
|
||||
>
|
||||
<q-card
|
||||
class="wizardCard"
|
||||
|
@ -492,10 +541,10 @@
|
|||
</q-step>
|
||||
|
||||
<q-step
|
||||
:name="8"
|
||||
:name="9"
|
||||
title="Done!"
|
||||
caption=""
|
||||
:done="mainWizardStep > 8"
|
||||
:done="mainWizardStep > 9"
|
||||
>
|
||||
<q-card
|
||||
class="wizardCard"
|
||||
|
@ -615,6 +664,8 @@ export default defineComponent({
|
|||
// TODO: Needs to be based off of the actual state of the server's connection (using Vuex and retrieving settings on page load.)
|
||||
connectMetaverseSuccess: false,
|
||||
connectMetaverseDialog: false,
|
||||
// Metaverse Configuration
|
||||
domainLabel: "",
|
||||
// Security Step
|
||||
administratorsListSecurityModel: [],
|
||||
connectionSecurityModel: ref(["everyone"]),
|
||||
|
@ -658,10 +709,10 @@ export default defineComponent({
|
|||
// Starter Content
|
||||
starterContentToggle: true,
|
||||
// Consts
|
||||
WELCOME_TEXT_TIMEOUT: 4500,
|
||||
WELCOME_TEXT_TIMEOUT: 500,
|
||||
MAIN_WIZARD_TRANSITION_TIME: 1000,
|
||||
DEFAULT_METAVERSE_URL: "https://metaverse.vircadia.com/live",
|
||||
FINAL_WIZARD_STEP: 8,
|
||||
FINAL_WIZARD_STEP: 9,
|
||||
COMPLETE_WIZARD_REDIRECT_DELAY: 4000
|
||||
};
|
||||
},
|
||||
|
@ -686,6 +737,67 @@ export default defineComponent({
|
|||
}
|
||||
},
|
||||
|
||||
saveMetaverseConfiguration () {
|
||||
this.mainWizardStep++;
|
||||
// TODO: Put this path in a constant somewhere.
|
||||
axios.post(`/api/domains`, { "domain": { "label": this.domainLabel } },
|
||||
{
|
||||
params: {
|
||||
label: this.domainLabel
|
||||
},
|
||||
headers: {
|
||||
'content-type': 'application/x-www-form-urlencoded;charset=utf-8'
|
||||
}
|
||||
}
|
||||
)
|
||||
.then((response) => {
|
||||
Log.info(Log.types.METAVERSE, "Successfully configured Domain with Metaverse.");
|
||||
console.info("received", response);
|
||||
const settingsToCommit = {
|
||||
"metaverse": {
|
||||
"automatic_networking": "full",
|
||||
"id": response.data.domain.domainId
|
||||
},
|
||||
"descriptors": {
|
||||
"world_name": this.domainLabel
|
||||
}
|
||||
};
|
||||
|
||||
this.commitMetaverseConfig(settingsToCommit);
|
||||
})
|
||||
.catch((error) => {
|
||||
Log.error(Log.types.METAVERSE, `Failed to configure Domain with Metaverse: ${error}`);
|
||||
this.$q.notify({
|
||||
type: "negative",
|
||||
textColor: "white",
|
||||
icon: "warning",
|
||||
message: `Failed to label your Domain on the Metaverse: ${error}`
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
async commitMetaverseConfig (jsonToCommit) {
|
||||
const committed = await this.commitSettings(jsonToCommit);
|
||||
|
||||
if (committed === true) {
|
||||
Log.info(Log.types.METAVERSE, "Successfully committed Domain server config for the Metaverse.");
|
||||
this.$q.notify({
|
||||
type: "positive",
|
||||
textColor: "white",
|
||||
icon: "cloud_done",
|
||||
message: "Successfully labeled your Domain on your Metaverse account."
|
||||
});
|
||||
} else {
|
||||
Log.error(Log.types.METAVERSE, "Failed to configure server with Metaverse: Could not commit config to settings.");
|
||||
this.$q.notify({
|
||||
type: "negative",
|
||||
textColor: "white",
|
||||
icon: "warning",
|
||||
message: "Domain label with Metaverse attempt failed because the settings were unable to be saved."
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
async saveSecuritySettings () {
|
||||
const friendsCanConnect = this.connectionSecurityModel.includes("friends");
|
||||
const friendsCanRez = this.rezSecurityModel.includes("friends");
|
||||
|
|
|
@ -87,6 +87,7 @@ QString DomainServer::_userConfigFilename;
|
|||
int DomainServer::_parentPID { -1 };
|
||||
|
||||
bool DomainServer::forwardMetaverseAPIRequest(HTTPConnection* connection,
|
||||
const QUrl& requestUrl,
|
||||
const QString& metaversePath,
|
||||
const QString& requestSubobjectKey,
|
||||
std::initializer_list<QString> requiredData,
|
||||
|
@ -101,23 +102,43 @@ bool DomainServer::forwardMetaverseAPIRequest(HTTPConnection* connection,
|
|||
|
||||
QJsonObject subobject;
|
||||
|
||||
auto params = connection->parseUrlEncodedForm();
|
||||
if (requestUrl.hasQuery()) {
|
||||
QUrlQuery query(requestUrl);
|
||||
|
||||
for (auto& key : requiredData) {
|
||||
auto it = params.find(key);
|
||||
if (it == params.end()) {
|
||||
auto error = "Bad request, expected param '" + key + "'";
|
||||
connection->respond(HTTPConnection::StatusCode400, error.toLatin1());
|
||||
return true;
|
||||
for (auto& key : requiredData) {
|
||||
if (query.hasQueryItem(key)) {
|
||||
subobject.insert(key, query.queryItemValue(key));
|
||||
} else {
|
||||
auto error = "Domain Server: Bad request, expected param '" + key + "'";
|
||||
connection->respond(HTTPConnection::StatusCode400, error.toLatin1());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
subobject.insert(key, it.value());
|
||||
}
|
||||
|
||||
for (auto& key : optionalData) {
|
||||
auto it = params.find(key);
|
||||
if (it != params.end()) {
|
||||
for (auto& key : optionalData) {
|
||||
if (query.hasQueryItem(key)) {
|
||||
subobject.insert(key, query.queryItemValue(key));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
auto params = connection->parseUrlEncodedForm();
|
||||
|
||||
for (auto& key : requiredData) {
|
||||
auto it = params.find(key);
|
||||
if (it == params.end()) {
|
||||
auto error = "Domain Server: Bad request, expected param '" + key + "'";
|
||||
connection->respond(HTTPConnection::StatusCode400, error.toLatin1());
|
||||
return true;
|
||||
}
|
||||
subobject.insert(key, it.value());
|
||||
}
|
||||
|
||||
for (auto& key : optionalData) {
|
||||
auto it = params.find(key);
|
||||
if (it != params.end()) {
|
||||
subobject.insert(key, it.value());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
QJsonObject root;
|
||||
|
@ -2296,12 +2317,12 @@ bool DomainServer::handleHTTPRequest(HTTPConnection* connection, const QUrl& url
|
|||
|
||||
return true;
|
||||
} else if (url.path() == URI_API_DOMAINS) {
|
||||
return forwardMetaverseAPIRequest(connection, "/api/v1/domains", "");
|
||||
return forwardMetaverseAPIRequest(connection, url, "/api/v1/domains", "");
|
||||
} else if (url.path().startsWith(URI_API_DOMAINS_ID)) {
|
||||
auto id = url.path().mid(URI_API_DOMAINS_ID.length());
|
||||
return forwardMetaverseAPIRequest(connection, "/api/v1/domains/" + id, "", {}, {}, false);
|
||||
return forwardMetaverseAPIRequest(connection, url, "/api/v1/domains/" + id, "", {}, {}, false);
|
||||
} else if (url.path() == URI_API_PLACES) {
|
||||
return forwardMetaverseAPIRequest(connection, "/api/v1/user/places", "");
|
||||
return forwardMetaverseAPIRequest(connection, url, "/api/v1/user/places", "");
|
||||
} else {
|
||||
// check if this is for json stats for a node
|
||||
const QString NODE_JSON_REGEX_STRING = QString("\\%1\\/(%2).json\\/?$").arg(URI_NODES).arg(UUID_REGEX_STRING);
|
||||
|
@ -2438,7 +2459,7 @@ bool DomainServer::handleHTTPRequest(HTTPConnection* connection, const QUrl& url
|
|||
}
|
||||
|
||||
} else if (url.path() == URI_API_DOMAINS) {
|
||||
return forwardMetaverseAPIRequest(connection, "/api/v1/domains", "domain", { "label" });
|
||||
return forwardMetaverseAPIRequest(connection, url, "/api/v1/domains", "domain", { "label" });
|
||||
|
||||
} else if (url.path().startsWith(URI_API_BACKUPS_RECOVER)) {
|
||||
auto id = url.path().mid(QString(URI_API_BACKUPS_RECOVER).length());
|
||||
|
@ -2465,7 +2486,7 @@ bool DomainServer::handleHTTPRequest(HTTPConnection* connection, const QUrl& url
|
|||
return true;
|
||||
}
|
||||
auto domainID = domainSetting.toString();
|
||||
return forwardMetaverseAPIRequest(connection, "/api/v1/domains/" + domainID, "domain",
|
||||
return forwardMetaverseAPIRequest(connection, url, "/api/v1/domains/" + domainID, "domain",
|
||||
{ }, { "network_address", "network_port", "label" });
|
||||
} else if (url.path() == URI_API_PLACES) {
|
||||
auto accessTokenVariant = _settingsManager.valueForKeyPath(ACCESS_TOKEN_KEY_PATH);
|
||||
|
|
|
@ -228,6 +228,7 @@ private:
|
|||
bool processPendingContent(HTTPConnection* connection, QString itemName, QString filename, QByteArray dataChunk);
|
||||
|
||||
bool forwardMetaverseAPIRequest(HTTPConnection* connection,
|
||||
const QUrl& requestUrl,
|
||||
const QString& metaversePath,
|
||||
const QString& requestSubobject,
|
||||
std::initializer_list<QString> requiredData = { },
|
||||
|
|
|
@ -176,7 +176,7 @@ QList<FormData> HTTPConnection::parseFormData() const {
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
QByteArray start = "--" + boundary;
|
||||
QByteArray end = "\r\n--" + boundary + "--\r\n";
|
||||
|
||||
|
@ -394,6 +394,6 @@ void HTTPConnection::readContent() {
|
|||
if (_requestContent->bytesLeftToWrite() == 0) {
|
||||
_socket->disconnect(this, SLOT(readContent()));
|
||||
|
||||
_parentManager->handleHTTPRequest(this, _requestUrl.path());
|
||||
_parentManager->handleHTTPRequest(this, _requestUrl);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue