clr_str($user['username']);
$username = preg_replace('/[^a-zA-Z0-9@_.\-]/', '', $username);
$user_id = $class_filter->clr_str($user['id']);
$confirm = (int) $user['status'];
$error_message = !VUserinfo::usernameVerification($username) ? 'error:' . $language['notif.error.invalid.user'] : false;
if ($error_message) {
echo 'error:' . $error_message;
return;
}
if (!$error_message) {
$password = time(); //a password is needed
if (isset($user['name']) != '') {
$fn = explode(" ", $user['name']);
$first = $fn[0];
$last = $fn[1];
}
if ($confirm > 0) {
$_SESSION['signup_username'] = $username;
$uid = self::processAccount(array('oauth_provider' => $oauth_type, 'oauth_uid' => $user_id, 'username' => $username, 'email' => $user['email'], 'password' => $password, 'first' => $first, 'last' => $last, 'gender' => $user['gender'], 'birth_date' => $user['birth_date']));
$reguser = VUserinfo::getUserInfo($uid);
if (($oauth_type == 'facebook' and isset($user['picture']['url'])) or ($oauth_type == 'google' and isset($user['picture']))) {
$fr = $oauth_type == 'facebook' ? $user['picture']['url'] : $user['picture'];
$to = $cfg['profile_images_dir'] . '/' . $reguser['key'] . '/' . $reguser['key'] . '.jpg';
file_put_contents($to, file_get_contents($fr));
$db->execute(sprintf("UPDATE `db_accountuser` SET `usr_photo`='file' WHERE `usr_id`='%s' LIMIT 1;", $uid));
}
if ($oauth_type == 'google') {
$loc = $cfg['main_url'] . '/' . VHref::getKey('account');
echo '';
exit;
}
}
if ($uid > 0) {
if ($reguser['key'] != '') {
$_SESSION['USER_ID'] = $uid;
$_SESSION['USER_NAME'] = $reguser['uname'];
$_SESSION['USER_KEY'] = $reguser['key'];
$_SESSION['USER_DNAME'] = $reguser['dname'];
unset($_SESSION['fb_user']);
unset($_SESSION['gp_user']);
unset($_SESSION['fb_access_token']);
unset($_SESSION['token']);
unset($_SESSION['FBRLH_state']);
$loc = $cfg['main_url'] . '/' . VHref::getKey('account');
echo '';
} else {
die('Account suspended!');
}
}
}
}
/* google, facebook ajax username registration/confirmation */
public static function auth_register_ajax_src()
{
global $db, $cfg, $class_filter, $language;
$username = $class_filter->clr_str($_POST['auth_username']);
$user_id = $class_filter->clr_str($_POST['auth_userid']);
$confirm = (int) $_POST['auth_confirm'];
$error_message = !VUserinfo::usernameVerification($username) ? $language['notif.error.invalid.user'] : false;
if ($error_message) {
echo 'error:' . $error_message;
return;
}
if (!$error_message) {
$oauth_type = isset($_SESSION['fb_user']['id']) ? 'facebook' : (isset($_SESSION['gp_user']['id']) ? 'google' : null);
$user = $oauth_type == 'facebook' ? $_SESSION['fb_user'] : ($oauth_type == 'google' ? $_SESSION['gp_user'] : null);
$password = time(); //a password is needed
if (isset($user['name']) != '') {
$fn = explode(" ", $user['name']);
$first = $fn[0];
$last = $fn[1];
}
if ($confirm > 0) {
$_SESSION['signup_username'] = $username;
$uid = self::processAccount(array('oauth_provider' => $oauth_type, 'oauth_uid' => $user_id, 'username' => $username, 'email' => $user['email'], 'password' => $password, 'first' => $first, 'last' => $last, 'gender' => $user['gender'], 'birth_date' => $user['birth_date']));
$reguser = VUserinfo::getUserInfo($uid);
if (($oauth_type == 'facebook' and isset($user['picture']['url'])) or ($oauth_type == 'google' and isset($user['picture']))) {
$fr = $oauth_type == 'facebook' ? $user['picture']['url'] : $user['picture'];
$to = $cfg['profile_images_dir'] . '/' . $reguser['key'] . '/' . $reguser['key'] . '.jpg';
file_put_contents($to, file_get_contents($fr));
$db->execute(sprintf("UPDATE `db_accountuser` SET `usr_photo`='file' WHERE `usr_id`='%s' LIMIT 1;", $uid));
}
}
if ($uid > 0) {
if ($reguser['key'] != '') {
$_SESSION['USER_ID'] = $uid;
$_SESSION['USER_NAME'] = $reguser['uname'];
$_SESSION['USER_KEY'] = $reguser['key'];
$_SESSION['USER_DNAME'] = $reguser['dname'];
unset($_SESSION['fb_user']);
unset($_SESSION['gp_user']);
unset($_SESSION['fb_access_token']);
unset($_SESSION['token']);
unset($_SESSION['FBRLH_state']);
$loc = $cfg['main_url'] . '/' . VHref::getKey('account');
echo '';
} else {
die('Account suspended!');
}
}
}
}
/* facebook register button */
public static function fb_register_button($signup = false)
{
global $cfg, $language;
$text = !$signup ? $language['frontend.signup.fb'] : $language['frontend.signin.fb'];
$cb = $cfg['main_url'] . '/f_modules/m_frontend/m_auth/fb_callback_login.php';
$fb = new Facebook\Facebook([
'app_id' => $cfg['fb_app_id'],
'app_secret' => $cfg['fb_app_secret'],
'default_graph_version' => 'v2.7',
'display' => 'popup',
'default_access_token' => '1061711193887319|fc3a99ba0d42b98b51ac3fa124268422',
]);
$helper = $fb->getRedirectLoginHelper();
$permissions = ['email'];
$loginUrl = $helper->getLoginUrl($cb, $permissions);
return '
' . $language['frontend.signin.fb'] . '';
}
/* google register button */
public static function gp_register_button($signup = false)
{
include_once 'f_core/f_classes/class_google/Google_Client.php';
include_once 'f_core/f_classes/class_google/contrib/Google_Oauth2Service.php';
global $cfg, $language;
$text = !$signup ? $language['frontend.signup.gp'] : $language['frontend.signin.gp'];
$cb = $cfg['main_url'] . '/f_modules/m_frontend/m_auth/gp_callback_login.php';
$clientId = $cfg['gp_app_id'];
$clientSecret = $cfg['gp_app_secret'];
$redirectUrl = $cb;
$homeUrl = $cfg['main_url'];
$gClient = new Google_Client();
$gClient->setAccessType('online');
$gClient->setApprovalPrompt('auto');
$gClient->setClientId($clientId);
$gClient->setClientSecret($clientSecret);
$gClient->setRedirectUri($redirectUrl);
$google_oauthV2 = new Google_Oauth2Service($gClient);
$authUrl = $gClient->createAuthUrl();
return '
' . $language['frontend.signin.gp'] . '';
}
/* signup form */
public function processForm($allowedFields, $requiredFields)
{
global $cfg, $language, $class_filter;
$siteKey = $cfg['recaptcha_site_key'];
$secret = $cfg['recaptcha_secret_key'];
$email_check = new VValidation;
//check for empty fields
$error_message = VForm::checkEmptyFields($allowedFields, $requiredFields, array("frontend_signin_username", "frontend_signup_location", "frontend_signup_bdayM", "frontend_signup_bdayD", "frontend_signup_bdayY", "frontend_signup_gender", "frontend_membership_type"));
//check for valid username format
$error_message = (!VUserinfo::usernameVerification($class_filter->clr_str(trim($_POST['frontend_signin_username']))) and $error_message == '') ? $language['notif.error.invalid.user'] : $error_message;
//check for valid email format
$error_message = (!$email_check->checkEmailAddress($class_filter->clr_str(trim($_POST['frontend_signup_emailadd']))) and $error_message == '') ? $language['frontend.signup.email.invalid'] : $error_message;
//check for email domain restriction
$error_message = ($cfg['signup_domain_restriction'] == 1 and $error_message == '' and !VIPaccess::emailDomainCheck()) ? $language['notif.error.nosignup'] : $error_message;
//check for existing registered email
$error_message = (VUserinfo::existingEmail($class_filter->clr_str(trim($_POST['frontend_signup_emailadd']))) and $error_message == '') ? $language['notif.error.existing.email'] : $error_message;
//check for password format
$error_message = ((strlen($_POST['frontend_signup_setpass']) < $cfg['signup_min_password'] or strlen($_POST['frontend_signup_setpass']) > $cfg['signup_max_password'] or strlen($_POST['frontend_signup_setpassagain']) < $cfg['signup_min_password'] or strlen($_POST['frontend_signup_setpassagain']) > $cfg['signup_max_password']) and $error_message == '') ? $language['notif.error.invalid.pass'] : $error_message;
//check for password match
$error_message = (md5($_POST['frontend_signup_setpass']) !== md5($_POST['frontend_signup_setpassagain']) and $error_message == '') ? $language['notif.error.pass.nomatch'] : $error_message;
//check for correct captcha
if ($error_message == '' and $cfg['signup_captcha'] == 1) {
$captcha = $class_filter->clr_str($_POST['g-recaptcha-response']);
if ($captcha == '') {
$error_message = $language['notif.error.incorect.captcha'];
} else {
$recaptcha = new \ReCaptcha\ReCaptcha($secret, new \ReCaptcha\RequestMethod\CurlPost());
$resp = $recaptcha->verify($captcha, $_SERVER[REM_ADDR]);
if ($resp->isSuccess()) {
} else {
foreach ($resp->getErrorCodes() as $code) {
$error_message = $code;
}
}
}
}
return $error_message;
}
/* define user folders */
public function getUserFolders($usr_key)
{
global $cfg;
$dir = array();
$dir_user_media = array();
$dir_user_uploads = array();
$dir_fch_views = array();
$dir_user_media_main = $cfg['media_files_dir'] . '/' . $usr_key;
$dir_user_media[] = $dir_user_media_main . '/a';
$dir_user_media[] = $dir_user_media_main . '/d';
$dir_user_media[] = $dir_user_media_main . '/i';
$dir_user_media[] = $dir_user_media_main . '/t';
$dir_user_media[] = $dir_user_media_main . '/v';
$dir_user_media[] = $dir_user_media_main . '/s';
$dir_user_media[] = $dir_user_media_main . '/b';
$dir_user_media[] = $dir_user_media_main . '/l';
$dir_user_uploads_main = $cfg['upload_files_dir'] . '/' . $usr_key;
$dir_user_uploads[] = $dir_user_uploads_main . '/a';
$dir_user_uploads[] = $dir_user_uploads_main . '/d';
$dir_user_uploads[] = $dir_user_uploads_main . '/i';
$dir_user_uploads[] = $dir_user_uploads_main . '/v';
$dir_user_uploads[] = $dir_user_uploads_main . '/s';
$dir_user_uploads[] = $dir_user_uploads_main . '/b';
$dir_user_uploads[] = $dir_user_uploads_main . '/l';
$dir_fch_views_main = $cfg['channel_views_dir'] . '/' . $usr_key;
$dir_fch_views[] = $dir_fch_views_main . '/a';
$dir_fch_views[] = $dir_fch_views_main . '/c';
$dir_fch_views[] = $dir_fch_views_main . '/d';
$dir_fch_views[] = $dir_fch_views_main . '/i';
$dir_fch_views[] = $dir_fch_views_main . '/v';
$dir_fch_views[] = $dir_fch_views_main . '/s';
$dir_fch_views[] = $dir_fch_views_main . '/b';
$dir_fch_views[] = $dir_fch_views_main . '/l';
$dir_user_profile_main = $cfg['profile_images_dir'] . '/' . $usr_key;
$dir[0] = array($dir_user_media_main, $dir_user_uploads_main, $dir_fch_views_main, $dir_user_profile_main);
$dir[1] = array($dir_user_media, $dir_user_uploads, $dir_fch_views);
return array($dir[0], $dir[1]);
}
/* create user folders */
public function createUserFolders($usr_key)
{
global $cfg;
$dirs = self::getUserFolders($usr_key);
$dir[0] = $dirs[0];
$dir[1] = $dirs[1];
$php_cgi = (strpos(php_sapi_name(), 'cgi')) ? 1 : 0;
foreach ($dir[0] as $fk => $fv) {
if (!is_dir($fv)) {
mkdir($fv);
if ($php_cgi == 0) {
chmod($fv, 0777);
}
}
}
foreach ($dir[1] as $dk => $dv) {
foreach ($dv as $mk => $mv) {
if (!is_dir($mv)) {
mkdir($mv);
if ($php_cgi == 0) {
chmod($mv, 0777);
}
}
}
}
copy($cfg['profile_images_dir'] . '/default.jpg', $cfg['profile_images_dir'] . '/' . $usr_key . '/' . $usr_key . '.jpg');
}
/* validating registration account */
public function processAccount($fields = false)
{
global $db, $cfg, $class_filter, $class_login, $class_redirect, $class_database;
$email_check = new VValidation;
$hasher = new VPasswordHash(8, false);
$emailadd = !$fields ? $class_filter->clr_str(trim($_POST['frontend_signup_emailadd'])) : trim($fields['email']);
$emailadd = preg_replace('/[^a-zA-Z0-9_.\-@]/', '', $emailadd);
$signup_email = !$fields ? ($email_check->checkEmailAddress($emailadd) ? $emailadd : null) : $fields['email'];
$signup_email = preg_replace('/[^a-zA-Z0-9_.\-@]/', '', $signup_email);
$enc_pass = $class_filter->clr_str($hasher->HashPassword((!$fields ? $_POST['frontend_signup_setpass'] : $fields['password'])));
$extra_emails = intval($_POST['frontend_signup_extraemail']);
$signup_bday = date("Y-m-d");
$usr_active = ($cfg['account_approval'] == 1 and $cfg['paid_memberships'] == 0) ? 0 : 1;
$u_key = VUserinfo::generateRandomString(10);
$chk = $class_database->singleFieldValue('db_accountuser', 'usr_id', 'usr_key', $u_key);
for ($i = 1; $i <= 10; $i++) {
$chk = $class_database->singleFieldValue('db_accountuser', 'usr_id', 'usr_key', $u_key);
if ($chk) {
$u_key = VUserinfo::generateRandomString(10);
} else {
break;
}
}
$perm_arr = array(
"perm_upload_l" => 1,
"perm_upload_v" => 1,
"perm_upload_s" => 1,
"perm_upload_i" => 1,
"perm_upload_a" => 1,
"perm_upload_d" => 1,
"perm_upload_b" => 1,
"perm_view_l" => 1,
"perm_view_v" => 1,
"perm_view_s" => 1,
"perm_view_i" => 1,
"perm_view_a" => 1,
"perm_view_d" => 1,
"perm_view_b" => 1,
"perm_live_chat" => 1,
"perm_live_vod" => 1,
"perm_embed_single" => 1,
"perm_embed_yt_video" => 0,
"perm_embed_yt_short" => 0,
"perm_embed_yt_channel" => 0,
"perm_embed_dm_video" => 0,
"perm_embed_dm_user" => 0,
"perm_embed_mc_video" => 0,
"perm_embed_mc_user" => 0,
"perm_embed_vi_user" => 0,
);
$ch_cfg = serialize(array(
"ch_visible" => 1,
"ch_m_comments" => 1,
"ch_m_friends" => 1,
"ch_m_channels" => 1,
"ch_m_events" => 1,
"ch_m_activity" => 1,
"ch_m_subscribers" => 1,
"ch_m_subscriptions" => 1,
"ch_m_followers" => 1,
"ch_m_following" => 1,
"ch_v_upfiles" => 1,
"ch_v_favorites" => 1,
"ch_v_playlists" => 1,
"ch_v_all" => 1,
"ch_m_home" => 1,
"ch_m_live" => 1,
"ch_m_videos" => 1,
"ch_m_shorts" => 1,
"ch_m_images" => 1,
"ch_m_audios" => 1,
"ch_m_documents" => 1,
"ch_m_blogs" => 1,
"ch_m_playlists" => 1,
"ch_m_discussion" => 1,
"ch_m_about" => 1,
"ch_v_layout" => "player",
"ch_v_content" => "all",
"ch_v_default" => ($cfg['video_module'] == 1 ? 'video' : ($cfg['live_module'] == 1 ? 'live' : ($cfg['image_module'] == 1 ? 'image' : ($cfg['audio_module'] == 1 ? 'audio' : ($cfg['document_module'] == 1 ? 'doc' : null))))),
"ch_v_featured" => "",
"ch_v_autoplay" => 0,
"ch_v_pl_ids" => "",
"ch_ev_expired" => 1,
"ch_ev_map" => 0,
"ch_comm_perms" => "free",
"ch_comm_spam" => "yes"));
$ch_pfields = serialize(array(
"profile_edit_name" => 0,
"profile_edit_total" => 0,
"profile_edit_age" => 0,
"profile_edit_last" => 0,
"profile_edit_subs" => 0,
"profile_edit_infl" => 0,
"profile_edit_style" => 0,
"profile_edit_descr" => 0,
"profile_edit_about" => 0,
"profile_edit_site" => 0,
"profile_edit_town" => 0,
"profile_edit_country" => 0,
"profile_edit_occup" => 0,
"profile_edit_companies" => 0,
"profile_edit_school" => 0,
"profile_edit_interes" => 0,
"profile_edit_movies" => 0,
"profile_edit_music" => 0,
"profile_edit_books" => 0,
));
$ch_rownum = serialize(array("r_friends" => 2, "r_subscribers" => 2, "r_subscriptions" => 2, "r_activity" => 10));
$_usr = trim($_SESSION['signup_username']);
$_usr = preg_replace('/[^a-zA-Z0-9@_.\-]/', '', $_usr);
$ins_array1 = array(
"usr_key" => $u_key,
"usr_user" => $_usr,
"usr_password" => $enc_pass,
"usr_email" => $signup_email,
"usr_emailextras" => $extra_emails,
"usr_joindate" => date("Y-m-d H:i:s"),
"usr_IP" => $class_filter->clr_str($_SERVER[REM_ADDR]),
"usr_theme" => "light",
"usr_perm" => serialize($perm_arr),
"usr_verified" => ($cfg['account_email_verification'] == 0 ? 1 : 0),
"usr_active" => $usr_active,
"usr_status" => $usr_active,
"usr_birthday" => (!$fields ? $signup_bday : $fields['birth_date']),
"usr_gender" => (!$fields ? 'M' : $fields['gender']),
"usr_country" => 'United States',
"usr_photo" => 'file',
"usr_dname" => $_usr,
"ch_user" => $_usr,
"ch_dname" => $_usr,
"ch_cfg" => $ch_cfg,
"ch_pfields" => $ch_pfields,
"ch_rownum" => $ch_rownum,
);
if ($fields) {
$ins_array1['oauth_provider'] = $fields['oauth_provider'];
$ins_array1['oauth_uid'] = $fields['oauth_uid'];
if ($fields['first'] != '') {
$ins_array1['usr_fname'] = $fields['first'];
}
if ($fields['last'] != '') {
$ins_array1['usr_lname'] = $fields['last'];
}
}
$account_q = $class_database->doInsert('db_accountuser', $ins_array1);
$user_id = $db->Insert_ID();
if ($user_id > 0) {
/* create user folders */
self::createUserFolders($u_key);
if ($cfg['activity_logging'] == 1) {
//activity tracking
$db->execute(sprintf("INSERT INTO `db_trackactivity` SET `usr_id`='%s';", $user_id));
}
if ($_GET['next'] != '') {
//friend invited
$next = str_replace(array("-", "%", "="), array("?", "?", "?"), $class_filter->clr_str($_GET['next']));
$next_arr = explode("?", $next);
$pwd_id = $next_arr[2];
$db_q = sprintf("SELECT A.`ct_id`, A.`usr_id`, B.`usr_user` FROM `db_usercontacts` A, `db_accountuser` B WHERE A.`pwd_id`='%s' AND A.`ct_active`='1' AND A.`usr_id`=B.`usr_id`;", $pwd_id);
$q = $db->execute($db_q);
if ($q->fields['ct_id'] > 0) {
$u = $q->fields['usr_user'];
$q = $db->execute(sprintf("UPDATE `db_usercodes` SET `use_date`='%s', code_used='1', code_active='0' WHERE `pwd_id`='%s' AND `code_active`='1' LIMIT 1;", date("Y-m-d H:i:s"), $pwd_id));
$q = $db->execute(sprintf("UPDATE `db_usercontacts` SET `ct_username`='%s', `ct_friend`='1', `ct_datetime`='%s' WHERE `pwd_id`='%s' LIMIT 1;", $_SESSION['signup_username'], date("Y-m-d H:i:s"), $pwd_id));
$q = $class_database->doInsert('db_usercontacts', array("usr_id" => $user_id, "pwd_id" => VUserinfo::generateRandomString(10), "ct_username" => $u, "ct_friend" => 1, "ct_datetime" => date("Y-m-d H:i:s")));
}
}
if ($cfg['account_email_verification'] == 1 or $cfg['notify_welcome'] == 1) {
//email verification and welcome notification
$notifier = new VNotify;
}
$welcome_email = ($cfg['notify_welcome'] == 1 and $notifier->dst_mail = $signup_email) ? VNotify::queInit('welcome', array($signup_email), $user_id) : null;
$verification_email = ($cfg['account_email_verification'] == 1) ? VNotify::queInit('account_email_verification', array($signup_email), $user_id) : null;
$admin_email = ($cfg['backend_notification_signup'] == 1) ? VNotify::queInit('backend_notification_signup', array($cfg['backend_email']), $signup_email) : null;
if ($cfg['paid_memberships'] == 1) {
//paid memberships
$q = $db->execute(sprintf("INSERT INTO `db_packusers` SET `usr_id`='%s';", $user_id));
$q = $db->execute(sprintf("SELECT `pk_price`, `pk_period` FROM `db_packtypes` WHERE `pk_id`='%s' LIMIT 2;", intval($_SESSION['signup_pack'])));
switch ($q->fields['pk_price']) {
case '0':
$expire_time = date("Y-m-d H:i:s", strtotime("+" . $q->fields['pk_period'] . " day"));
$sub_usage = VPayment::updateFreeUsage($user_id);
$sub_update = VPayment::updateFreeAccount(intval($_SESSION['signup_pack']), $expire_time, $user_id);
if (!$fields) {
$login = ($db->Affected_Rows() > 0) ? VLogin::loginAttempt('frontend', $class_filter->clr_str($_SESSION['signup_username']), $class_filter->clr_str($_POST['frontend_signup_setpass'])) : null;
if ($login) {return true;} else {return false;}
}
break;
default:
$q = $db->execute(sprintf("UPDATE `db_accountuser` SET `usr_active`='0', `usr_status='0' WHERE `usr_id`='%s' LIMIT 1;", intval($user_id)));
// a logout and session clearing might go here
if (!$fields) {
$_SESSION['renew_id'] = '';
header('Location: ' . $cfg['main_url'] . '/' . VHref::getKey('signup') . '/' . VHref::getKey('x_payment') . '?p=' . base64_encode(intval($_SESSION['signup_pack'])) . '&u=' . base64_encode(intval($user_id)));
die;
}
}
}
return $user_id;
} else {
return false;
}
}
/* set account verified */
public function verifyAccount()
{
global $db;
$db->execute(sprintf("UPDATE `db_accountuser` SET `usr_verified`='1' WHERE `usr_id`='%s' AND `usr_verified`='0' LIMIT 1;", VRecovery::getRecoveryID($_GET['sid'], 'verification')));
if ($db->Affected_Rows() > 0) {
$update = VRecovery::updateRecoveryUsage('verification');
return true;
} else {
return false;
}
}
/* signup form sessions start */
public function formSessionInit()
{
global $cfg, $class_filter, $language;
$signup_username = ($cfg['username_format'] == 'strict' and VUserinfo::isValidUsername($_POST['frontend_signin_username'])) ? $class_filter->clr_str($_POST['frontend_signin_username']) : ($cfg['username_format'] == 'loose' and VUserinfo::isValidUsername($_POST['frontend_signin_username'])) ? VUserinfo::clearString($_POST['frontend_signin_username']) : null;
$signup_pack = $cfg['paid_memberships'] == 1 ? $class_filter->clr_str($_POST['frontend_membership_type_sel']) : null;
$_SESSION['signup_username'] = $signup_username;
$_SESSION['signup_pack'] = $signup_pack != '' ? $signup_pack : null;
return true;
}
/* signup form sessions reset */
public function formSessionReset()
{
$_SESSION['signup_username'] = null;
$_SESSION['signup_pack'] = null;
}
}