diaspora/app/assets/javascripts/app/views/pod_entry_view.js
Benjamin Neff acb91c79d2 improve pod connection check
* use port for check
* respect entries in /etc/hosts
* test /.well-known/host-meta
* don't allow redirects to other domains
2016-03-05 02:57:11 +01:00

84 lines
2.4 KiB
JavaScript

// @license magnet:?xt=urn:btih:0b31508aeb0634b347b8270c7bee4d411b5d4109&dn=agpl-3.0.txt AGPL-v3-or-Later
app.views.PodEntry = app.views.Base.extend({
templateName: "pod_table_entry",
tagName: "tr",
events: {
"click .more": "toggleMore",
"click .recheck": "recheckPod"
},
tooltipSelector: ".ssl-status i, .actions i",
className: function() {
if( this.model.get("offline") ) { return "bg-danger"; }
if( this.model.get("status")==="version_failed" ) { return "bg-warning"; }
if( this.model.get("status")==="no_errors" ) { return "bg-success"; }
},
initialize: function(opts) {
this.parent = opts.parent;
this.rendered = false;
this.model.on("change", this.render, this);
},
presenter: function() {
return _.extend({}, this.defaultPresenter(), {
/* jshint camelcase: false */
is_unchecked: (this.model.get("status")==="unchecked"),
has_no_errors: (this.model.get("status")==="no_errors"),
has_errors: (this.model.get("status")!=="no_errors"),
status_text: Diaspora.I18n.t("admin.pods.states."+this.model.get("status")),
pod_url: (this.model.get("ssl") ? "https" : "http") + "://" + this.model.get("host") +
(this.model.get("port") ? ":" + this.model.get("port") : ""),
response_time_fmt: this._fmtResponseTime()
/* jshint camelcase: true */
});
},
postRenderTemplate: function() {
if( !this.rendered ) {
this.parent.appendChild(this.el);
}
this.rendered = true;
return this;
},
toggleMore: function() {
this.$(".details").toggle();
return false;
},
recheckPod: function() {
var self = this;
this.$el.addClass("checking");
this.model.recheck()
.done(function(){
app.flashMessages.success(Diaspora.I18n.t("admin.pods.recheck.success"));
})
.fail(function(){
app.flashMessages.error(Diaspora.I18n.t("admin.pods.recheck.failure"));
})
.always(function(){
self.$el
.removeClass("bg-danger bg-warning bg-success")
.addClass(_.result(self, "className"))
.removeClass("checking");
});
return false;
},
_fmtResponseTime: function() {
if( this.model.get("response_time")===-1 ) {
return Diaspora.I18n.t("admin.pods.not_available");
}
return Diaspora.I18n.t("admin.pods.ms", {count: this.model.get("response_time")});
}
});
// @license-end