Advertisement
Guest User

Untitled

a guest
Jul 24th, 2014
238
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.74 KB | None | 0 0
  1. val invalidEX = List(21211, 21614, 21608, 30006, 30005, 21604, 21601, 14101)
  2. val reachEX = List(21612, 30004)
  3.  
  4. def sendSms = Action { implicit request =>
  5. val smsTo = request.body.asFormUrlEncoded.get("number").head
  6. val deviceId = request.body.asFormUrlEncoded.get("deviceId").head
  7. try {
  8. if(smsTo.length<=6||smsTo.length>=18||deviceId.length>=150){
  9. Ok(write(Map("result" -> "error")))
  10. }else{
  11. if (smsNeeded(smsTo)) {
  12. if (numberBlocked(smsTo)) {
  13. if (!todayBlocked(smsTo)) {
  14. var code = random6Digit
  15. val appLang =request.acceptLanguages(0).code.toString.splitAt(2)._1
  16. var body = ""
  17. appLang.equals("en") match {
  18. case true =>
  19. body = Messages("sms_body", "n", code)(Lang(appLang))
  20. case false =>
  21. body = Messages("sms_body", "n", code)(Lang(appLang)) + "n" + Messages("sms_body", "n", code)(Lang("en"))
  22. }
  23. TwilioAPI.sendSMS(smsTo, body)
  24. Future {todayEntry(smsTo) }
  25. Ok(Json.obj("response" -> "success"))
  26. } else
  27. Ok(Json.obj("response" -> "temporaryblock"))
  28. } else
  29. Ok(Json.obj("response" -> "permanentblocked"))
  30. } else {
  31. Ok(Json.obj("response" -> "regular"))
  32. }
  33. }
  34. } catch {
  35. case twilioEx: TwilioRestException =>
  36. if (invalidEX.contains(twilioEx.getErrorCode))
  37. Ok(Json.obj("response" -> "invalidNumber"))
  38. else if (reachEX.contains(twilioEx.getErrorCode))
  39. Ok(Json.obj("response" -> "unreachableNumber"))
  40. else {
  41. Future { models.LogFile.errorLogs(Json.obj("route" -> request.tags, "post" -> request.body.asFormUrlEncoded.toString, "address" -> request.remoteAddress, "error" -> twilioEx).toString) }
  42. Ok(Json.obj("response" -> "error"))
  43. }
  44. case e: Exception =>
  45. println(e)
  46. Future { models.LogFile.errorLogs(Json.obj("route" -> request.tags, "post" -> request.body.asFormUrlEncoded.toString, "address" -> request.remoteAddress, "error" -> e.toString).toString) }
  47. Ok(Json.obj("response" -> "error"))
  48. }
  49. }
  50.  
  51. val invalidEX = List(21211, 21614, 21608, 30006, 30005, 21604, 21601, 14101)
  52. val reachEX = List(21612, 30004)
  53.  
  54.  
  55. case class SmsPhoneNumber(value: String)
  56.  
  57. def parseSmsPhoneNumber(valueAsString: String): Option[SmsPhoneNumber] = {
  58. if(valueAsString.length<=6||valueAsString.length>=18) {
  59. return Some(SmsPhoneNumber(valueAsString))
  60. } else {
  61. return None
  62. }
  63. }
  64.  
  65.  
  66. case class SmsDeviceId(value: String)
  67.  
  68. def parseSmsDeviceId(valueAsString: String): Option[SmsDeviceId] = {
  69. if(valueAsString.length<=8||valueAsString.length>=150) {
  70. return Some(SmsDeviceId(valueAsString))
  71. } else {
  72. return None
  73. }
  74. }
  75.  
  76. sealed trait SmsPhoneNumberStatus
  77. case class SmsNotNeeded extends SmsPhoneNumberStatus
  78. case class NumberBlocked extends SmsPhoneNumberStatus
  79. case class NumberTemporarilyBlocked extends SmsPhoneNumberStatus
  80. case class Valid extends SmsPhoneNumberStatus
  81.  
  82. def checkSmsPhoneNumberStatus(smsPhoneNumber:SmsPhoneNumber) :SmsPhoneNumberStatus = {
  83. if (!smsNeeded(smsPhoneNumber)) {
  84. return SmsNotNeeded
  85. } else if (!numberBlocked(smsPhoneNumber)) {
  86. return NumberBlocked
  87. } else if (todayBlocked(smsPhoneNumber)) {
  88. return NumberTemporarilyBlocked
  89. } else {
  90. return Valid
  91. }
  92. }
  93.  
  94. def buildMessageBody(code:String,appLang:String):String = {
  95. if (appLang.equals("en")) {
  96. return Messages("sms_body", "n", code)(Lang(appLang))
  97. } else {
  98. return Messages("sms_body", "n", code)(Lang(appLang)) + "n" + Messages("sms_body", "n", code)(Lang("en"))
  99. }
  100. }
  101.  
  102.  
  103. sealed trait SentSmsResult
  104. case class InvalidNumber extends SentSmsResult
  105. case class UnreachableNumber extends SentSmsResult
  106. case class Error(message:String) extends SentSmsResult
  107. case class Success extends SentSmsResult
  108.  
  109. def doSendSms(recipient:SmsPhoneNumber,body:String):SentSmsResult = {
  110. try{
  111. TwilioAPI.sendSMS(recipient, body)
  112. } catch {
  113. case twilioEx: TwilioRestException =>
  114. if (invalidEX.contains(twilioEx.getErrorCode))
  115. return InvalidNumber
  116. else if (reachEX.contains(twilioEx.getErrorCode))
  117. return UnreachableNumber
  118. else {
  119. return Error(twilioEx)
  120. }
  121. case e: Exception =>
  122. return Error(e.toString)
  123. }
  124. }
  125.  
  126. def sendSms = Action { implicit request =>
  127. val smsPhoneNumber = parseSmsPhoneNumber(request.body.asFormUrlEncoded.get("number").head)
  128. val smsDeviceId = parseSmsDeviceId(deviceId)//not sure where devideId came from
  129.  
  130. if(smsPhoneNumber.isEmpty() || smsDeviceId.isEmpty()) {
  131. Ok(write(Map("result" -> "error")))
  132. } else {
  133. checkSmsPhoneNumberStatus(smsPhoneNumber.get) match {
  134. case SmsNotNeeded => Ok(Json.obj("response" -> "regular"))
  135. case NumberBlocked => Ok(Json.obj("response" -> "permanentblocked"))
  136. case NumberTemporarilyBlocked => Ok(Json.obj("response" -> "temporaryblock"))
  137. case Valid => {
  138. doSendSms(smsPhoneNumber,buildMessageBody(random6Digit,request.acceptLanguages(0).code.toString.splitAt(2)._1 )) match {
  139. case InvalidNumber => {
  140. Ok(Json.obj("response" -> "invalidNumber"))
  141. }
  142. case UnreachableNumber => {
  143. Ok(Json.obj("response" -> "unreachableNumber"))
  144. }
  145. case e:Error => {
  146. Future { models.LogFile.errorLogs(Json.obj("route" -> request.tags, "post" -> request.body.asFormUrlEncoded.toString, "address" -> request.remoteAddress, "error" -> e.message).toString) }
  147. Ok(Json.obj("response" -> "error"))
  148. }
  149. case Success => {
  150. Future {todayEntry(smsTo) }
  151. Ok(Json.obj("response" -> "success"))
  152. }
  153. }
  154. }
  155. }
  156. }
  157. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement