Skip to content

Commit

Permalink
[API] Add Email/Domain Validation
Browse files Browse the repository at this point in the history
  • Loading branch information
MichelineMedhat committed Aug 26, 2019
1 parent b1476f4 commit 5bc192a
Show file tree
Hide file tree
Showing 3 changed files with 170 additions and 53 deletions.
69 changes: 54 additions & 15 deletions api/functions/index.js
Original file line number Diff line number Diff line change
@@ -1,27 +1,66 @@
const functions = require("firebase-functions");
const unicodeRange = require("unicode-range");
const { parse, tldExists } = require('tldjs');
const { getDomain } = require('tldjs');
const punycode = require('punycode');

exports.emailValidation = functions.https.onRequest((request, response) => {

var email = request.query.email.toString();
var regex = /.+@.+\..{2,}/
var exception = /[^$!%^&*()=+<>,;|\s]/g

var getRange = c => unicodeRange("U+" + c.charCodeAt(0).toString(16));
var range = getRange(email);
var isConsistent = ![...email].some(c => getRange(c) !== range);
var email = `${request.query.email}`
if (email === "" || email === "undefined") {
response.json({ message: "Provide email address!" })
return
}

var rangesRTL = [
"Arabic",
"Imperial Aramaic",
"Old Turkic",
"Hebrew",
"Old Persian"
];
var isRTL = rangesRTL.some(r => r === range)
var rawEmail = email.replace(/[@_.-]/g, "");

var getRange = c => unicodeRange(`U+${c.charCodeAt(0).toString(16)}`);
var range = getRange(rawEmail);
var isConsistent = ![...rawEmail].some(c => getRange(c) !== range);
var isEmail = regex.test(email) && exception.test(email)
var isTldExists = tldExists(email)
var isEmailValid = isConsistent && isEmail && isTldExists
var isDomainValid = isDomainValid(email)

response.json({
email,
range: isConsistent ? range : "MIXED",
isRTL: isConsistent ? isRTL : "MIXED",
isConsistent
isConsistent,
isEmail,
isTldExists,
isEmailValid,
isDomainValid
});

});
});

function isDomainValid(validating){
var isDomainLengthValid = true
var isTldLengthValid = true
var domain = getDomain(email)
var tldName = domain.split(".")[1]
var domainLength
var tldLength

if(range !== "English"){
domainLength = (punycode.encode(domain)).length + 4
tldLength = (punycode.encode(tldName)).length + 4
}
else {
domainLength = domain.length
tldLength = tldName.length
}

if(domainLength > 255) {
isDomainLengthValid === false
}
if(tldLength > 63){
isTldLengthValid === false
}

return isDomainLengthValid && isTldLengthValid

}
Loading

0 comments on commit 5bc192a

Please sign in to comment.