/** * Crea una nuova password(aggiorna il db) e la restituisce. restituisce false in caso negativo * @param PCModelUser $user_id l' id dell' utente * @param string $hash l' hash inviato dall'utente * @param PCModelUser * @return boolean|string */ public static function handleRepassRequest($user_id, $hash, &$user_to_ret) { $keys = array('request_hash'=>$hash, 'user_id'=>$user_id); $items = PCModelManager::fetchModelObjectInstances(PCModelRepass::getMapper(), $keys, NULL, TRUE); if (count($items) <= 0) { return FALSE; } $item = $items[0]; if ($item == NULL || $item->isExpired()) { c_dump("SCADUTA"); return FALSE; } $bindigngs = array(":h" => $hash, ":user"=> $user_id); PCModelManager::deleteObject(PCModelRepass::getMapper(), "request_hash = :h AND user_id = :user", $bindigngs); $newPwd = PCMapperRepass::rand_password(8); $model_user = PCModelManager::fetchObjectWithIdentifier(PCModelUser::getMapper(), $item->getUser_id(), NULL, TRUE); if($model_user == NULL){ $id = $item->getUser_id(); error_log("User non presente (user_id: $id )"); return FALSE; } $newPwdHash = PCAuth::computeHashForString($newPwd); if(PCMapperUser::changePasswordForUser($model_user, $newPwdHash) == FALSE){ return FALSE; } $user_to_ret = $model_user; return $newPwd; }
/** * * @param PCMapper $mapper * @param array $keys * @param string $conditions * @param array $bindings * @return boolean */ public static function updateObject($mapper, $keys, $conditions, $bindings = array()) { if (isset($conditions) == FALSE) { throw new PCException("InternalInconsistency", 500); } $table_name = $mapper->getTableForInsertUpdate(); if (isset($keys['identifier'])) { PCCache::cacheProvider()->removeItem($mapper->getCacheKey($keys)); } $update = "UPDATE {$table_name} SET "; $prepared_keys = array(); $first = TRUE; foreach ($keys as $key => $value) { $placeHolder = ':' . $key; if ($first) { $first = FALSE; $update .= " {$key} = {$placeHolder} "; } else { $update .= ", {$key} = {$placeHolder} "; } $prepared_keys[$placeHolder] = $value; } $update .= " WHERE {$conditions}"; $pdo = PCDatabase::getSharedDatabaseConnection(); $prepared = $pdo->prepare($update); if ($prepared === FALSE) { c_dump($prepared->errorInfo()); return FALSE; } $merged = array_merge($bindings, $prepared_keys); $result = $prepared->execute($merged); if ($result === FALSE) { c_dump($prepared->errorInfo()); return FALSE; } return TRUE; }
public function meAction($r){ c_dump($_COOKIE); //PCResponse::currentResponse()->addCookie(PCResponseCookie::lifetimeCookie("CIAO", "CIAO","ajax.localhost")); }
/** * @param PCRequest $request */ public function facebookCallbackAction($request) { PCAutoloader::importLibrary('facebook'); $facebook = new Facebook(array( "appId" => FB_APP_ID, "secret" => FB_APP_SECRET, "cookie" => true )); $params = $request->getParams(); $user_profile = NULL; try { $user = $facebook->getUser(); if (isset($user)) { $user_profile = $facebook->api('/me'); } } catch (FacebookApiException $e) { c_dump($_GET); error_log("AAAA".$e); throw new PCExceptionRedirection("/page/register"); } if (isset($params['reg_username'])){ if (PCMapperUser::validateUsername($params['reg_username']) == FALSE) { $cont = array("title" => "WebSherpa - Insert Username", "text_error" => "Insert a valid Username; min 6 characters use only characters and numbers and \"_\"", "show_email" => TRUE); return PCRendererHTML::rendererForView('insertUname', $cont); } if (count(PCModelManager::fetchModelObjectInstances(PCModelUser::getMapper(), array("username" => $params['reg_username']))) != 0) { $cont = array("title" => "WebSherpa - Insert Username", "text_error" => "Username already used, please choose another username.", "show_email" => TRUE); return PCRendererHTML::rendererForView('insertUname', $cont); } $adapter = new PCHelperSocialAdapterFacebook($facebook, $user_profile, $params['reg_username']); if($request->getAuthHandler()->authorizeOauthUser($adapter)){ throw new PCExceptionRedirection("/"); } throw new PCExceptionRedirection("/page/register"); } else{ $adapter = new PCHelperSocialAdapterFacebook($facebook, $user_profile); if($request->getAuthHandler()->authorizeOauthUser($adapter) === FALSE){ return PCRendererHTML::rendererForView('insertUname', array("title" => "WebSherpa - Insert Username")); } throw new PCExceptionRedirection("/"); } }
/** * XXX evitare utilizzo diretto del database * @param array $attributes * @param string $error * @return boolean */ public static function createUserWithAttributes($attributes, &$error) { $username = $attributes['username']; $name = $attributes['name']; $surname = $attributes['surname']; $email = $attributes['email']; $password = $attributes['password']; if (static::validateName($name) == false) { $error = "Invalid name"; return false; } if (static::validateSurname($surname) == false) { $error = "Invalid surname"; return false; } if (static::validateUsername($username) == FALSE) { $error = "username is not valid (min 5, max 20 chars)"; return false; } if (static::validateMail($email) == FALSE) { $error = "email already registered"; return FALSE; } $mapper = PCModelUser::getMapper(); $pdo = PCDatabase::getSharedDatabaseConnection(); $select = "SELECT username ,email FROM " . $mapper->getTableForInsertUpdate() . " WHERE (username = :uname OR email = :mail) AND account_type = :type;"; $prepared = $pdo->prepare($select); if ($prepared === FALSE) { c_dump($prepared->errorInfo()); return FALSE; } $result = $prepared->execute(array(':uname' => $username, ':mail' => $email, ':type' => PCModelUser::$TYPE_DEFAULT)); if ($result === FALSE) { ob_start(); print_r($prepared->errorInfo()); $prepared->debugDumpParams(); $contents = ob_get_contents(); ob_end_clean(); error_log($contents); return FALSE; } while ($item = $prepared->fetch(PDO::FETCH_ASSOC)) { if (strcmp($item['email'], $email) == 0) { $error = "email already registered"; return FALSE; } else if (strcmp($item['username'], $username) == 0) { $error = "username already registered"; return FALSE; } } $date = new DateTime('now', new DateTimeZone('UTC')); $keys = array( 'creation_date' => $date->format('Y-m-d H:i:s'), 'username' => $username, 'penalities' => '0', 'surname' => $surname, 'name' => $name, 'email' => $email, 'password' => $password ); return PCModelManager::insertObject($mapper, $keys); }
/** * * Posta sulla timeline di Facebook (se possibile) * @param array $reviewDescription * @param PCModelWebsite $onSite * @param PCModelUserOauth $user * @return boolean */ public static function postReviewToFacebook($reviewDescription, $onSite, $user){ PCAutoloader::importLibrary('facebook'); $oauth = $user->getOauthStore(); if($oauth == null){ return FALSE; } $domain = $onSite->getDomain(); $usa = $reviewDescription['usability']; $rel = $reviewDescription['reliability']; $cont = $reviewDescription['contents']; $vote = sprintf("%.1f",(($usa+$rel+$cont)/3.0)); $text = "I've just reviewed $domain (Vote: $vote) using http://websherpa.me : ".$reviewDescription['comment']; $facebook = new Facebook(array( "appId" => FB_APP_ID, "secret" => FB_APP_SECRET, "cookie" => true )); $facebook->setAccessToken($oauth['oauth_token']); try { $result = $facebook->api("/me/feed", 'post', array( 'message' => $text, 'name' => 'WebSherpa', 'link' => "http://websherpa.me/sites/site?id=".$onSite->getIdentifier(), 'picture' => 'http://websherpa.me/public/fresh/img/logo_footer.png', )); return isset($result['id']); } catch (FacebookApiException $exc) { c_dump($exc); return FALSE; } return FALSE; }