2022-03-30 01:49:45 +08:00
< template >
< div >
< h4 class = "mt-4" > Cloudflare Tunnel < / h4 >
< div class = "my-3" >
< div >
cloudflared :
< span v-if = "installed === true" class="text-primary" > {{ $ t ( " Installed " ) }} < / span >
< span v -else -if = " installed = = = false " class = "text-danger" > { { $t ( "Not installed" ) } } < / span >
< / div >
< div >
{ { $t ( "Status" ) } } :
< span v-if = "running" class="text-primary" > {{ $ t ( " Running " ) }} < / span >
< span v -else -if = " ! running " class = "text-danger" > { { $t ( "Not running" ) } } < / span >
< / div >
< div v-if = "false" >
{ { message } }
< / div >
2022-03-30 11:59:49 +08:00
< div v-if = "errorMessage" class="mt-3" >
2022-04-04 17:24:22 +08:00
{ { $t ( "Message:" ) } }
2022-03-30 01:49:45 +08:00
< textarea v-model = "errorMessage" class="form-control" readonly > < / textarea >
< / div >
2022-04-04 11:33:02 +08:00
< i18n-t v-if = "installed === false" tag="p" keypath="wayToGetCloudflaredURL" >
< a
href = "https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/installation/"
target = "_blank"
> { { $t ( "cloudflareWebsite" ) } } < / a >
< / i18n-t >
2022-03-30 01:49:45 +08:00
< / div >
<!-- If installed show token input -- >
< div v-if = "installed" class="mb-2" >
< div class = "mb-4" >
< label class = "form-label" for = "cloudflareTunnelToken" >
Cloudflare Tunnel { { $t ( "Token" ) } }
< / label >
< HiddenInput
id = "cloudflareTunnelToken"
v - model = "cloudflareTunnelToken"
autocomplete = "one-time-code"
2022-03-30 11:59:49 +08:00
: readonly = "running"
2022-03-30 01:49:45 +08:00
/ >
< div class = "form-text" >
2022-03-30 11:59:49 +08:00
< div v-if = "cloudflareTunnelToken" class="mb-3" >
< span v-if = "!running" class="remove-token" @click="removeToken" > {{ $ t ( " Remove Token " ) }} < / span >
< / div >
2022-04-04 11:33:02 +08:00
{ { $t ( "Don't know how to get the token? Please read the guide:" ) } } < br / >
2022-03-30 01:49:45 +08:00
< a href = "https://github.com/louislam/uptime-kuma/wiki/Reverse-Proxy-with-Cloudflare-Tunnel" target = "_blank" >
https : //github.com/louislam/uptime-kuma/wiki/Reverse-Proxy-with-Cloudflare-Tunnel
< / a >
< / div >
< / div >
< div >
< button v-if = "!running" class="btn btn-primary" type="submit" @click="start" >
{ { $t ( "Start" ) } } cloudflared
< / button >
2022-03-30 11:59:49 +08:00
< button v-if = "running" class="btn btn-danger" type="submit" @click="$refs.confirmStop.show();" >
2022-03-30 01:49:45 +08:00
{ { $t ( "Stop" ) } } cloudflared
< / button >
2022-03-30 11:59:49 +08:00
< Confirm ref = "confirmStop" btn -style = " btn -danger " : yes -text = " $ t ( ' Stop ' ) + ' cloudflared ' " :no-text = "$t('Cancel')" @yes ="stop" >
2022-04-04 11:33:02 +08:00
{ { $t ( "The current connection may be lost if you are currently connecting via Cloudflare Tunnel. Are you sure want to stop it? Type your current password to confirm it." ) } }
2022-03-30 11:59:49 +08:00
2022-06-18 19:06:03 +08:00
< p class = "mt-2" > { { $t ( "disableCloudflaredNoAuthMsg" ) } } < / p >
< div v-if = "!settings.disableAuth" class="mt-3" >
2022-03-30 11:59:49 +08:00
< label for = "current-password2" class = "form-label" >
{ { $t ( "Current Password" ) } }
< / label >
< input
id = "current-password2"
v - model = "currentPassword"
type = "password"
class = "form-control"
required
/ >
< / div >
< / Confirm >
2022-03-30 01:49:45 +08:00
< / div >
< / div >
2022-04-04 11:33:02 +08:00
< h4 class = "mt-4" > { { $t ( "Other Software" ) } } < / h4 >
2022-03-30 01:49:45 +08:00
< div >
2022-04-04 11:33:02 +08:00
{ { $t ( "For example: nginx, Apache and Traefik." ) } } < br / >
{ { $t ( "Please read" ) } } < a href = "https://github.com/louislam/uptime-kuma/wiki/Reverse-Proxy" target = "_blank" > https : //github.com/louislam/uptime-kuma/wiki/Reverse-Proxy</a>.
2022-03-30 01:49:45 +08:00
< / div >
2022-07-12 22:45:54 -04:00
< h4 class = "my-4" > { { $t ( "HTTP Headers" ) } } < / h4 >
< div class = "my-3" >
< label class = "form-label" >
{ { $t ( "Trust Proxy" ) } }
< / label >
< div class = "form-check" >
< input
id = "trustProxyYes"
v - model = "settings.trustProxy"
class = "form-check-input"
type = "radio"
2022-07-31 18:11:40 +08:00
name = "trustProxyYes"
2022-07-12 22:45:54 -04:00
: value = "true"
required
/ >
< label class = "form-check-label" for = "trustProxyYes" >
2022-07-31 18:11:40 +08:00
{ { $t ( "Yes" ) } }
2022-07-12 22:45:54 -04:00
< / label >
< / div >
< div class = "form-check" >
< input
id = "trustProxyNo"
v - model = "settings.trustProxy"
class = "form-check-input"
type = "radio"
name = "flexRadioDefault"
: value = "false"
required
/ >
2022-07-31 18:11:40 +08:00
< label class = "form-check-label" for = "trustProxyNo" >
{ { $t ( "No" ) } }
2022-07-12 22:45:54 -04:00
< / label >
< / div >
2022-07-31 18:11:40 +08:00
< div class = "form-text" >
{ { $t ( "trustProxyDescription" ) } }
< / div >
2022-07-12 22:45:54 -04:00
< / div >
< div >
< button class = "btn btn-primary" type = "submit" @click ="saveSettings()" >
{ { $t ( "Save" ) } }
< / button >
< / div >
2022-03-30 01:49:45 +08:00
< / div >
< / template >
< script >
import HiddenInput from "../../components/HiddenInput.vue" ;
2022-03-30 11:59:49 +08:00
import Confirm from "../Confirm.vue" ;
2022-03-30 01:49:45 +08:00
const prefix = "cloudflared_" ;
export default {
components : {
HiddenInput ,
2022-03-30 11:59:49 +08:00
Confirm
2022-03-30 01:49:45 +08:00
} ,
data ( ) {
2022-03-30 11:59:49 +08:00
// See /src/mixins/socket.js
2022-03-30 01:49:45 +08:00
return this . $root . cloudflared ;
} ,
computed : {
2022-06-18 19:06:03 +08:00
settings ( ) {
return this . $parent . $parent . $parent . settings ;
} ,
2022-07-12 22:45:54 -04:00
saveSettings ( ) {
return this . $parent . $parent . $parent . saveSettings ;
} ,
settingsLoaded ( ) {
return this . $parent . $parent . $parent . settingsLoaded ;
} ,
2022-03-30 01:49:45 +08:00
} ,
watch : {
} ,
2022-03-30 11:59:49 +08:00
created ( ) {
2022-03-30 01:49:45 +08:00
this . $root . getSocket ( ) . emit ( prefix + "join" ) ;
} ,
unmounted ( ) {
this . $root . getSocket ( ) . emit ( prefix + "leave" ) ;
} ,
methods : {
2022-06-01 23:44:10 +01:00
/** Start the Cloudflare tunnel */
2022-03-30 01:49:45 +08:00
start ( ) {
this . $root . getSocket ( ) . emit ( prefix + "start" , this . cloudflareTunnelToken ) ;
} ,
2022-06-01 23:44:10 +01:00
/** Stop the Cloudflare tunnel */
2022-03-30 01:49:45 +08:00
stop ( ) {
2022-03-30 11:59:49 +08:00
this . $root . getSocket ( ) . emit ( prefix + "stop" , this . currentPassword , ( res ) => {
this . $root . toastRes ( res ) ;
} ) ;
2022-03-30 01:49:45 +08:00
} ,
2022-06-01 23:44:10 +01:00
/** Remove the token for the Cloudflare tunnel */
2022-03-30 11:59:49 +08:00
removeToken ( ) {
this . $root . getSocket ( ) . emit ( prefix + "removeToken" ) ;
this . cloudflareTunnelToken = "" ;
}
2022-03-30 01:49:45 +08:00
}
} ;
< / script >
< style lang = "scss" scoped >
2022-03-30 11:59:49 +08:00
. remove - token {
text - decoration : underline ;
cursor : pointer ;
2022-03-30 01:49:45 +08:00
}
< / style >