public function fire() { $cacheName = $this->queueCacheName . $this->argument('aliasCacheCode'); if (!Cache::has($cacheName)) { return; } $smallIds = Cache::pull($cacheName); $profiles = Profile::whereIn('small_id', $smallIds)->get(); foreach ($profiles as $profile) { $steamAPI = new SteamAPI('alias'); $steamAPI->setSmallId($profile->small_id); $steamAlias = $steamAPI->run(); if ($steamAPI->error()) { $steamAlias = []; } else { usort($steamAlias, array('VacStatus\\Steam\\Steam', 'aliasSort')); } $profile->alias = json_encode($steamAlias); $profile->save(); $cacheName = "profile_{$profile->small_id}}"; if (!Cache::has($cachName)) { continue; } $profileCache = Cache::get($cacheName); $profileCache['alias'] = Steam::friendlyAlias($steamAlias); if (Cache::has($cacheName)) { Cache::forget($cacheName); } $expireTime = Carbon::now()->addMinutes(60); Cache::put($cacheName, $profileCache, $expireTime); } }
public function login() { if (Auth::check() || Auth::viaRemember()) { return redirect()->intended('/list')->with('success', 'You have Successfully logged in!'); } $steamuser = SteamAuth::Auth(); $steam64BitId = str_replace("http://steamcommunity.com/openid/id/", "", $steamuser['steamid']); $steamAPI = new SteamAPI('info'); $steamAPI->setSteamId($steam64BitId); $userSteamInfo = $steamAPI->run(); if (isset($userSteamInfo->type) && $userSteamInfo->type == 'error' || !isset($userSteamInfo->response->players[0])) { return redirect()->intended('/')->with('error', 'There was an error trying to communicate with Steam Server.'); } $userSteamInfo = $userSteamInfo->response->players[0]; $steamAPI = new SteamAPI('friends'); $steamAPI->setSteamId($steam64BitId); $userSteamFriends = $steamAPI->run(); $simpleFriends = []; if (isset($userSteamFriends->friendslist)) { $userSteamFriends = $userSteamFriends->friendslist->friends; foreach ($userSteamFriends as $userSteamFriend) { $simpleFriends[] = Steam::toSmallId($userSteamFriend->steamid); } } $smallId = Steam::toSmallId($steam64BitId); // Try to grab user or create new one $user = User::firstOrCreate(['small_id' => $smallId]); $user->display_name = $userSteamInfo->personaname; $user->friendslist = json_encode($simpleFriends); $singleProfile = new SingleProfile($smallId); $singleProfile->getProfile(); if (!$user->save()) { return redirect()->intended('/')->with('error', 'There was an error adding user to database'); } Auth::login($user, true); return redirect()->intended('/list')->with('success', 'You have Successfully logged in.'); }
private function check() { $userMail = $this->userMail; $userLists = $this->userLists; $profiles = $this->profiles; $profilesToSendForNotification = []; $getSmallIds = []; foreach ($userLists as $userList) { $userListProfiles = $profiles->where('user_list_id', $userList->id); foreach ($userListProfiles as $profile) { if ($userList->updated_at->timestamp < $profile->updated_at->timestamp && $profile->updated_at->timestamp <= time() && $profile->updated_at->timestamp != $profile->created_at->timestamp && $userList->updated_at->timestamp != $userList->created_at->timestamp) { $profilesToSendForNotification[$profile->id] = $profile; } if (!in_array($profile->small_id, $getSmallIds)) { $getSmallIds[] = $profile->small_id; } } } $steamAPI = new SteamAPI('ban'); $steamAPI->setSmallId($getSmallIds); $steamBans = $steamAPI->run(); if ($steamAPI->error()) { $this->error = $steamAPI->errorMessage(); return false; } if (!isset($steamBans->players[0])) { $this->error = 'profile_null'; return false; } $steamBans = $steamBans->players; $indexSave = []; foreach ($steamBans as $k => $ban) { $indexSave[Steam::toSmallId($ban->SteamId)] = $k; } foreach ($getSmallIds as $k => $smallId) { if (!isset($indexSave[$smallId])) { continue; } $steamBan = $steamBans[$indexSave[$smallId]]; $profile = $profiles->where('small_id', $smallId)->first(); $newVacBanDate = new DateTime(); $newVacBanDate->sub(new DateInterval("P{$steamBan->DaysSinceLastBan}D")); $profileBan = ['vac' => (int) $steamBan->NumberOfVACBans + (int) $steamBan->NumberOfGameBans, 'community' => $steamBan->CommunityBanned, 'trade' => $steamBan->EconomyBan != 'none', 'vac_banned_on' => $newVacBanDate->format('Y-m-d')]; if ($profile->vac != $profileBan['vac'] || $profile->community != $profileBan['community'] || $profile->trade != $profileBan['trade']) { $oldProfileBan = ProfileBan::where('profile_id', $profile->id)->first(); if ($profile->vac > $profileBan['vac']) { $oldProfileBan->timestamps = false; // Dont notify when user is unbanned (Maybe this can be an option in the future) $oldProfileBan->unban = true; } $oldProfileBan->vac = $profileBan['vac']; $oldProfileBan->community = $profileBan['community']; $oldProfileBan->trade = $profileBan['trade']; $oldProfileBan->vac_banned_on = $profileBan['vac_banned_on']; $oldProfileBan->save(); $profile->vac = $profileBan['vac']; $profile->community = $profileBan['community']; $profile->trade = $profileBan['trade']; $profile->vac_banned_on = $profileBan['vac_banned_on']; $profilesToSendForNotification[$profile->id] = $profile; } } if (count($profilesToSendForNotification) == 0) { $this->error = 'no_notify_method'; return false; } $this->sendEmail = $userMail->verify == "verified" ? $userMail->email : false; $this->sendPushbullet = $userMail->pushbullet_verify == "verified" ? $userMail->pushbullet : false; $this->sendProfiles = $profilesToSendForNotification; return true; }
private function updateUsingAPI() { $getSmallId = []; foreach ($this->refreshProfiles as $profile) { $smallId = $profile['profile']['small_id']; $key = $profile['profile_key']; $getSmallId[] = (int) $smallId; $toSaveKey[$smallId] = $key; } /* grab 'info' from web api and handle errors */ $steamAPI = new SteamAPI('info'); $steamAPI->setSmallId($getSmallId); $steamInfos = $steamAPI->run(); if ($steamAPI->error()) { return ['error' => $steamAPI->errorMessage()]; } if (!isset($steamInfos->response->players[0])) { return ['error' => 'profile_null']; } // simplify the variable $steamInfos = $steamInfos->response->players; /* grab 'ban' from web api and handle errors */ $steamAPI = new SteamAPI('ban'); $steamAPI->setSmallId($getSmallId); $steamBans = $steamAPI->run(); if ($steamAPI->error()) { return ['error' => $steamAPI->errorMessage()]; } if (!isset($steamBans->players[0])) { return ['error' => 'profile_null']; } $steamBans = $steamBans->players; // whereIn('profile.small_id', $getSmallId)-> $profiles = Profile::whereIn('profile.small_id', $getSmallId)->groupBy('profile.id')->leftjoin('profile_ban', 'profile_ban.profile_id', '=', 'profile.id')->leftjoin('users', 'profile.small_id', '=', 'users.small_id')->leftjoin('user_list_profile', 'user_list_profile.profile_id', '=', 'profile.id')->whereNull('user_list_profile.deleted_at')->get(['profile.id', 'profile.small_id', 'profile.display_name', 'profile.privacy', 'profile.avatar_thumb', 'profile.avatar', 'profile.profile_created', 'profile.alias', 'profile.created_at', 'profile_ban.community', 'profile_ban.vac', 'profile_ban.trade', 'profile_ban.unban', 'users.site_admin', 'users.donation', 'users.beta', \DB::raw('max(user_list_profile.created_at) as last_added_created_at'), \DB::raw('count(user_list_profile.id) as total')]); $indexSave = []; foreach ($steamInfos as $k => $info) { $indexSave[Steam::toSmallId($info->steamid)] = ['steamInfos' => $k]; } foreach ($steamBans as $k => $ban) { // Lets just not update if api didn't return for this user if (!isset($indexSave[Steam::toSmallId($ban->SteamId)])) { continue; } $indexSave[Steam::toSmallId($ban->SteamId)]['steamBans'] = $k; } $newProfiles = []; foreach ($getSmallId as $k => $smallId) { // api didn't give values for this user if (!isset($indexSave[$smallId])) { continue; } $keys = $indexSave[$smallId]; $steamInfo = $steamInfos[$keys['steamInfos']]; if (!isset($keys['steamBans'])) { continue; } // right now dont let this user get through. Figure out a better method $steamBan = $steamBans[$keys['steamBans']]; $profile = $profiles->where('small_id', $smallId)->first(); if (is_null($profile)) { $profile = Profile::whereSmallId($smallId)->first(); if (!isset($profile->id)) { $profile = new Profile(); $profile->small_id = $smallId; } if (isset($steamInfo->timecreated)) { $profile->profile_created = $steamInfo->timecreated; } } $profile->display_name = $steamInfo->personaname; $profile->avatar = Steam::imgToHTTPS($steamInfo->avatarfull); $profile->avatar_thumb = Steam::imgToHTTPS($steamInfo->avatar); $profile->privacy = $steamInfo->communityvisibilitystate; $profile->save(); $profileBan = $profile->ProfileBan; // Dont update the profile_ban if there is nothing to update // This has to do with in the future when I check for new bans to notify/email $skipProfileBan = false; $newVacBanDate = new DateTime(); $newVacBanDate->sub(new DateInterval("P{$steamBan->DaysSinceLastBan}D")); $combinedBan = (int) $steamBan->NumberOfVACBans + (int) $steamBan->NumberOfGameBans; if (!isset($profileBan->id)) { $profileBan = new ProfileBan(); $profileBan->profile_id = $profile->id; $profileBan->unban = false; } else { $skipProfileBan = $profileBan->skipProfileBanUpdate($steamBan); if ($profileBan->vac != (int) $steamBan->NumberOfVACBans + (int) $steamBan->NumberOfGameBans && $profileBan->vac_banned_on->format('Y-m-d') !== $newVacBanDate->format('Y-m-d')) { $skipProfileBan = false; $profileBan->timestamps = false; } if ($profileBan->vac > $combinedBan) { $skipProfileBan = false; $profileBan->timestamps = false; $profileBan->unban = true; } } $profileBan->vac = $combinedBan; $profileBan->community = $steamBan->CommunityBanned; $profileBan->trade = $steamBan->EconomyBan != 'none'; $profileBan->vac_banned_on = $newVacBanDate->format('Y-m-d'); if (!$skipProfileBan) { $profile->ProfileBan()->save($profileBan); } /* Time to do profile_old_alias */ /* Checks to make sure if there is already a same name before inserting new name */ $profileOldAlias = $profile->ProfileOldAlias()->whereProfileId($profile->id)->orderBy('id', 'desc')->get(); if ($profileOldAlias->count() == 0) { $profileOldAlias = new ProfileOldAlias(); $profileOldAlias->profile_id = $profile->id; $profileOldAlias->seen = time(); $profileOldAlias->seen_alias = $profile->display_name; $profileOldAlias->save(); } else { $match = false; $recent = 0; foreach ($profileOldAlias as $oldAlias) { if (!is_object($oldAlias)) { continue; } if ($oldAlias->seen_alias == $profile->display_name) { $match = true; break; } $recent = $oldAlias->compareTime($recent); } if (!$match && $recent + Steam::$UPDATE_TIME < time()) { $newAlias = new ProfileOldAlias(); $newAlias->profile_id = $profile->id; $newAlias->seen = time(); $newAlias->seen_alias = $profile->display_name; $profile->ProfileOldAlias()->save($newAlias); } } $steam64BitId = Steam::to64Bit($profile->small_id); $vacBanDate = new DateTime(); $vacBanDate->sub(new DateInterval("P{$steamBan->DaysSinceLastBan}D")); $oldAliasArray = []; foreach ($profileOldAlias as $k => $oldAlias) { if (!is_object($oldAlias)) { $oldAliasArray[] = ["newname" => $profileOldAlias->seen_alias, "timechanged" => $profileOldAlias->seen->format("M j Y")]; break; } $oldAliasArray[] = ["newname" => $oldAlias->seen_alias, "timechanged" => $oldAlias->seen->format("M j Y")]; } $profileCheckCache = "profile_checked_"; $currentProfileCheck = ['number' => 0, 'time' => date("M j Y", time())]; if (Cache::has($profileCheckCache . $profile->smallId)) { $currentProfileCheck = Cache::get($profileCheckCache . $profile->smallId); } $newProfileCheck = ['number' => $currentProfileCheck['number'] + 1, 'time' => date("M j Y", time())]; Cache::forever($profileCheckCache . $profile->smallId, $newProfileCheck); $return = ['id' => $profile->id, 'display_name' => $steamInfo->personaname, 'avatar' => Steam::imgToHTTPS($steamInfo->avatarfull), 'avatar_thumb' => Steam::imgToHTTPS($steamInfo->avatar), 'small_id' => $profile->small_id, 'steam_64_bit' => $steam64BitId, 'steam_32_bit' => Steam::to32Bit($steam64BitId), 'profile_created' => isset($steamInfo->timecreated) ? date("M j Y", $steamInfo->timecreated) : "Unknown", 'privacy' => $steamInfo->communityvisibilitystate, 'alias' => Steam::friendlyAlias(json_decode($profile->alias)), 'created_at' => $profile->created_at ? $profile->created_at->format("M j Y") : null, 'vac' => $combinedBan, 'vac_banned_on' => $vacBanDate->format("M j Y"), 'community' => $steamBan->CommunityBanned, 'trade' => $steamBan->EconomyBan != 'none', 'site_admin' => (int) $profile->site_admin ?: 0, 'donation' => (int) $profile->donation ?: 0, 'beta' => (int) $profile->beta ?: 0, 'profile_old_alias' => $oldAliasArray, 'times_checked' => $currentProfileCheck, 'times_added' => ['number' => (int) $profile->total ?: 0, 'time' => (new DateTime($profile->last_added_created_at))->format("M j Y")]]; $newProfiles[$toSaveKey[$profile->small_id]] = $return; $this->updateCache($profile->small_id, $return); } // Send somewhere else to update alias // This takes too long for many profiles $randomString = str_random(12); $updateAliasCacheName = "update_alias_"; if (Cache::has($updateAliasCacheName . $randomString)) { while (Cache::has($updateAliasCacheName . $randomString)) { $randomString = str_random(12); } } Cache::forever($updateAliasCacheName . $randomString, $getSmallId); shell_exec('php artisan update:alias ' . $randomString . ' > /dev/null 2>/dev/null &'); return $newProfiles; }
private function updateUsingAPI() { /* Time to follow that great guide to updating via API above */ /* grab 'info' from web api and handle errors */ $steamAPI = new SteamAPI('info'); $steamAPI->setSmallId($this->smallId); $steamInfo = $steamAPI->run(); if ($steamAPI->error()) { return ['error' => $steamAPI->errorMessage()]; } if (!isset($steamInfo->response->players[0])) { return ['error' => 'profile_null']; } $steamInfo = $steamInfo->response->players[0]; /* grab 'ban' from web api and handle errors */ $steamAPI = new SteamAPI('ban'); $steamAPI->setSmallId($this->smallId); $steamBan = $steamAPI->run(); if ($steamAPI->error()) { return ['error' => $steamAPI->errorMessage()]; } if (!isset($steamBan->players[0])) { return ['error' => 'profile_null']; } $steamBan = $steamBan->players[0]; /* grab 'alias' from old web api but do not break on errors */ $steamAPI = new SteamAPI('alias'); $steamAPI->setSmallId($this->smallId); $steamAlias = $steamAPI->run(); if ($steamAPI->error()) { $steamAlias = []; } else { usort($steamAlias, array('VacStatus\\Steam\\Steam', 'aliasSort')); } /* Successfully passed steam's not very reliable api servers */ /* Lets hope we got the alias as well :))) */ /* Lets start up with profile table */ $profile = Profile::whereSmallId($this->smallId)->first(); if (!isset($profile->id)) { $profile = new Profile(); $profile->small_id = $this->smallId; if (isset($steamInfo->timecreated)) { $profile->profile_created = $steamInfo->timecreated; } } else { // Make sure to update if this was private and now suddenly public if (empty($profile->profile_created) && isset($steamInfo->timecreated)) { $profile->profile_created = $steamInfo->timecreated; } } $profile->display_name = $steamInfo->personaname; $profile->avatar = Steam::imgToHTTPS($steamInfo->avatarfull); $profile->avatar_thumb = Steam::imgToHTTPS($steamInfo->avatar); $profile->privacy = $steamInfo->communityvisibilitystate; $profile->alias = json_encode($steamAlias); if (!$profile->save()) { return ['error' => 'profile_save_error']; } /* Now to do profile_ban table */ $profileBan = $profile->ProfileBan; // Dont update the profile_ban if there is nothing to update // This has to do with in the future when I check for new bans to notify/email $skipProfileBan = false; $newVacBanDate = new DateTime(); $newVacBanDate->sub(new DateInterval("P{$steamBan->DaysSinceLastBan}D")); $combinedBan = (int) $steamBan->NumberOfVACBans + (int) $steamBan->NumberOfGameBans; if (!isset($profileBan->id)) { $profileBan = new ProfileBan(); $profileBan->profile_id = $profile->id; $profileBan->unban = false; } else { $skipProfileBan = $profileBan->skipProfileBanUpdate($steamBan); if ($profileBan->vac != (int) $steamBan->NumberOfVACBans + (int) $steamBan->NumberOfGameBans && $profileBan->vac_banned_on->format('Y-m-d') !== $newVacBanDate->format('Y-m-d')) { $skipProfileBan = false; $profileBan->timestamps = false; } if ($profileBan->vac > $combinedBan) { $profileBan->timestamps = false; $profileBan->unban = true; } } $profileBan->vac = $combinedBan; $profileBan->community = $steamBan->CommunityBanned; $profileBan->trade = $steamBan->EconomyBan != 'none'; $profileBan->vac_banned_on = $newVacBanDate->format('Y-m-d'); if (!$skipProfileBan) { if (!$profile->ProfileBan()->save($profileBan)) { return ['error' => 'profile_ban_save_error']; } } /* Time to do profile_old_alias */ /* Checks to make sure if there is already a same name before inserting new name */ $profileOldAlias = $profile->ProfileOldAlias()->whereProfileId($profile->id)->orderBy('id', 'desc')->get(); $currentTime = new DateTime(); if ($profileOldAlias->count() == 0) { $profileOldAlias = new ProfileOldAlias(); $profileOldAlias->profile_id = $profile->id; $profileOldAlias->seen = $currentTime->format('Y-m-d'); $profileOldAlias->seen_alias = $profile->display_name; $profileOldAlias->save(); } else { $match = false; $recent = 0; foreach ($profileOldAlias as $oldAlias) { if (!is_object($oldAlias)) { continue; } if ($oldAlias->seen_alias == $profile->display_name) { $match = true; break; } $recent = $oldAlias->compareTime($recent); } if (!$match && $recent + Steam::$UPDATE_TIME < time()) { $currentTime = new DateTime(); $newAlias = new ProfileOldAlias(); $newAlias->profile_id = $profile->id; $newAlias->seen = $currentTime->format('Y-m-d'); $newAlias->seen_alias = $profile->display_name; $profile->ProfileOldAlias()->save($newAlias); } } $profileOldAlias = $profile->ProfileOldAlias()->whereProfileId($profile->id)->orderBy('id', 'desc')->get(); /* Finished inserting / updating into the DB! */ /* Check to see if this user has an account in vacstatus */ $user = User::where('small_id', $this->smallId)->first(); /* getting the number of times checked and added */ $gettingCount = UserListProfile::whereProfileId($profile->id)->orderBy('id', 'desc')->get(); $profileTimesAdded = ['number' => $gettingCount->count(), 'time' => isset($gettingCount[0]) ? (new DateTime($gettingCount[0]->created_at))->format("M j Y") : null]; $profileCheckCache = "profile_checked_"; $currentProfileCheck = ['number' => 0, 'time' => date("M j Y", time())]; if (Cache::has($profileCheckCache . $this->smallId)) { $currentProfileCheck = Cache::get($profileCheckCache . $this->smallId); } $newProfileCheck = ['number' => $currentProfileCheck['number'] + 1, 'time' => date("M j Y", time())]; Cache::forever($profileCheckCache . $this->smallId, $newProfileCheck); /* Writing the return array for the single profile */ $steam64BitId = Steam::to64Bit($profile->small_id); $oldAliasArray = []; foreach ($profileOldAlias as $k => $oldAlias) { if ($oldAlias === true) { $oldAliasArray[] = ["newname" => $profileOldAlias->seen_alias, "timechanged" => $profileOldAlias->seen->format("M j Y")]; break; } $oldAliasArray[] = ["newname" => $oldAlias->seen_alias, "timechanged" => $oldAlias->seen->format("M j Y")]; } $return = ['id' => $profile->id, 'display_name' => $steamInfo->personaname, 'avatar' => Steam::imgToHTTPS($steamInfo->avatarfull), 'avatar_thumb' => Steam::imgToHTTPS($steamInfo->avatar), 'small_id' => $this->smallId, 'steam_64_bit' => $steam64BitId, 'steam_32_bit' => Steam::to32Bit($steam64BitId), 'profile_created' => isset($profile->profile_created) ? date("M j Y", $profile->profile_created) : "Unknown", 'privacy' => $steamInfo->communityvisibilitystate, 'alias' => Steam::friendlyAlias($steamAlias), 'created_at' => $profile->created_at->format("M j Y"), 'vac' => $combinedBan, 'vac_banned_on' => $newVacBanDate->format("M j Y"), 'community' => $steamBan->CommunityBanned, 'trade' => $steamBan->EconomyBan != 'none', 'site_admin' => (int) isset($user->id) ? $user->site_admin : 0, 'donation' => (int) isset($user->id) ? $user->donation : 0, 'beta' => (int) isset($user->id) ? $user->beta : 0, 'profile_old_alias' => $oldAliasArray, 'times_checked' => $currentProfileCheck, 'times_added' => $profileTimesAdded]; /* YAY nothing broke :D time to return the data (and update cache) */ $this->updateCache($return); return $return; }
public static function findUser($data) { $data = strtolower(trim($data)); if (empty($data)) { return ['error' => 'Invalid or empty input']; } if (strlen($data) > 100) { return ['error' => 'Field too long']; } if (substr($data, 0, 6) == 'steam_') { $tmp = explode(':', $data); if (count($tmp) == 3 && is_numeric($tmp[1]) && is_numeric($tmp[2])) { $steam3Id = bcadd($tmp[2] * 2 + $tmp[1], '76561197960265728'); return ['success' => $steam3Id]; } return ['error' => 'Invalid Steam ID']; } else { if (substr($data, 0, 2) == 'u:') { $tmp = explode(':', $data); if (count($tmp) == 3 && is_numeric($tmp[2])) { $steam3Id = bcadd($tmp[2], '76561197960265728'); return ['success' => $steam3Id]; } return ['error' => 'Invalid Steam ID']; } else { if ($p = strrpos($data, '/')) { $tmp = array_values(array_filter(explode('/', $data))); $a = null; foreach ($tmp as $key => $item) { if (!isset($tmp[$key + 1]) || empty($tmp[$key + 1])) { return ['error' => 'Invalid input']; } if ($item == 'profiles') { $a = $tmp[$key + 1]; break; } else { if ($item == 'id') { $data = $tmp[$key + 1]; break; } } } if (is_numeric($a) && preg_match('/7656119/', $a)) { return ['success' => $a]; } else { $steamAPI = new SteamAPI('vanityUrl'); $steamVanityUrl = $steamAPI->setSteamId($data)->run(); if (isset($steamVanityUrl->type) && $steamVanityUrl->type == 'error' || !isset($steamVanityUrl->response->steamid) && $steamVanityUrl->response->success == 42) { return ['error' => 'Invalid input']; } $steamid64 = (string) $steamVanityUrl->response->steamid; if (!preg_match('/7656119/', $steamid64)) { return ['error' => 'Invalid link']; } else { return ['success' => $steamid64]; } } } else { if (is_numeric($data) && preg_match('/7656119/', $data)) { return ['success' => $data]; } else { $steamAPI = new SteamAPI('vanityUrl'); $steamVanityUrl = $steamAPI->setSteamId($data)->run(); if (isset($steamVanityUrl->type) && $steamVanityUrl->type == 'error' || !isset($steamVanityUrl->response->steamid) && $steamVanityUrl->response->success == 42) { return ['error' => 'Invalid input']; } $steamid64 = (string) $steamVanityUrl->response->steamid; if (!preg_match('/7656119/', $steamid64)) { return ['error' => 'Invalid input']; } else { return ['success' => $steamid64]; } } } } } }