Compare commits

...

10 Commits

Author SHA1 Message Date
Mohamed Sohail 43b7800ed6
fix: phin handle 400 empty body
phin doesn't throw on 400 and instead passes empty body to tg
2022-01-18 19:39:15 +03:00
Mohamed Sohail 30b60899d5
tg fix: (release v0.3.0) phone number formats
* on tg desktop phones are prepended with a "+"
* on tg phone, no "+"
2022-01-18 19:15:24 +03:00
Mohamed Sohail 99f9328afd
pkg: bump v0.2.6 2022-01-18 18:49:45 +03:00
Mohamed Sohail 1c7268e1a3
fix: remove phone check 2022-01-18 18:49:08 +03:00
Mohamed Sohail 0e1fbfeb1b
release: v0.2.5 2022-01-18 15:57:00 +03:00
Mohamed Sohail 4530c7105d
fix: tg contact behaviour
* sometimes  atg update does not include a plus symbol
2022-01-18 15:51:11 +03:00
Mohamed Sohail aace2e98e1
release: v0.2.4 2022-01-18 14:57:24 +03:00
Mohamed Sohail f61500f3e6
fix: add timeout to request
* incase the ussd-server is down or unresponsive, return a message to tg
2022-01-18 14:50:20 +03:00
Mohamed Sohail 05e441f6a1
release: v0.2.3 2022-01-17 18:35:09 +03:00
Mohamed Sohail 368f297c6b
fix: escape dot char in regex 2022-01-17 18:34:54 +03:00
5 changed files with 54 additions and 10 deletions

View File

@ -1,6 +1,6 @@
{
"name": "ussd-tg-proxy",
"version": "0.2.2",
"version": "0.3.1",
"description": "ussd-tg-proxy",
"main": "src/index.js",
"repository": "https://git.grassecon.net/grassrootseconomics/ussd-tg-proxy.git",

View File

@ -77,12 +77,11 @@ bot.on("msg:contact", async (ctx) => {
log.debug(ctx.update, "msg:contact received");
const contact = ctx.msg.contact;
if (ctx.from.id === contact.user_id) {
if (contact.phone_number.slice(0, 4) !== "+254") {
return ctx.reply("Sarafu is only available in Kenya at the moment.");
}
await cache.set(contact.user_id, contact.phone_number.slice(1));
if (
ctx.from.id === contact.user_id &&
util.isKenyanNumber(contact.phone_number)
) {
await cache.set(contact.user_id, contact.phone_number);
return ctx.reply(
"Phone number successfully linked. /start the bot again to access your Sarafu account."

View File

@ -8,6 +8,7 @@ async function proxy(sessionId, phone, input = "") {
url: config.get("USSD_ENDPOINT"),
method: "POST",
parse: "string",
timeout: 3000,
form: {
sessionId: sessionId,
phoneNumber: phone,
@ -20,7 +21,10 @@ async function proxy(sessionId, phone, input = "") {
try {
const { body } = await phin(requestOptions);
log.debug({ body: body }, "response body");
return body;
if (body.length > 1) {
return body;
}
throw new Error("empty body");
} catch (error) {
log.error(error);
return "ERR Something went wrong, try again later.";

View File

@ -1,5 +1,5 @@
// this regex extracts ussd reply options
const regex = /\s(\d{1,2}).\s/g;
const regex = /\s(\d{1,2})\.\s/g;
// TODO: converts the text to a telegram keyboard
function createKeyboard(input) {
@ -15,7 +15,20 @@ function parseUssdResponse(input) {
};
}
function isKenyanNumber(input) {
if (input.substr(0, 1) === "+") {
input = input.split("+")[1];
}
if (input.substr(0, 3) === "254") {
return true;
}
return false;
}
module.exports = {
createKeyboard,
parseUssdResponse,
isKenyanNumber,
};

View File

@ -3,7 +3,7 @@ const test = require("tap").test;
const util = require("../src/util");
test("util", (t) => {
t.plan(4);
t.plan(8);
t.test("keyboard from single digit reply options", (t) => {
const rawText = `CON Balance 80.0 GFT
@ -66,4 +66,32 @@ test("util", (t) => {
t.same(output, expect);
t.end();
});
t.test("kenyan number formatted", (t) => {
const number = "+254700123456";
t.equal(util.isKenyanNumber(number), true);
t.end();
});
t.test("kenyan number unformatted", (t) => {
const number = "254700123456";
t.equal(util.isKenyanNumber(number), true);
t.end();
});
t.test("non kenyan number formatted", (t) => {
const number = "+441632960198";
t.equal(util.isKenyanNumber(number), false);
t.end();
});
t.test("non kenyan number unformatted", (t) => {
const number = "12029182132";
t.equal(util.isKenyanNumber(number), false);
t.end();
});
});