diff --git a/package.json b/package.json index e8eb273..7c4fbfd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ussd-tg-proxy", - "version": "0.2.6", + "version": "0.3.0", "description": "ussd-tg-proxy", "main": "src/index.js", "repository": "https://git.grassecon.net/grassrootseconomics/ussd-tg-proxy.git", diff --git a/src/bot.js b/src/bot.js index f5f2402..e6b4176 100644 --- a/src/bot.js +++ b/src/bot.js @@ -77,8 +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) { - 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." diff --git a/src/util.js b/src/util.js index a6d2a20..15f3f1e 100644 --- a/src/util.js +++ b/src/util.js @@ -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, }; diff --git a/tests/util.test.js b/tests/util.test.js index 1b5ce72..780a092 100644 --- a/tests/util.test.js +++ b/tests/util.test.js @@ -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(); + }); });