mirror of https://github.com/louislam/uptime-kuma
				
				
				
			
		
			
				
	
	
		
			207 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			Vue
		
	
	
			
		
		
	
	
			207 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			Vue
		
	
	
<template>
 | 
						|
    <form @submit.prevent="submit">
 | 
						|
        <div ref="modal" class="modal fade" tabindex="-1" data-bs-backdrop="static">
 | 
						|
            <div class="modal-dialog">
 | 
						|
                <div class="modal-content">
 | 
						|
                    <div class="modal-header">
 | 
						|
                        <h5 id="exampleModalLabel" class="modal-title">
 | 
						|
                            {{ $t("Setup Proxy") }}
 | 
						|
                        </h5>
 | 
						|
                        <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close" />
 | 
						|
                    </div>
 | 
						|
                    <div class="modal-body">
 | 
						|
                        <div class="mb-3">
 | 
						|
                            <label for="proxy-protocol" class="form-label">{{ $t("Proxy Protocol") }}</label>
 | 
						|
                            <select id="proxy-protocol" v-model="proxy.protocol" class="form-select">
 | 
						|
                                <option value="https">HTTPS</option>
 | 
						|
                                <option value="http">HTTP</option>
 | 
						|
                                <option value="socks">SOCKS</option>
 | 
						|
                                <option value="socks5">SOCKS v5</option>
 | 
						|
                                <option value="socks4">SOCKS v4</option>
 | 
						|
                            </select>
 | 
						|
                        </div>
 | 
						|
 | 
						|
                        <div class="mb-3">
 | 
						|
                            <label for="proxy-host" class="form-label">{{ $t("Proxy Server") }}</label>
 | 
						|
                            <div class="d-flex">
 | 
						|
                                <input id="proxy-host" v-model="proxy.host" type="text" class="form-control" required :placeholder="$t('Server Address')">
 | 
						|
                                <input v-model="proxy.port" type="number" class="form-control ms-2" style="width: 100px;" required min="1" max="65535" :placeholder="$t('Port')">
 | 
						|
                            </div>
 | 
						|
                        </div>
 | 
						|
 | 
						|
                        <div class="mb-3">
 | 
						|
                            <div class="form-check form-switch">
 | 
						|
                                <input id="mark-auth" v-model="proxy.auth" class="form-check-input" type="checkbox">
 | 
						|
                                <label for="mark-auth" class="form-check-label">{{ $t("Proxy server has authentication") }}</label>
 | 
						|
                            </div>
 | 
						|
                        </div>
 | 
						|
 | 
						|
                        <div v-if="proxy.auth" class="mb-3">
 | 
						|
                            <label for="proxy-username" class="form-label">{{ $t("User") }}</label>
 | 
						|
                            <input id="proxy-username" v-model="proxy.username" type="text" class="form-control" required>
 | 
						|
                        </div>
 | 
						|
 | 
						|
                        <div v-if="proxy.auth" class="mb-3">
 | 
						|
                            <label for="proxy-password" class="form-label">{{ $t("Password") }}</label>
 | 
						|
                            <input id="proxy-password" v-model="proxy.password" type="password" class="form-control" required>
 | 
						|
                        </div>
 | 
						|
 | 
						|
                        <div class="mb-3 mt-4">
 | 
						|
                            <hr class="dropdown-divider mb-4">
 | 
						|
 | 
						|
                            <div class="form-check form-switch">
 | 
						|
                                <input id="mark-active" v-model="proxy.active" class="form-check-input" type="checkbox">
 | 
						|
                                <label for="mark-active" class="form-check-label">{{ $t("enabled") }}</label>
 | 
						|
                            </div>
 | 
						|
                            <div class="form-text">
 | 
						|
                                {{ $t("enableProxyDescription") }}
 | 
						|
                            </div>
 | 
						|
 | 
						|
                            <br />
 | 
						|
 | 
						|
                            <div class="form-check form-switch">
 | 
						|
                                <input id="mark-default" v-model="proxy.default" class="form-check-input" type="checkbox">
 | 
						|
                                <label for="mark-default" class="form-check-label">{{ $t("setAsDefault") }}</label>
 | 
						|
                            </div>
 | 
						|
                            <div class="form-text">
 | 
						|
                                {{ $t("setAsDefaultProxyDescription") }}
 | 
						|
                            </div>
 | 
						|
 | 
						|
                            <br />
 | 
						|
 | 
						|
                            <div class="form-check form-switch">
 | 
						|
                                <input id="apply-existing" v-model="proxy.applyExisting" class="form-check-input" type="checkbox">
 | 
						|
                                <label class="form-check-label" for="apply-existing">{{ $t("Apply on all existing monitors") }}</label>
 | 
						|
                            </div>
 | 
						|
                        </div>
 | 
						|
                    </div>
 | 
						|
 | 
						|
                    <div class="modal-footer">
 | 
						|
                        <button v-if="id" type="button" class="btn btn-danger" :disabled="processing" @click="deleteConfirm">
 | 
						|
                            {{ $t("Delete") }}
 | 
						|
                        </button>
 | 
						|
                        <button type="submit" class="btn btn-primary" :disabled="processing">
 | 
						|
                            <div v-if="processing" class="spinner-border spinner-border-sm me-1"></div>
 | 
						|
                            {{ $t("Save") }}
 | 
						|
                        </button>
 | 
						|
                    </div>
 | 
						|
                </div>
 | 
						|
            </div>
 | 
						|
        </div>
 | 
						|
    </form>
 | 
						|
 | 
						|
    <Confirm ref="confirmDelete" btn-style="btn-danger" :yes-text="$t('Yes')" :no-text="$t('No')" @yes="deleteProxy">
 | 
						|
        {{ $t("deleteProxyMsg") }}
 | 
						|
    </Confirm>
 | 
						|
