@@ -683,6 +712,31 @@ Wireguard Clients
});
}
+ // submitTelegramClient function for sending a telegram message with the configuration to the client
+ function submitTelegramClient() {
+ const client_id = $("#tg_client_id").val();
+ const userid = $("#tg_client_userid").val();
+ const data = {"id": client_id, "userid": userid};
+ $.ajax({
+ cache: false,
+ method: 'POST',
+ url: '{{.basePath}}/send-telegram-client',
+ dataType: 'json',
+ contentType: "application/json",
+ data: JSON.stringify(data),
+ success: function(resp) {
+ $("#modal_telegram_client").modal('hide');
+ toastr.success('Sent config via telegram to client successfully');
+ // Refresh the home page (clients page) after sending email successfully
+ location.reload();
+ },
+ error: function(jqXHR, exception) {
+ const responseJson = jQuery.parseJSON(jqXHR.responseText);
+ toastr.error(responseJson['message']);
+ }
+ });
+ }
+
// submitEditClient function for updating an existing client
// This sends dialogue data to the back-end when user presses "Save"
// See e.g. routes.go:UpdateClient for where data is processed/verified.
@@ -745,6 +799,8 @@ Wireguard Clients
submitEditClient();
} else if (formId === "frm_email_client") {
submitEmailClient();
+ } else if (formId === "frm_telegram_client") {
+ submitTelegramClient();
}
}
@@ -781,6 +837,30 @@ Wireguard Clients
regenerateQRCode();
});
+ $("#modal_telegram_client").on('show.bs.modal', function (event) {
+ let modal = $(this);
+ const button = $(event.relatedTarget);
+ const client_id = button.data('clientid');
+ $.ajax({
+ cache: false,
+ method: 'GET',
+ url: '{{.basePath}}/api/client/' + client_id,
+ dataType: 'json',
+ contentType: "application/json",
+ success: function (resp) {
+ const client = resp.Client;
+
+ modal.find(".modal-title").text("Send config to client " + client.name);
+ modal.find("#tg_client_id").val(client.id);
+ modal.find("#tg_client_userid").val(client.telegram_userid);
+ },
+ error: function (jqXHR, exception) {
+ const responseJson = jQuery.parseJSON(jqXHR.responseText);
+ toastr.error(responseJson['message']);
+ }
+ });
+ });
+
$(document).ready(function () {
$.validator.setDefaults({
submitHandler: function (form) {
@@ -836,6 +916,32 @@ Wireguard Clients
$(element).removeClass('is-invalid');
}
});
+ // Telegram client form validation
+ $("#frm_telegram_client").validate({
+ rules: {
+ tg_client_userid: {
+ required: true,
+ number: true,
+ },
+ },
+ messages: {
+ tg_client_userid: {
+ required: "Please enter a telegram userid",
+ number: "Please enter a valid telegram userid"
+ },
+ },
+ errorElement: 'span',
+ errorPlacement: function (error, element) {
+ error.addClass('invalid-feedback');
+ element.closest('.form-group').append(error);
+ },
+ highlight: function (element, errorClass, validClass) {
+ $(element).addClass('is-invalid');
+ },
+ unhighlight: function (element, errorClass, validClass) {
+ $(element).removeClass('is-invalid');
+ }
+ });
//
});
diff --git a/util/util.go b/util/util.go
index fa168fd..26a7c5e 100644
--- a/util/util.go
+++ b/util/util.go
@@ -19,6 +19,7 @@ import (
"time"
"github.com/ngoduykhanh/wireguard-ui/store"
+ "github.com/ngoduykhanh/wireguard-ui/telegram"
"golang.org/x/mod/sumdb/dirhash"
externalip "github.com/glendc/go-external-ip"
@@ -28,7 +29,7 @@ import (
)
// BuildClientConfig to create wireguard client config string
-func BuildClientConfig(client model.Client, server model.Server, setting model.GlobalSetting) string {
+var BuildClientConfig telegram.BuildClientConfig = func(client model.Client, server model.Server, setting model.GlobalSetting) string {
// Interface section
clientAddress := fmt.Sprintf("Address = %s\n", strings.Join(client.AllocatedIPs, ","))
clientPrivateKey := fmt.Sprintf("PrivateKey = %s\n", client.PrivateKey)