123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389 |
- <?php
- function gnusocial_api_get_api_object($oauth_token = null, $oauth_token_secret = null) {
- $consumer_key = elgg_get_plugin_setting('consumer_key', 'gnusocial_api');
- $consumer_secret = elgg_get_plugin_setting('consumer_secret', 'gnusocial_api');
- if (!($consumer_key && $consumer_secret)) {
- return null;
- }
- $api = new GNUSocialOAuth($consumer_key, $consumer_secret, $oauth_token, $oauth_token_secret);
- if ($api) {
- $api->host = "https://quitter.se/api/";
- }
- return $api;
- }
- function gnusocial_api_allow_sign_on_with_gnusocial() {
- $consumer_key = elgg_get_plugin_setting('consumer_key', 'gnusocial_api');
- if (!$consumer_key) {
- return false;
- }
- $consumer_secret = elgg_get_plugin_setting('consumer_secret', 'gnusocial_api');
- if (!$consumer_secret) {
- return false;
- }
- return elgg_get_plugin_setting('sign_on', 'gnusocial_api') == 'yes';
- }
- function gnusocial_api_forward() {
-
- if (!gnusocial_api_allow_sign_on_with_gnusocial()) {
- forward();
- }
- $callback = elgg_normalize_url("gnusocial_api/login");
- $request_link = gnusocial_api_get_authorize_url($callback);
-
- $login_metadata = array(
- 'persistent' => (bool) get_input("persistent"),
- );
-
- $session = elgg_get_session();
- $server = _elgg_services()->request->server;
- $ref = $server->get('HTTP_REFERER', '');
- if ($session->has('last_forward_from')) {
- $login_metadata['forward'] = $session->get('last_forward_from');
- } elseif (0 === strpos($ref, elgg_get_site_url())
- && 0 !== strpos($ref, elgg_get_site_url() . 'gnusocial_api/')) {
- $login_metadata['forward'] = $ref;
- }
- $session->set('gnusocial_api_login_metadata', $login_metadata);
- forward($request_link, 'gnusocial_api');
- }
- function gnusocial_api_login() {
-
- if (!gnusocial_api_allow_sign_on_with_gnusocial()) {
- forward();
- }
- $session = elgg_get_session();
- $token = gnusocial_api_get_access_token(get_input('oauth_verifier'));
- $persistent = false;
- $forward = '';
-
- $login_metadata = $session->get('gnusocial_api_login_metadata');
- $session->remove('gnusocial_api_login_metadata');
- if (!empty($login_metadata['persistent'])) {
- $persistent = true;
- }
- if (!empty($login_metadata['forward'])) {
- $forward = $login_metadata['forward'];
- }
- if (!isset($token['oauth_token']) || !isset($token['oauth_token_secret'])) {
- register_error(elgg_echo('gnusocial_api:login:error'));
- forward();
- }
-
-
- $options = array(
- 'type' => 'user',
- 'plugin_id' => 'gnusocial_api',
- 'plugin_user_setting_name_value_pairs' => array(
- 'access_key' => $token['oauth_token'],
- 'access_secret' => $token['oauth_token_secret'],
- ),
- 'limit' => 0,
- );
- $users = elgg_get_entities_from_plugin_user_settings($options);
- if ($users) {
- if (count($users) == 1 && login($users[0], $persistent)) {
- system_message(elgg_echo('gnusocial_api:login:success'));
- forward($forward);
- } else {
- register_error(elgg_echo('gnusocial_api:login:error'));
- forward();
- }
- } else {
- $api = gnusocial_api_get_api_object($token['oauth_token'], $token['oauth_token_secret']);
- $gnusocial = $api->get('account/verify_credentials');
-
- $user = FALSE;
- if ($gnusocial_user = get_user_by_username($token['screen_name'])) {
- if (($screen_name = $gnusocial_user->gnusocial_screen_name) && ($screen_name == $token['screen_name'])) {
-
- $user = $gnusocial_user;
- $forward = '';
- }
- }
-
- if (!$user) {
- $user = gnusocial_api_create_user($gnusocial);
- $site_name = elgg_get_site_entity()->name;
- system_message(elgg_echo('gnusocial_api:login:email', array($site_name)));
- $forward = "gnusocial_api/interstitial";
- }
-
- elgg_set_plugin_user_setting('gnusocial_name', $token['screen_name'], $user->guid, 'gnusocial_api');
- elgg_set_plugin_user_setting('access_key', $token['oauth_token'], $user->guid, 'gnusocial_api');
- elgg_set_plugin_user_setting('access_secret', $token['oauth_token_secret'], $user->guid, 'gnusocial_api');
-
- gnusocial_api_update_user_avatar($user, $gnusocial->profile_image_url);
-
- if (login($user)) {
- system_message(elgg_echo('gnusocial_api:login:success'));
- } else {
- system_message(elgg_echo('gnusocial_api:login:error'));
- }
- forward($forward, 'gnusocial_api');
- }
-
- register_error(elgg_echo('gnusocial_api:login:error'));
- forward();
- }
- function gnusocial_api_create_user($gnusocial) {
-
- if (!gnusocial_api_allow_new_users_with_gnusocial()) {
- register_error(elgg_echo('registerdisabled'));
- forward();
- }
-
- $username = $gnusocial->screen_name;
- while (get_user_by_username($username)) {
-
- $username = $gnusocial->screen_name . '_' . rand(1000, 9999);
- }
- $password = generate_random_cleartext_password();
- $name = $gnusocial->name;
- $user = new ElggUser();
- $user->username = $username;
- $user->name = $name;
- $user->access_id = ACCESS_PUBLIC;
- $user->setPassword($password);
- $user->owner_guid = 0;
- $user->container_guid = 0;
- if (!$user->save()) {
- register_error(elgg_echo('registerbad'));
- forward();
- }
- return $user;
- }
- function gnusocial_api_update_user_avatar($user, $file_location) {
-
-
-
-
-
-
- $file_location = str_replace('_normal.jpg', '.jpg', $file_location);
- $icon_sizes = elgg_get_config('icon_sizes');
- $filehandler = new ElggFile();
- $filehandler->owner_guid = $user->getGUID();
- foreach ($icon_sizes as $size => $dimensions) {
- $image = get_resized_image_from_existing_file(
- $file_location,
- $dimensions['w'],
- $dimensions['h'],
- $dimensions['square']
- );
- $filehandler->setFilename("profile/$user->guid$size.jpg");
- $filehandler->open('write');
- $filehandler->write($image);
- $filehandler->close();
- }
-
-
- $user->icontime = time();
- }
- function gnusocial_api_authorize() {
- $token = gnusocial_api_get_access_token(get_input('oauth_verifier'));
- if (!isset($token['oauth_token']) || !isset($token['oauth_token_secret'])) {
- register_error(elgg_echo('gnusocial_api:authorize:error'));
- forward('settings/plugins', 'gnusocial_api');
- }
-
- $options = array(
- 'type' => 'user',
- 'plugin_id' => 'gnusocial_api',
- 'plugin_user_setting_name_value_pairs' => array(
- 'access_key' => $token['oauth_token'],
- 'access_secret' => $token['oauth_token_secret'],
- ),
- 'limit' => 0
- );
- $users = elgg_get_entities_from_plugin_user_settings($options);
-
- if ($users) {
- foreach ($users as $user) {
-
- elgg_unset_plugin_user_setting('gnusocial_name', $user->getGUID(), 'gnusocial_api');
- elgg_unset_plugin_user_setting('access_key', $user->getGUID(), 'gnusocial_api');
- elgg_unset_plugin_user_setting('access_secret', $user->getGUID(), 'gnusocial_api');
- }
- }
-
- elgg_set_plugin_user_setting('gnusocial_name', $token['screen_name'], 0, 'gnusocial_api');
- elgg_set_plugin_user_setting('access_key', $token['oauth_token'], 0, 'gnusocial_api');
- elgg_set_plugin_user_setting('access_secret', $token['oauth_token_secret'], 0, 'gnusocial_api');
-
-
- elgg_trigger_plugin_hook('authorize', 'gnusocial_api', array('token' => $token));
- system_message(elgg_echo('gnusocial_api:authorize:success'));
- forward('settings/plugins', 'gnusocial_api');
- }
- function gnusocial_api_revoke() {
-
- elgg_unset_plugin_user_setting('gnusocial_name', 0, 'gnusocial_api');
- elgg_unset_plugin_user_setting('access_key', 0, 'gnusocial_api');
- elgg_unset_plugin_user_setting('access_secret', 0, 'gnusocial_api');
- system_message(elgg_echo('gnusocial_api:revoke:success'));
- forward('settings/plugins', 'gnusocial_api');
- }
- function gnusocial_api_get_authorize_url($callback = NULL, $login = true) {
- $session = elgg_get_session();
-
- $gnusocial = gnusocial_api_get_api_object();
- $token = $gnusocial->getRequestToken($callback);
-
- $session->set('gnusocial_api', array(
- 'oauth_token' => $token['oauth_token'],
- 'oauth_token_secret' => $token['oauth_token_secret'],
- ));
- return $gnusocial->getAuthorizeURL($token['oauth_token'], $login);
- }
- function gnusocial_api_get_access_token($oauth_verifier = FALSE) {
- $session = elgg_get_session();
-
- $api_settings = $session->get('gnusocial_api');
- $oauth_token = $api_settings['oauth_token'];
- $oauth_token_secret = $api_settings['oauth_token_secret'];
- $session->remove('gnusocial_api');
-
- $api = gnusocial_api_get_api_object($oauth_token, $oauth_token_secret);
- return $api->getAccessToken($oauth_verifier);
- }
- function gnusocial_api_allow_new_users_with_gnusocial() {
- $site_reg = elgg_get_config('allow_registration');
- $gnusocial_reg = elgg_get_plugin_setting('new_users', 'gnusocial_api');
- if ($site_reg || (!$site_reg && $gnusocial_reg == 'yes')) {
- return true;
- }
- return false;
- }
|