</template>
 | 
						|
 | 
						|
<script lang="ts">
 | 
						|
import { Modal } from "bootstrap";
 | 
						|
 | 
						|
import Confirm from "./Confirm.vue";
 | 
						|
 | 
						|
export default {
 | 
						|
    components: {
 | 
						|
        Confirm,
 | 
						|
    },
 | 
						|
    props: {},
 | 
						|
    emits: [ "added" ],
 | 
						|
    data() {
 | 
						|
        return {
 | 
						|
            model: null,
 | 
						|
            processing: false,
 | 
						|
            id: null,
 | 
						|
            proxy: {
 | 
						|
                protocol: null,
 | 
						|
                host: null,
 | 
						|
                port: null,
 | 
						|
                auth: false,
 | 
						|
                username: null,
 | 
						|
                password: null,
 | 
						|
                active: false,
 | 
						|
                default: false,
 | 
						|
                applyExisting: false,
 | 
						|
            }
 | 
						|
        };
 | 
						|
    },
 | 
						|
 | 
						|
    mounted() {
 | 
						|
        this.modal = new Modal(this.$refs.modal);
 | 
						|
    },
 | 
						|
 | 
						|
    methods: {
 | 
						|
        deleteConfirm() {
 | 
						|
            this.modal.hide();
 | 
						|
            this.$refs.confirmDelete.show();
 | 
						|
        },
 | 
						|
 | 
						|
        show(proxyID) {
 | 
						|
            if (proxyID) {
 | 
						|
                this.id = proxyID;
 | 
						|
 | 
						|
                for (let proxy of this.$root.proxyList) {
 | 
						|
                    if (proxy.id === proxyID) {
 | 
						|
                        this.proxy = proxy;
 | 
						|
                        break;
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            } else {
 | 
						|
                this.id = null;
 | 
						|
                this.proxy = {
 | 
						|
                    protocol: "https",
 | 
						|
                    host: null,
 | 
						|
                    port: null,
 | 
						|
                    auth: false,
 | 
						|
                    username: null,
 | 
						|
                    password: null,
 | 
						|
                    active: true,
 | 
						|
                    default: false,
 | 
						|
                    applyExisting: false,
 | 
						|
                };
 | 
						|
            }
 | 
						|
 | 
						|
            this.modal.show();
 | 
						|
        },
 | 
						|
 | 
						|
        submit() {
 | 
						|
            this.processing = true;
 | 
						|
            this.$root.getSocket().emit("addProxy", this.proxy, this.id, (res) => {
 | 
						|
                this.$root.toastRes(res);
 | 
						|
                this.processing = false;
 | 
						|
 | 
						|
                if (res.ok) {
 | 
						|
                    this.modal.hide();
 | 
						|
 | 
						|
                    // Emit added event, doesn't emit edit.
 | 
						|
                    if (! this.id) {
 | 
						|
                        this.$emit("added", res.id);
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            });
 | 
						|
        },
 | 
						|
 | 
						|
        deleteProxy() {
 | 
						|
            this.processing = true;
 | 
						|
            this.$root.getSocket().emit("deleteProxy", this.id, (res) => {
 | 
						|
                this.$root.toastRes(res);
 | 
						|
                this.processing = false;
 | 
						|
 | 
						|
                if (res.ok) {
 | 
						|
                    this.modal.hide();
 | 
						|
                }
 | 
						|
            });
 | 
						|
        },
 | 
						|
    },
 | 
						|
};
 | 
						|
</script>
 | 
						|
 | 
						|
<style lang="scss" scoped>
 | 
						|
@import "../assets/vars.scss";
 | 
						|
 | 
						|
.dark {
 | 
						|
    .modal-dialog .form-text, .modal-dialog p {
 | 
						|
        color: $dark-font-color;
 | 
						|
    }
 | 
						|
}
 | 
						|
</style>
 |