Security News
Research
Data Theft Repackaged: A Case Study in Malicious Wrapper Packages on npm
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
bidireccionalgmailcontacts-celerex
Advanced tools
La libreria fue creada con el proposito de tener un codigo mantenible para un futuro, dentro estan las funciones para:
La explicacion de este proyecto esta dividida en varias partes para su compresion.
Objeto que contiene infomacion importante de cada usuario, todo lo esencial que involucra a un cliente esta aqui
{
token: String,
refreshToken: String,
type: String,
email: String,
loginUserUsuario: String,
pendingConnections: Number,
clientIdProjectGoogle: String,
clientSecretGoogleProject: String,
isActive:Boolean
}
token: Token de gmail que contiene los permisos necesarios para manipular los contactos, vence en 50 Minutos
refreshToken: Token el cual nos permite actualizar el token, este no tiene vencimiento
type: Puede tener 3 valores GMAIL,zoho o "OUTLOOK", para esta libreria solo nos interesa los tipo "GMAIL" y "zoho"
email: correo electronico en el cual los contactos son guardados
loginUserUsuario: loginUserUsuario proveniente de zoho, este es usado para saber a que usuario en el CRM le pertenece el contacto
pendingConnections: Numero de contactos que estan en la cola
clientIdProjectGoogle:Proyecto de Google al cual el contacto pertenece
clientSecretGoogleProject: Secret de google al cual el usuario pertenece.
isActive: Bandera que sirve para ignorar al usuario temporalmente
RefreshAllGmailTokens (workflowRefreshAccessTokensGmail)
Esta funcion es la que se debe llamar cada vez que se quiera hacer una actualizacion de los token de los usuarios en la tabla auth con valor "GMAIL" en la key "type".
Steps:
obtener de la base de datos los usuarios a actualizar el token
Por cada usuario hace una peticion al api de google de refresh token.
si todo salio correcto el nuevo token es replazado por el viejo y se guarda en la base de datos
En caso de Error se enviara a la tabla de logs de la base de datos y se mandara un correo electronico
Cosideracciones:
No se puede hacer un numero indefinido de peticiones a la api, por lo cul debe limitarse las peticiones, o mandar peticiones por trozos.
RefreshSingleGmailToken(refreshSingleUserGoogleToken)
Esta funcion Fue creada a fin de que cuando el refresh token de 1-X usuarios falla, para que en lugar de ejecutar una actualizacion masiva de tokens de usuarios que no lo necesitan se haga unade manera selectiva. Cada destacar que si fallan muchos regresh lo mejor es correr la funcion anterior
Steps:
Encontrar por Id de la BD el usuario al que se le hara la actualizacion
Hacer la peticion a la Api de Google para refreshToken
Guardar el nuevo token en la base de datos en el registro del usuario
En caso de Error se enviara a la tabla de logs de la base de datos y se mandara un correo electronico
Cosideracciones:
No se puede hacer un numero indefinido de peticiones a la api, por lo cul debe limitarse las peticiones, o mandar peticiones por trozos.
RefreshZohoToken(workFlowRefreshZohoToken)
Esta Funcion tiene la reponsabilidad de actualizar el token se zoho el que brinda todos lo permisos para poder insertar registros por medio de la API
Steps:
Se saca de la base de datos de la tabla auth el registro que tiene "type" : "zoho"
con el refresh token se hace una peticion a endpoint de zoho para actualizar
guardamos el nuevo token en la base de datos del registro de zoho
BidireccionalGmailContacts(startWorkFlow)
Esta funcion es la de mayor peso, la encargada de hacer la conexion biidreccional entre GMAIL y ZOHO CREATOR, se compone de varios pasos y sub funciones asi como de varias tecnologias.
Tecnologias
Diagrama
Steps(Simplificado)
Consideraciones
Antes de usar
Crear un archivo dentro del folder constants con el nombre de myEnviromentVars.js
en el archivo creado previamente copiar los siguiente
const serverMyMongo =
".......";
const dbMyMongo = "....";
const lambdaSendEmailErrorUrl =
".....";
const dataEmail = {
to: "example@correo.com.mx",
from: example@correo.com.mx",
subject: ".....",
message: "....",
};
const lamU = "...../contacts";
const lamZO =
"...../sendTozoho";
const ZOHO_CLIENT_ID = `.....`;
const ZOHO_CLIENT_SECRET = `.....`;
const ZOHO_REFRESH_TOKEN = `......`;
const ZOHO_TOKEN_URI = `https://accounts.zoho.com/oauth/v2/token`;
module.exports = {
serverMyMongo,
dbMyMongo,
lambdaSendEmailErrorUrl,
dataEmail,
lamU,
lamZO,
ZOHO_CLIENT_ID,
ZOHO_CLIENT_SECRET,
ZOHO_REFRESH_TOKEN,
ZOHO_TOKEN_URI,
};
Cambiar valores de variables por :
dbMyMongo: nombre de la base de datos de mongo
lambdaSendEmailErrorUrl: url de la lambda que envia el correo de error
dataEmail: es un objecto, remplazar el correo en "to" y "from"
por el que se usara, debe ser el mismo en ambos.
lamU: url de la lambda "createupdateContact"
lamZO: url de la lambda que inyecta a zoho la informacion de los contactos
ZOHO_CLIENT_ID : El client id del usuario de zoho del API ;
ZOHO_CLIENT_SECRET : El Client secret de zoho del API ;
ZOHO_REFRESH_TOKEN : Token para poder actualizar el access token;
ZOHO_TOKEN_URI = usar el valor **https://accounts.zoho.com/oauth/v2/token** ya que esta es el endpoint real;
Dentro del folder del proyecto ejecute el comando node nombreDelarchivo.js
ejemplo
node app.js
RefreshAllGmailTokens
Dentro del workflow correspndiente compiar el siguiente Codigo, si las variables de entorno ya estan creadas no deberia haber ningun problema al ejecutarlo.
const { workflowRefreshAccessTokensGmail } = require("bidireccionalgmailcontacts-celerex");
const serverMongoDb = process.env.SERVERMONGODBDEV;
const database = process.env.DATABASEDEV;
const lambdaSendEmailErrorUrl = process.env.LAMBDASENDEMAILERRORURL_DEV
const emailForError = process.env.EMAIL_RECIVER_AND_EMITTER_FOT_ERROR_DEV
const dataEmail = {
to: emailForError,
from: emailForError,
subject: "ERROR IN UPDATE GMAIL TOKENS",
message: "Hubo un error en el workflow de update refresh gmail token ",
};
await workflowRefreshAccessTokensGmail(
serverMongoDb,
database,
dataEmail,
lambdaSendEmailErrorUrl);
console.log("Finished");
Esta libreria esta en npm siempre que se haga un cambio permanente al codigo para tener la version mas reciente en npm se debe hacer un npm publish
guardar en Logs y enviar correos son llamados en casi todas las funciones al momento de un error
El limite de contactos que se envian al CRM por ejecucion es de 100.
El limite de la cola es 400
-El Limite de peticiones a google que se pueden hacer por usuario es aproximdamente 100, usar menos siempre por ejemplo 80
FAQs
## Acerca De
The npm package bidireccionalgmailcontacts-celerex receives a total of 3 weekly downloads. As such, bidireccionalgmailcontacts-celerex popularity was classified as not popular.
We found that bidireccionalgmailcontacts-celerex demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Research
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
Research
Security News
Attackers used a malicious npm package typosquatting a popular ESLint plugin to steal sensitive data, execute commands, and exploit developer systems.
Security News
The Ultralytics' PyPI Package was compromised four times in one weekend through GitHub Actions cache poisoning and failure to rotate previously compromised API tokens.