store verification status in accounts table and update lookup server

Signed-off-by: Bjoern Schiessle <bjoern@schiessle.org>
This commit is contained in:
Bjoern Schiessle 2017-03-23 16:06:57 +01:00 committed by Morris Jobke
parent c9ccdca1ec
commit 6f41a3edc0
No known key found for this signature in database
GPG Key ID: 9CE5ED29E7FCD38A
2 changed files with 56 additions and 1 deletions

View File

@ -53,6 +53,10 @@ class AccountManager {
const PROPERTY_ADDRESS = 'address'; const PROPERTY_ADDRESS = 'address';
const PROPERTY_TWITTER = 'twitter'; const PROPERTY_TWITTER = 'twitter';
const NOT_VERIFIED = '0';
const VERIFICATION_IN_PROGRESS = '1';
const VERIFIED = '2';
/** @var IDBConnection database connection */ /** @var IDBConnection database connection */
private $connection; private $connection;
@ -85,6 +89,7 @@ class AccountManager {
if (empty($userData)) { if (empty($userData)) {
$this->insertNewUser($user, $data); $this->insertNewUser($user, $data);
} elseif ($userData !== $data) { } elseif ($userData !== $data) {
$data = $this->updateVerifyStatus($userData, $data);
$this->updateExistingUser($user, $data); $this->updateExistingUser($user, $data);
} else { } else {
// nothing needs to be done if new and old data set are the same // nothing needs to be done if new and old data set are the same
@ -123,6 +128,41 @@ class AccountManager {
return json_decode($result[0]['data'], true); return json_decode($result[0]['data'], true);
} }
/**
* reset verification status if personal data changed
*
* @param array $oldData
* @param array $newData
* @return array
*/
protected function updateVerifyStatus($oldData, $newData) {
$twitterVerified = isset($oldData[self::PROPERTY_TWITTER]['verified']) && $oldData[self::PROPERTY_TWITTER]['verified'] === self::VERIFIED;
$websiteVerified = isset($oldData[self::PROPERTY_WEBSITE]['verified']) && $oldData[self::PROPERTY_WEBSITE]['verified'] === self::VERIFIED;
$emailVerified = isset($oldData[self::PROPERTY_EMAIL]['verified']) && $oldData[self::PROPERTY_EMAIL]['verified'] === self::VERIFIED;
if($twitterVerified &&
$oldData[self::PROPERTY_TWITTER]['value'] !== $newData[self::PROPERTY_TWITTER]['value']
) {
$newData[self::PROPERTY_TWITTER]['value']['verified'] = self::NOT_VERIFIED;
}
if($websiteVerified &&
$oldData[self::PROPERTY_WEBSITE]['value'] !== $newData[self::PROPERTY_WEBSITE]['value']
) {
$newData[self::PROPERTY_WEBSITE]['value']['verified'] = self::NOT_VERIFIED;
}
if($emailVerified &&
$oldData[self::PROPERTY_EMAIL]['value'] !== $newData[self::PROPERTY_EMAIL]['value']
) {
$newData[self::PROPERTY_EMAIL]['value']['verified'] = self::NOT_VERIFIED;
}
return $newData;
}
/** /**
* add new user to accounts table * add new user to accounts table
* *
@ -171,21 +211,25 @@ class AccountManager {
[ [
'value' => $user->getDisplayName(), 'value' => $user->getDisplayName(),
'scope' => self::VISIBILITY_CONTACTS_ONLY, 'scope' => self::VISIBILITY_CONTACTS_ONLY,
'verified' => '0',
], ],
self::PROPERTY_ADDRESS => self::PROPERTY_ADDRESS =>
[ [
'value' => '', 'value' => '',
'scope' => self::VISIBILITY_PRIVATE, 'scope' => self::VISIBILITY_PRIVATE,
'verified' => '0',
], ],
self::PROPERTY_WEBSITE => self::PROPERTY_WEBSITE =>
[ [
'value' => '', 'value' => '',
'scope' => self::VISIBILITY_PRIVATE, 'scope' => self::VISIBILITY_PRIVATE,
'verified' => '0',
], ],
self::PROPERTY_EMAIL => self::PROPERTY_EMAIL =>
[ [
'value' => $user->getEMailAddress(), 'value' => $user->getEMailAddress(),
'scope' => self::VISIBILITY_CONTACTS_ONLY, 'scope' => self::VISIBILITY_CONTACTS_ONLY,
'verified' => '0',
], ],
self::PROPERTY_AVATAR => self::PROPERTY_AVATAR =>
[ [
@ -195,11 +239,13 @@ class AccountManager {
[ [
'value' => '', 'value' => '',
'scope' => self::VISIBILITY_PRIVATE, 'scope' => self::VISIBILITY_PRIVATE,
'verified' => '0',
], ],
self::PROPERTY_TWITTER => self::PROPERTY_TWITTER =>
[ [
'value' => '', 'value' => '',
'scope' => self::VISIBILITY_PRIVATE, 'scope' => self::VISIBILITY_PRIVATE,
'verified' => '0',
], ],
]; ];
} }

View File

@ -516,6 +516,12 @@ class UsersController extends Controller {
public function getVerificationCode($account) { public function getVerificationCode($account) {
$user = $this->userSession->getUser(); $user = $this->userSession->getUser();
if ($user === null) {
return new DataResponse([], Http::STATUS_BAD_REQUEST);
}
$accountData = $this->accountManager->getUser($user);
$cloudId = $user->getCloudId(); $cloudId = $user->getCloudId();
$message = "Use my Federated Cloud ID to share with me: " . $cloudId; $message = "Use my Federated Cloud ID to share with me: " . $cloudId;
$privateKey = $this->keyManager->getKey($user)->getPrivate(); $privateKey = $this->keyManager->getKey($user)->getPrivate();
@ -527,17 +533,20 @@ class UsersController extends Controller {
switch ($account) { switch ($account) {
case 'verify-twitter': case 'verify-twitter':
$accountData[AccountManager::PROPERTY_TWITTER]['verified'] = AccountManager::VERIFICATION_IN_PROGRESS;
$msg = $this->l10n->t('In order to verify your Twitter account post following tweet on Twitter:'); $msg = $this->l10n->t('In order to verify your Twitter account post following tweet on Twitter:');
$code = $codeMd5; $code = $codeMd5;
break; break;
case 'verify-website': case 'verify-website':
$accountData[AccountManager::PROPERTY_WEBSITE]['verified'] = AccountManager::VERIFICATION_IN_PROGRESS;
$msg = $this->l10n->t('In order to verify your Website store following content in your webroot at \'CloudIdVerificationCode.txt\':'); $msg = $this->l10n->t('In order to verify your Website store following content in your webroot at \'CloudIdVerificationCode.txt\':');
break; break;
default: default:
return new DataResponse([], Http::STATUS_BAD_REQUEST); return new DataResponse([], Http::STATUS_BAD_REQUEST);
break;
} }
$this->accountManager->updateUser($user, $accountData);
return new DataResponse(['msg' => $msg, 'code' => $code]); return new DataResponse(['msg' => $msg, 'code' => $code]);
} }