Advertisement
Guest User

Untitled

a guest
Apr 5th, 2018
726
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.68 KB | None | 0 0
  1. const functions = require('firebase-functions');
  2.  
  3. //cors
  4. const cors = require('cors')({origin: true});
  5.  
  6. //para hacer uso de la bd
  7. const admin = require('firebase-admin');
  8.  
  9. var twilio = require('twilio');
  10.  
  11.  
  12. admin.initializeApp(functions.config().firebase);
  13.  
  14. //in : appID, email, newUser, name, password
  15. exports.assign_application = functions.https.onRequest((request, response) => {
  16. //activamos cors
  17. cors(request, response, () => {
  18. console.log("sacar app");
  19. admin.database().ref("/projects/"+request.body.projectID+'/apps/'+request.body.appID).once("value", function(snapshot) {
  20. let app = snapshot.val();
  21. //nuevo usuario
  22. if(request.body.newUser){
  23. console.log("nuevo usuario");
  24. //crear auth de usuario
  25. admin.auth().createUser({
  26. email: request.body.email,
  27. password: request.body.password
  28. }).then(success=>{
  29. //crear referencia en usuarios
  30. console.log("refrenecia user");
  31. admin.database().ref('/users').child(success.uid).set({
  32. email : request.body.email,
  33. name : request.body.name
  34. }).then(snap =>{
  35. console.log("ref app");
  36. //crear referencia en la aplicacion al usuario
  37. let usr = {
  38. email : request.body.email,
  39. name : request.body.name
  40. };
  41. if(request.body.extraUserData){
  42. Object.assign(usr, request.body.extraUserData);
  43. }
  44. admin.database().ref("/projects/"+request.body.projectID+'/apps/'+request.body.appID+"/users/").child(success.uid).set(usr).then(snap =>{
  45. console.log("ref user");
  46. //crear en el usuario de la aplioocacion
  47. admin.database().ref("/users/"+success.uid+"/myapps/").child(request.body.appID).set({
  48. name : app.name
  49. }).then(snap =>{
  50. response.send({success : 1, uid : success.uid});
  51. });
  52. });
  53. });
  54. }, reject=> {
  55.  
  56. console.log(reject);
  57. response.send(reject);
  58. });
  59. } else {
  60. admin.database().ref("/users").orderByChild("email").equalTo(request.body.email).once("value", function(snapUser) {
  61. snapUser.forEach(objUser=>{
  62. let usr = objUser.val();
  63. console.log("cada usuario, este es uno");
  64. console.log(usr);
  65. //crear referencia en la aplicacion al usuario
  66. let usrAux = {
  67. email : request.body.email,
  68. name : usr.name
  69. };
  70. if(request.body.extraUserData){
  71. Object.assign(usrAux, request.body.extraUserData);
  72. }
  73. admin.database().ref("/projects/"+request.body.projectID+'/apps/'+request.body.appID+"/users/").child(objUser.key).set(usrAux).then(snap =>{
  74. console.log("ref user");
  75. //crear en el usuario de la aplioocacion
  76. admin.database().ref("/users/"+objUser.key+"/myapps/").child(request.body.appID).set({
  77. name : app.name
  78. }).then(snap =>{
  79. response.send({success : 1, uid: objUser.key});
  80. });
  81. });
  82. });
  83.  
  84. });
  85. }
  86. });
  87.  
  88. });
  89. });
  90.  
  91. //param d entrada correoreceptor, appID, tipo
  92. exports.save_fcmid = functions.https.onRequest((request, response) => {
  93. //activamos cors
  94. cors(request, response, () => {
  95. let auxObj = {
  96. registrationID : request.body.registrationID,
  97. appID : request.body.appID,
  98. mail : request.body.loguedMail
  99. };
  100. console.log("objeto a reg ");
  101. console.log(auxObj);
  102. admin.database().ref("/fcm/").push(auxObj).then(snap =>{
  103. response.send("{success : 1}");
  104. });
  105.  
  106. });
  107. });
  108.  
  109. //param d entrada correoreceptor, appID, tipo
  110. exports.fcmbyappid = functions.https.onRequest((request, response) => {
  111. //activamos cors
  112. cors(request, response, () => {
  113. admin.database().ref("/fcm/").orderByChild("appID").equalTo(request.body.appID).once("value", function(snapFCM) {
  114. response.send({success : 1, registeredFCM : snapFCM.val()});
  115. });
  116. });
  117. });
  118.  
  119. //param d entrada correoreceptor, appID, tipo
  120. exports.usersbyappid = functions.https.onRequest((request, response) => {
  121. //activamos cors
  122. cors(request, response, () => {
  123. admin.database().ref("/apps/"+request.body.appID+"/users").once("value", function(snapUsers) {
  124. response.send({success : 1, users : snapUsers.val()});
  125. });
  126. });
  127. });
  128.  
  129. //projectID, appID, userID,
  130. exports.dissociate_app = functions.https.onRequest((request, response) => {
  131. //activamos cors
  132. cors(request, response, () => {
  133. admin.database().ref("/projects/"+request.body.projectID+'/apps/'+request.body.appID+"/users/").child(request.body.userID).set(null).then(snap =>{
  134. console.log("ref user");
  135. //crear en el usuario de la aplioocacion
  136. admin.database().ref("/users/"+request.body.userID+"/myapps/").child(request.body.appID).set(null).then(snap =>{
  137. response.send({success : 1});
  138. });
  139. });
  140. });
  141. });
  142.  
  143. exports.save_app = functions.https.onRequest((request, response) => {
  144. //activamos cors
  145. cors(request, response, () => {
  146. if(request.body.appID){
  147. console.log("se actualiza app");
  148. admin.database().ref("/apps/").child(request.body.appID).update(request.body.dataObject).then(snap =>{
  149. response.send({success : 1, appID : request.body.appID});
  150. });
  151. } else {
  152. console.log("se crea nuevo");
  153. hoy = new Date();
  154. appID = hoy.getTime();
  155. admin.database().ref("/apps/").child(appID).set(request.body.dataObject).then(snap =>{
  156. response.send({success : 1, appID : appID});
  157. });
  158. }
  159. });
  160. });
  161.  
  162. exports.verify_email = functions.https.onRequest((request, response) => {
  163. //activamos cors
  164. cors(request, response, () => {
  165. admin.database().ref("/users").orderByChild("email").equalTo(request.body.email).once("value", function(snapUser) {
  166. auxObj = {
  167. success : 1
  168. }
  169. if (snapUser.numChildren()>0){
  170. auxObj["valid"] = true;
  171. } else {
  172. auxObj["valid"] = false;
  173. }
  174. response.send(auxObj);
  175. });
  176. });
  177. });
  178.  
  179. //param d entrada correoreceptor, appID, tipo
  180. exports.send_email = functions.https.onRequest((request, response) => {
  181. //activamos cors
  182. cors(request, response, () => {
  183. //buscamos la cuenta del usuario por su correo
  184. admin.database().ref("/users").orderByChild("email").equalTo(request.body.email).once("child_added", function(snapUser) {
  185. let user = snapUser.val();
  186. console.log("el usuario es ");
  187. console.log(user);
  188. admin.database().ref("/apps/"+request.body.appID).once("value", function(snapApp){
  189. let app = snapApp.val();
  190. console.log("la app es ");
  191. console.log(app);
  192. //importamos mailer
  193. 'use strict';
  194. const nodemailer = require('nodemailer');
  195. var EmailTemplates = require('swig-email-templates');
  196.  
  197. // crear transportador rehusable
  198. let transporter = nodemailer.createTransport({
  199. service: 'gmail',
  200. auth: {
  201. user: 'enviocorreospwm@gmail.com',
  202. pass: 'G89J#nuBN6yY'
  203. }
  204. });
  205. //nuevo email templts
  206. var templates = new EmailTemplates({
  207. root: "./mail_templates/es"
  208. });
  209. var context = {
  210. username: user.name,
  211. appName: app.name,
  212. appID: request.body.appID,
  213. userEmail: request.body.email
  214. };
  215. //obtengo template
  216. templates.render('inscription_to_app.html', context, function(err, html, text) {
  217. console.log("regresa de render");
  218. console.log(err);
  219. console.log(html);
  220. console.log(text);
  221. //parametros del correo electronico
  222. let mailOptions = {
  223. from: '"Red ODCreator"', // sender address
  224. to: 'cristian@pwm.mx', // list of receivers
  225. subject: "Aprobación de vinculación de cuenta", // Subject line
  226. text: text, // plain text body
  227. html: html // html body
  228. };
  229. //enviar correo
  230. transporter.sendMail(mailOptions, (error, info) => {
  231. if (error) {
  232. response.send(error);
  233. } else {
  234. response.send('Message '+info.messageId+' sent: '+info.response);
  235. }
  236. });
  237. });
  238. });
  239. });
  240.  
  241. });
  242. });
  243.  
  244. //param d entrada correoreceptor, appID, tipo
  245. exports.send_notification = functions.https.onRequest((request, response) => {
  246. //activamos cors
  247. cors(request, response, () => {
  248. console.log("vamos a disponer");
  249. console.log(request.body.notifType);
  250. switch(request.body.notifType) {
  251. case 'mail':
  252. console.log("case mail");
  253. send_custom_email(request.body.message, request.body.mailTemplate, request.body.receptorMail, request.body.title, request.body.attachments, response);
  254. break;
  255. case 'push':
  256. console.log("case push");
  257. send_custom_push(request.body.message, request.body.receptor, request.body.title);
  258. response.send({success : 1});
  259. break;
  260. case 'sms':
  261. console.log("vamos a disponer");
  262. send_sms(request.body.message, request.body.receptor, response);
  263. response.send({success : 1});
  264. break;
  265. default:
  266.  
  267. }
  268. });
  269. });
  270.  
  271. function send_sms(message, receptor, response){
  272. console.log("vamos a enviar sms");
  273. var client = new twilio('AC882cda51fff7c898285004f750a8ed42', 'f64fdd160dd7c2a428e144521aa420b1');
  274.  
  275. client.messages.create({
  276. body: message,
  277. to: receptor, // Text this number
  278. from: '+16506814381' // From a valid Twilio number
  279. })
  280. .then((message) => console.log(message.sid)).catch(err=>{
  281. console.log("error");
  282. console.log(err);
  283. })
  284. }
  285.  
  286. function send_custom_push(message, receptor, title){
  287. console.log("enviando notif");
  288. let payload = {
  289. notification: {
  290. title,
  291. body: message
  292. }
  293. }
  294. admin.messaging().sendToDevice(receptor, payload).then(response => {
  295. console.log("regreso");
  296. console.log(response);
  297. }).catch(err=>{
  298. console.log("err");
  299. console.log(err);
  300. console.log(err.results[0].error);
  301. });
  302. }
  303.  
  304. //param d entrada correoreceptor, appID, tipo
  305. function send_custom_email(message, type, receptorMail, title, attachments, response) {
  306. //importamos mailer
  307. 'use strict';
  308. const nodemailer = require('nodemailer');
  309. var EmailTemplates = require('swig-email-templates');
  310.  
  311. // crear transportador rehusable
  312. /*let transporter = nodemailer.createTransport({
  313. service: 'gmail',
  314. auth: {
  315. user: 'enviocorreospwm@gmail.com',
  316. pass: 'G89J#nuBN6yY'
  317. }
  318. });*/
  319. let transporter = nodemailer.createTransport({
  320. host: 'email-smtp.us-east-1.amazonaws.com',
  321. port: 465,
  322. secure: true, // true for 465, false for other ports
  323. auth: {
  324. user: 'AKIAJBYIVT3WRZLBSADQ', // generated ethereal user
  325. pass: 'AjfuN87yW6Iktra2l0zqBzEK6q6xOSlZcNA7rdIyxkGp' // generated ethereal password
  326. }
  327. });
  328. transporter.verify(function(error, success) {
  329. if (error) {
  330. console.log("error al verificar el transportador de msjs");
  331. console.log(error);
  332. } else {
  333. console.log('Server is ready to take our messages');
  334. //nuevo email templts
  335. var templates = new EmailTemplates({
  336. root: "./mail_templates/es"
  337. });
  338. var context ;
  339. //obtengo template
  340. let mailTmplt ;
  341. switch(type) {
  342. case 'spc':
  343. //mailTmplt ='general_msg.html';
  344. break;
  345. default:
  346. mailTmplt ='general_msg.html';
  347. context = {
  348. message
  349. };
  350. }
  351. templates.render(mailTmplt, context, function(err, html, text) {
  352. console.log("regresa de render");
  353. console.log(err);
  354. console.log(html);
  355. console.log(text);
  356. //parametros del correo electronico
  357. let mailOptions = {
  358. from: 'contacto@webmexico.me', // sender address
  359. to: receptorMail, // list of receivers
  360. subject: title, // Subject line
  361. text: text, // plain text body
  362. html: text, // html body
  363. attachments: attachments
  364. };
  365. //enviar correo
  366. transporter.sendMail(mailOptions, (error, info) => {
  367. if (error) {
  368. response.send(error);
  369. } else {
  370. response.send('Message '+info.messageId+' sent: '+info.response);
  371. }
  372. });
  373. });
  374. }
  375. });
  376.  
  377. }
  378. function escapeHtml(text) {
  379. var map = {
  380. '&': '&',
  381. '<': '&lt;',
  382. '>': '&gt;',
  383. '"': '&quot;',
  384. "'": '&#039;'
  385. };
  386.  
  387. return text.replace(/[&<>"']/g, function(m) { return map[m]; });
  388. }
  389. //param d entrada correoreceptor, appID, tipo
  390. exports.grant_access_to_app = functions.https.onRequest((request, response) => {
  391. //activamos cors
  392. cors(request, response, () => {
  393. //crear referencia en la aplicacion al usuario
  394. console.log("sacar app");
  395. console.log(request.query.appID);
  396. admin.database().ref('/apps/'+request.query.appID).once("value", function(snapshot) {
  397. let app = snapshot.val();
  398. console.log("app");
  399. console.log(app);
  400. admin.database().ref("/users").orderByChild("email").equalTo(request.query.email).once("value", function(snapUser) {
  401. snapUser.forEach(objUser=>{
  402. let usr = objUser.val();
  403. console.log("cada usuario, este es uno");
  404. console.log(usr);
  405. //crear referencia en la aplicacion al usuario
  406. admin.database().ref('/apps/'+request.query.appID+"/users/").child(objUser.key).set({
  407. email : request.query.email,
  408. name : usr.name
  409. }).then(snap =>{
  410. console.log("ref user");
  411. //crear en el usuario de la aplioocacion
  412. admin.database().ref("/users/"+objUser.key+"/myapps/").child(request.query.appID).set({
  413. name : app.name
  414. }).then(snap =>{
  415. response.send("{success : 1}");
  416. });
  417. });
  418. });
  419.  
  420. });
  421.  
  422. });
  423. });
  424. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement