Repository: louislam/uptime-kuma
File: server/notification-providers/teltonika.js (JavaScript)

Code before:
        // Teltonika SMS gateway supports a max of 160 chars for its messages.
        const cleanMsg = msg.substring(0, 159);

        // Starting communications with the API from here on out.
        try {
            let axiosConfig = {
                headers: {
                    "Content-Type": "application/json",
                    "cache-control": "no-cache",
                    Accept: "application/json",
                },
            };

            // In many cases, Teltonika routers will be setup using a self-signed
            // certificate. Here we give them an option to disable certificate
            // validation. It's not desirable, but sometimes the only option.
            let unsafeAgent = "";
            if (notification.teltonikaUnsafeTls === true) {
                unsafeAgent = new https.Agent({
                    rejectUnauthorized: false, // Danger! Disables SSL verification
                });

                axiosConfig.httpsAgent = unsafeAgent;
            } else {
                unsafeAgent = undefined;
            }

            axiosConfig = this.getAxiosConfigWithProxy(axiosConfig);

            // Logging in, to get an access token.
            // API reference https://developers.teltonika-networks.com/reference/rut241/7.19.4/v1.11.1/authentication
            // Teltonika's API access tokens expire in 5 minutes, so we always get a new one.
            let loginData = {
                username: notification.teltonikaUsername,
                password: notification.teltonikaPassword,
            };

            let loginResp = await axios.post(loginUrl, loginData, axiosConfig);

            if (loginResp.data.success !== true) {
                throw Error("Login failed: " + loginResp.data.errors.error);
            }

            const teltonikaToken = "Bearer " + loginResp.data.data.token;

            // Sending the SMS.
            let smsData = {
                data: {
                    modem: notification.teltonikaModem,
                    number: notification.teltonikaPhoneNumber,
                    message: cleanMsg,

Review comment (security):
```suggestion
            if (notification.teltonikaUnsafeTls) {
                axiosConfig.httpsAgent = new https.Agent({
                    rejectUnauthorized: false, // Danger! Disables SSL verification
                });
            }
```

Code after:
        // Teltonika SMS gateway supports a max of 160 chars for its messages.
        const cleanMsg = msg.substring(0, 159);

        // Starting communications with the API from here on out.
        try {
            let axiosConfig = {
                headers: {
                    "Content-Type": "application/json",
                    "cache-control": "no-cache",
                    Accept: "application/json",
                },
            };

            // In many cases, Teltonika routers will be setup using a self-signed
            // certificate. Here we give them an option to disable certificate
            // validation. It's not desirable, but sometimes the only option.
            if (notification.teltonikaUnsafeTls) {
                axiosConfig.httpsAgent = new https.Agent({
                    rejectUnauthorized: false, // Danger! Disables SSL verification
                });
            }

            axiosConfig = this.getAxiosConfigWithProxy(axiosConfig);

            // Logging in, to get an access token.
            // API reference https://developers.teltonika-networks.com/reference/rut241/7.19.4/v1.11.1/authentication
            // Teltonika's API access tokens expire in 5 minutes, so we always get a new one.
            let loginData = {
                username: notification.teltonikaUsername,
                password: notification.teltonikaPassword,
            };

            let loginResp = await axios.post(loginUrl, loginData, axiosConfig);

            if (loginResp.data.success !== true) {
                throw Error("Login failed: " + loginResp.data.errors.error);
            }

            // Sending the SMS.
            let smsData = {
                data: {
                    modem: notification.teltonikaModem,
                    number: notification.teltonikaPhoneNumber,
                    message: cleanMsg,
                },
            };

            axiosConfig.headers.Authorization = "Bearer " + loginResp.data.data.token;

            let smsResp = await axios.post(smsUrl, smsData, axiosConfig);