mirror of
https://github.com/TeaOSLab/EdgeAdmin.git
synced 2026-04-11 10:35:20 +08:00
[HTTPS]可以直接点击按钮申请免费证书
This commit is contained in:
@@ -1,10 +1,16 @@
|
||||
Vue.component("ssl-certs-box", {
|
||||
props: ["v-certs", "v-protocol", "v-view-size", "v-single-mode"],
|
||||
props: [
|
||||
"v-certs", // 证书列表
|
||||
"v-protocol", // 协议:https|tls
|
||||
"v-view-size", // 弹窗尺寸
|
||||
"v-single-mode" // 单证书模式
|
||||
],
|
||||
data: function () {
|
||||
let certs = this.vCerts
|
||||
if (certs == null) {
|
||||
certs = []
|
||||
}
|
||||
|
||||
return {
|
||||
certs: certs
|
||||
}
|
||||
@@ -82,7 +88,7 @@ Vue.component("ssl-certs-box", {
|
||||
</div>
|
||||
<div v-if="buttonsVisible()">
|
||||
<button class="ui button tiny" type="button" @click.prevent="selectCert()">选择已有证书</button>
|
||||
<button class="ui button tiny" type="button" @click.prevent="uploadCert()">上传新证书</button>
|
||||
<button class="ui button tiny" type="button" @click.prevent="uploadCert()">上传新证书</button>
|
||||
</div>
|
||||
</div>`
|
||||
})
|
||||
@@ -1,5 +1,5 @@
|
||||
Vue.component("ssl-config-box", {
|
||||
props: ["v-ssl-policy", "v-protocol"],
|
||||
props: ["v-ssl-policy", "v-protocol", "v-server-id"],
|
||||
created: function () {
|
||||
let that = this
|
||||
setTimeout(function () {
|
||||
@@ -119,6 +119,25 @@ Vue.component("ssl-config-box", {
|
||||
})
|
||||
},
|
||||
|
||||
// 申请证书
|
||||
requestCert: function () {
|
||||
// 已经在证书中的域名
|
||||
let excludeServerNames = []
|
||||
if (this.policy != null && this.policy.certs.length > 0) {
|
||||
this.policy.certs.forEach(function (cert) {
|
||||
excludeServerNames.$pushAll(cert.dnsNames)
|
||||
})
|
||||
}
|
||||
|
||||
let that = this
|
||||
teaweb.popup("/servers/server/settings/https/requestCertPopup?serverId=" + this.vServerId + "&excludeServerNames=" + excludeServerNames.join(","), {
|
||||
callback: function () {
|
||||
that.policy.certRefs.push(resp.data.certRef)
|
||||
that.policy.certs.push(resp.data.cert)
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
// 更多选项
|
||||
changeOptionsVisible: function () {
|
||||
this.moreOptionsVisible = !this.moreOptionsVisible
|
||||
@@ -338,7 +357,8 @@ Vue.component("ssl-config-box", {
|
||||
<div class="ui divider"></div>
|
||||
</div>
|
||||
<button class="ui button tiny" type="button" @click.prevent="selectCert()">选择已有证书</button>
|
||||
<button class="ui button tiny" type="button" @click.prevent="uploadCert()">上传新证书</button>
|
||||
<button class="ui button tiny" type="button" @click.prevent="uploadCert()">上传新证书</button>
|
||||
<button class="ui button tiny" type="button" @click.prevent="requestCert()" v-if="vServerId != null && vServerId > 0">申请免费证书</button>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
</table>
|
||||
|
||||
<!-- SSL配置 -->
|
||||
<ssl-config-box :v-ssl-policy="httpsConfig.sslPolicy" :v-protocol="'https'" v-show="httpsConfig.isOn"></ssl-config-box>
|
||||
<ssl-config-box :v-ssl-policy="httpsConfig.sslPolicy" :v-protocol="'https'" v-show="httpsConfig.isOn" :v-server-id="serverId"></ssl-config-box>
|
||||
|
||||
<submit-btn></submit-btn>
|
||||
</form>
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
{$layout "layout_popup"}
|
||||
|
||||
<h3>申请免费证书</h3>
|
||||
<form method="post" class="ui form" data-tea-success="success" data-tea-action="$" data-tea-timeout="300" data-tea-before="beforeSubmit" data-tea-fail="fail">
|
||||
<csrf-token></csrf-token>
|
||||
|
||||
<table class="ui table definition selectable">
|
||||
<tr>
|
||||
<td class="title">证书包含的域名 *</td>
|
||||
<td>
|
||||
<span v-if="serverNames.length == 0" class="disabled">还没有设置域名,暂时不能申请。</span>
|
||||
<div v-if="serverNames.length > 0">
|
||||
<div v-for="(serverName, index) in serverNames" class="ui tiny basic label">
|
||||
<input type="hidden" name="serverNames" :value="serverName"/>
|
||||
{{serverName}}
|
||||
<a href="" title="删除" @click.prevent="remove(index)"><i class="icon remove"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>证书用户 *</td>
|
||||
<td>
|
||||
<div v-if="users.length > 0">
|
||||
<select class="ui dropdown auto-width" name="userId" v-model="userId">
|
||||
<option value="0">[请选择]</option>
|
||||
<option v-for="user in users" :value="user.id">{{user.email}}{{user.description}}</option>>
|
||||
</select>
|
||||
<p class="comment">用来申请证书的用户。</p>
|
||||
</div>
|
||||
|
||||
<div v-if="users.length == 0">
|
||||
<input type="text" name="userEmail" maxlength="100" placeholder="用户E-mail" ref="focus"/>
|
||||
<p class="comment">用来申请证书的用户邮箱,可以任意填写,只要格式正确即可。</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<submit-btn v-if="!isRequesting">提交</submit-btn>
|
||||
<button class="ui button" type="button" v-if="isRequesting">处理中...</button>
|
||||
</form>
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
Tea.context(function () {
|
||||
this.isRequesting = false
|
||||
this.userId = 0
|
||||
|
||||
this.remove = function (index) {
|
||||
this.serverNames.$remove(index)
|
||||
}
|
||||
|
||||
this.beforeSubmit = function () {
|
||||
this.isRequesting = true
|
||||
}
|
||||
|
||||
this.fail = function (resp) {
|
||||
this.isRequesting = false
|
||||
teaweb.warn(resp.message)
|
||||
if (resp.data.acmeUser != null) {
|
||||
this.users.push({
|
||||
id: resp.data.acmeUser.id,
|
||||
email: resp.data.acmeUser.email,
|
||||
description: ""
|
||||
})
|
||||
this.userId = resp.data.acmeUser.id
|
||||
}
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user