Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class ModuleFacebookRegistration extends Module
- {
- /**
- * Template
- * @var string
- */
- protected $strTemplate = 'mod_facebookRegistration';
- /**
- * Display a wildcard in the back end
- * @return string
- */
- public function generate()
- {
- if (TL_MODE == 'BE')
- {
- $objTemplate = new BackendTemplate('be_wildcard');
- $objTemplate->wildcard = '### USER FACEBOOK REGISTRATION ###';
- $objTemplate->title = $this->headline;
- $objTemplate->id = $this->id;
- $objTemplate->link = $this->name;
- $objTemplate->href = 'contao/main.php?do=themes&table=tl_module&act=edit&id=' . $this->id;
- return $objTemplate->parse();
- }
- $this->editable = deserialize($this->editable);
- // Return if there are no editable fields
- if (!is_array($this->editable) || count($this->editable) < 1 || FE_USER_LOGGED_IN)
- {
- //return '';
- }
- return parent::generate();
- }
- /**
- * Generate module
- */
- protected function compile()
- {
- global $objPage;
- $GLOBALS['TL_LANGUAGE'] = $objPage->language;
- $this->loadLanguageFile('tl_member');
- $this->loadDataContainer('tl_member');
- // Call onload_callback (e.g. to check permissions)
- if (is_array($GLOBALS['TL_DCA']['tl_member']['config']['onload_callback']))
- {
- foreach ($GLOBALS['TL_DCA']['tl_member']['config']['onload_callback'] as $callback)
- {
- if (is_array($callback))
- {
- $this->import($callback[0]);
- $this->$callback[0]->$callback[1]();
- }
- }
- }
- $this->Template->fields = '';
- $this->Template->tableless = $this->tableless;
- $doNotSubmit = false;
- $arrUser = array();
- $arrFields = array();
- $hasUpload = false;
- $i = 0;
- // Create new user if there are no errors and the signed request is correct
- if ($_REQUEST['signed_request'])
- {
- $response = $this->parse_signed_request($_REQUEST['signed_request']);
- $arrUser = array(
- 'firstname' => $response['registration']['first_name'],
- 'lastname' => $response['registration']['last_name'],
- 'dateOfBirth' => strtotime($response['registration']['birthday']),
- 'gender' => $response['registration']['gender'],
- 'street' => $response['registration']['street'],
- 'postal' => $response['registration']['postal'],
- 'city' => $response['registration']['city'],
- 'email' => $response['registration']['email'],
- 'username' => $response['registration']['username'],
- 'fbUid' => $response['user_id'],
- 'password' => '829c3804401b0727f70f73d4415e162400cbe57b',
- 'mobile' => $response['registration']['phone']
- );
- // check if the user already exists
- $resultSettings = $this->Database->prepare("SELECT fbUid FROM tl_member WHERE fbUid=?")
- ->execute($arrUser['fbUid'])->fbUid;
- if($resultSettings){
- $this->jumpToOrReload($this->jumpTo);
- exit;
- }
- // check if Email-Adress already exists and merge accounts
- $resultEmail = $this->Database->prepare("SELECT email FROM tl_member WHERE email=?")
- ->execute($arrUser['email'])->email;
- if($resultEmail){
- $this->mergeAccounts($arrUser);
- $this->jumpToOrReload($this->jumpTo);
- exit;
- }
- // its a new user
- $this->createNewUser($arrUser);
- }
- $this->Template->loginDetails = $GLOBALS['TL_LANG']['tl_member']['loginDetails'];
- $this->Template->addressDetails = $GLOBALS['TL_LANG']['tl_member']['addressDetails'];
- $this->Template->contactDetails = $GLOBALS['TL_LANG']['tl_member']['contactDetails'];
- $this->Template->personalData = $GLOBALS['TL_LANG']['tl_member']['personalData'];
- $this->Template->captchaDetails = $GLOBALS['TL_LANG']['MSC']['securityQuestion'];
- // Add groups
- foreach ($arrFields as $k=>$v)
- {
- $this->Template->$k = $v;
- }
- $this->Template->captcha = $arrFields['captcha'];
- $this->Template->formId = 'tl_registration';
- $this->Template->slabel = specialchars($GLOBALS['TL_LANG']['MSC']['register']);
- $this->Template->action = $this->getIndexFreeRequest();
- // HOOK: add memberlist fields
- if (in_array('memberlist', $this->Config->getActiveModules()))
- {
- $this->Template->profile = $arrFields['profile'];
- $this->Template->profileDetails = $GLOBALS['TL_LANG']['tl_member']['profileDetails'];
- }
- // HOOK: add newsletter fields
- if (in_array('newsletter', $this->Config->getActiveModules()))
- {
- $this->Template->newsletter = $arrFields['newsletter'];
- $this->Template->newsletterDetails = $GLOBALS['TL_LANG']['tl_member']['newsletterDetails'];
- }
- // HOOK: add helpdesk fields
- if (in_array('helpdesk', $this->Config->getActiveModules()))
- {
- $this->Template->helpdesk = $arrFields['helpdesk'];
- $this->Template->helpdeskDetails = $GLOBALS['TL_LANG']['tl_member']['helpdeskDetails'];
- }
- }
- /**
- * function merges a user if the email-adress already exists
- *
- */
- public function mergeAccounts($arrUser){
- $this->Database->prepare("UPDATE tl_member SET firstname=? , lastname=?, dateOfBirth=?, gender=?, street=?,
- postal=?, city=?, email=?, username=?, fbUid=?, password=?, mobile=? WHERE email=?")
- ->execute(
- $arrUser['firstname'],
- $arrUser['lastname'],
- $arrUser['dateOfBirth'],
- $arrUser['gender'],
- $arrUser['street'],
- $arrUser['postal'],
- $arrUser['city'],
- $arrUser['email'],
- $arrUser['username'],
- $arrUser['fbUid'],
- $arrUser['password'],
- $arrUser['mobile'],
- $arrUser['email']
- );
- }
- /**
- * Create a new user and redirect
- * @param array
- */
- protected function createNewUser($arrData)
- {
- $arrData['tstamp'] = time();
- $arrData['login'] = $this->reg_allowLogin;
- $arrData['activation'] = md5(uniqid(mt_rand(), true));
- $arrData['dateAdded'] = $arrData['tstamp'];
- // Set default groups
- if (!array_key_exists('groups', $arrData))
- {
- $arrData['groups'] = $this->reg_groups;
- }
- // Make sure newsletter is an array
- if (isset($arrData['newsletter']) && !is_array($arrData['newsletter']))
- {
- $arrData['newsletter'] = array($arrData['newsletter']);
- }
- // Create user
- $objNewUser = $this->Database->prepare("INSERT INTO tl_member %s")->set($arrData)->execute();
- $insertId = $objNewUser->insertId;
- // HOOK: send insert ID and user data
- if (isset($GLOBALS['TL_HOOKS']['createNewUser']) && is_array($GLOBALS['TL_HOOKS']['createNewUser']))
- {
- foreach ($GLOBALS['TL_HOOKS']['createNewUser'] as $callback)
- {
- $this->import($callback[0]);
- $this->$callback[0]->$callback[1]($insertId, $arrData);
- }
- }
- $this->jumpToOrReload($this->jumpTo);
- }
- private function parse_signed_request($signed_request) {
- $secret = '77c26c54b7ec722da01ed7b7284fac34';
- list($encoded_sig, $payload) = explode('.', $signed_request, 2);
- // decode the data
- $sig = $this->base64_url_decode($encoded_sig);
- $data = json_decode($this->base64_url_decode($payload), true);
- if (strtoupper($data['algorithm']) !== 'HMAC-SHA256') {
- error_log('Unknown algorithm. Expected HMAC-SHA256');
- return null;
- }
- // check sig
- $expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true);
- if ($sig !== $expected_sig) {
- error_log('Bad Signed JSON signature!');
- return null;
- }
- return $data;
- }
- private function base64_url_decode($input) {
- return base64_decode(strtr($input, '-_', '+/'));
- }
- }
Add Comment
Please, Sign In to add comment