PageRenderTime 29ms CodeModel.GetById 7ms RepoModel.GetById 0ms app.codeStats 0ms

/plugins/usermeet.core/api/sc/uri/register.php

https://github.com/rmiddle/cerb4
PHP | 236 lines | 207 code | 26 blank | 3 comment | 16 complexity | 95cd15a7b935386c54150f519b700fa9 MD5 | raw file
  1. <?php
  2. class UmScRegisterController extends Extension_UmScController {
  3. function isVisible() {
  4. // $umsession = UmPortalHelper::getSession();
  5. // $active_user = $umsession->getProperty('sc_login', null);
  6. // return !empty($active_user);
  7. return true;
  8. }
  9. function writeResponse(DevblocksHttpResponse $response) {
  10. $tpl = DevblocksPlatform::getTemplateService();
  11. $tpl_path = dirname(dirname(dirname(dirname(__FILE__)))) . '/templates/';
  12. $umsession = UmPortalHelper::getSession();
  13. $active_user = $umsession->getProperty('sc_login', null);
  14. $stack = $response->path;
  15. array_shift($stack); // register
  16. @$step = array_shift($stack);
  17. switch($step) {
  18. case 'forgot':
  19. $tpl->display("file:${tpl_path}portal/sc/module/register/forgot.tpl");
  20. break;
  21. case 'forgot2':
  22. $tpl->display("file:${tpl_path}portal/sc/module/register/forgot_confirm.tpl");
  23. break;
  24. case 'confirm':
  25. $tpl->display("file:${tpl_path}portal/sc/module/register/confirm.tpl");
  26. break;
  27. default:
  28. $tpl->display("file:${tpl_path}portal/sc/module/register/index.tpl");
  29. break;
  30. }
  31. }
  32. function doForgotAction() {
  33. @$email = DevblocksPlatform::importGPC($_REQUEST['email'],'string','');
  34. $tpl = DevblocksPlatform::getTemplateService();
  35. $settings = CerberusSettings::getInstance();
  36. $from = $settings->get(CerberusSettings::DEFAULT_REPLY_FROM,null);
  37. $from_personal = $settings->get(CerberusSettings::DEFAULT_REPLY_PERSONAL,"Support Dept.");
  38. $url = DevblocksPlatform::getUrlService();
  39. try {
  40. $mail_service = DevblocksPlatform::getMailService();
  41. $mailer = $mail_service->getMailer(CerberusMail::getMailerDefaults());
  42. $code = CerberusApplication::generatePassword(8);
  43. if(!empty($email) && null != ($addy = DAO_Address::lookupAddress($email, false))) {
  44. $fields = array(
  45. DAO_Address::IS_REGISTERED => 0,
  46. DAO_Address::PASS => $code,
  47. );
  48. DAO_Address::update($addy->id, $fields);
  49. } else {
  50. $tpl->assign('register_error', sprintf("'%s' is not a registered e-mail address.",$email));
  51. DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('portal',UmPortalHelper::getCode(),'register','forgot')));
  52. return;
  53. }
  54. $message = $mail_service->createMessage();
  55. $message->addTo($email);
  56. $message->setFrom(array($from => $from_personal));
  57. $message->setSubject("Did you forget your support password?");
  58. $message->setBody(sprintf("This is a message to confirm your 'forgot password' request at:\r\n".
  59. "%s\r\n".
  60. "\r\n".
  61. "Your confirmation code is: %s\r\n".
  62. "\r\n".
  63. "If you've closed the browser window, you can continue by visiting:\r\n".
  64. "%s\r\n".
  65. "\r\n".
  66. "Thanks!\r\n".
  67. "%s\r\n",
  68. $url->write('',true),
  69. $code,
  70. $url->write('c=register&a=forgot2',true),
  71. $from_personal
  72. ));
  73. $headers = $message->getHeaders();
  74. $headers->addTextHeader('X-Mailer','Cerberus Helpdesk (Build '.APP_BUILD.')');
  75. $result = $mailer->send($message);
  76. }
  77. catch (Exception $e) {
  78. $tpl->assign('register_error', 'Fatal error encountered while sending forgot password confirmation code.');
  79. DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('portal',UmPortalHelper::getCode(),'register','forgot')));
  80. return;
  81. }
  82. DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('portal',UmPortalHelper::getCode(),'register','forgot2')));
  83. }
  84. function doForgotConfirmAction() {
  85. @$email = DevblocksPlatform::importGPC($_REQUEST['email'],'string','');
  86. @$code = trim(DevblocksPlatform::importGPC($_REQUEST['code'],'string',''));
  87. @$pass = DevblocksPlatform::importGPC($_REQUEST['pass'],'string','');
  88. $tpl = DevblocksPlatform::getTemplateService();
  89. $tpl->assign('register_email', $email);
  90. $tpl->assign('register_code', $code);
  91. if(!empty($email) && !empty($pass) && !empty($code)) {
  92. if(null != ($addy = DAO_Address::lookupAddress($email, false))
  93. && !$addy->is_registered
  94. && !empty($addy->pass)
  95. && 0 == strcasecmp($code,$addy->pass)) {
  96. $fields = array(
  97. DAO_Address::IS_REGISTERED => 1,
  98. DAO_Address::PASS => md5($pass),
  99. );
  100. DAO_Address::update($addy->id, $fields);
  101. } else {
  102. $tpl->assign('register_error', sprintf("The confirmation code you entered does not match our records. Try again."));
  103. DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('portal',UmPortalHelper::getCode(),'register','forgot2')));
  104. return;
  105. }
  106. } else {
  107. $tpl->assign('register_error', sprintf("You must enter a valid e-mail address, confirmation code and desired password to continue."));
  108. DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('portal',UmPortalHelper::getCode(),'register','forgot2')));
  109. return;
  110. }
  111. }
  112. function doRegisterAction() {
  113. @$email = DevblocksPlatform::importGPC($_REQUEST['email'],'string','');
  114. $tpl = DevblocksPlatform::getTemplateService();
  115. $settings = CerberusSettings::getInstance();
  116. $from = $settings->get(CerberusSettings::DEFAULT_REPLY_FROM,null);
  117. $from_personal = $settings->get(CerberusSettings::DEFAULT_REPLY_PERSONAL,"Support Dept.");
  118. $url = DevblocksPlatform::getUrlService();
  119. $mail_service = DevblocksPlatform::getMailService();
  120. $mailer = $mail_service->getMailer(CerberusMail::getMailerDefaults());
  121. $code = CerberusApplication::generatePassword(8);
  122. if(!empty($email) && null != ($addy = DAO_Address::lookupAddress($email, true))) {
  123. // Already registered?
  124. if($addy->is_registered) {
  125. $tpl->assign('register_error', sprintf("'%s' is already registered.",$email));
  126. DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('portal',UmPortalHelper::getCode(),'register')));
  127. return;
  128. }
  129. $fields = array(
  130. DAO_Address::IS_REGISTERED => 0,
  131. DAO_Address::PASS => $code
  132. );
  133. DAO_Address::update($addy->id, $fields);
  134. } else {
  135. $tpl->assign('register_error', sprintf("'%s' is an invalid e-mail address.",$email));
  136. DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('portal',UmPortalHelper::getCode(),'register')));
  137. return;
  138. }
  139. $message = $mail_service->createMessage();
  140. $message->setTo($email);
  141. $message->setFrom(array($from => $from_personal));
  142. $message->setSubject("Confirming your support e-mail address");
  143. $message->setBody(sprintf("This is a message to confirm your recent registration request at:\r\n".
  144. "%s\r\n".
  145. "\r\n".
  146. "Your confirmation code is: %s\r\n".
  147. "\r\n".
  148. "If you've closed the browser window, you can continue by visiting:\r\n".
  149. "%s\r\n".
  150. "\r\n".
  151. "Thanks!\r\n".
  152. "%s\r\n",
  153. $url->write('',true),
  154. $code,
  155. $url->write('c=register&a=confirm',true),
  156. $from_personal
  157. ));
  158. $headers = $message->getHeaders();
  159. $headers->addTextHeader('X-Mailer','Cerberus Helpdesk (Build '.APP_BUILD.')');
  160. $result = $mailer->send($message);
  161. DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('portal',UmPortalHelper::getCode(),'register','confirm')));
  162. }
  163. function doRegisterConfirmAction() {
  164. @$email = DevblocksPlatform::importGPC($_REQUEST['email'],'string','');
  165. @$code = trim(DevblocksPlatform::importGPC($_REQUEST['code'],'string',''));
  166. @$pass = DevblocksPlatform::importGPC($_REQUEST['pass'],'string','');
  167. $tpl = DevblocksPlatform::getTemplateService();
  168. $tpl->assign('register_email', $email);
  169. $tpl->assign('register_code', $code);
  170. if(!empty($email) && !empty($pass) && !empty($code)) {
  171. if(null != ($addy = DAO_Address::lookupAddress($email, false))
  172. && !$addy->is_registered
  173. && !empty($addy->pass)
  174. && 0 == strcasecmp($code,$addy->pass)) {
  175. $fields = array(
  176. DAO_Address::IS_REGISTERED => 1,
  177. DAO_Address::PASS => md5($pass)
  178. );
  179. DAO_Address::update($addy->id, $fields);
  180. } else {
  181. $tpl->assign('register_error', sprintf("The confirmation code you entered does not match our records. Try again."));
  182. DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('portal',UmPortalHelper::getCode(),'register','confirm')));
  183. return;
  184. }
  185. } else {
  186. $tpl->assign('register_error', sprintf("You must enter a valid e-mail address, confirmation code and desired password to continue."));
  187. DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('portal',UmPortalHelper::getCode(),'register','confirm')));
  188. return;
  189. }
  190. }
  191. };