diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/RedDAV/RedDirectory.php | 21 | ||||
-rw-r--r-- | include/acl_selectors.php | 2 | ||||
-rw-r--r-- | include/api.php | 90 | ||||
-rw-r--r-- | include/conversation.php | 4 | ||||
-rw-r--r-- | include/dir_fns.php | 13 | ||||
-rw-r--r-- | include/identity.php | 13 | ||||
-rw-r--r-- | include/network.php | 22 | ||||
-rw-r--r-- | include/text.php | 10 |
8 files changed, 134 insertions, 41 deletions
diff --git a/include/RedDAV/RedDirectory.php b/include/RedDAV/RedDirectory.php index 87bdf8f13..8d8af5bd3 100644 --- a/include/RedDAV/RedDirectory.php +++ b/include/RedDAV/RedDirectory.php @@ -363,6 +363,27 @@ class RedDirectory extends DAV\Node implements DAV\ICollection, DAV\IQuota { } /** + * @brief delete directory + */ + + public function delete() { + logger('delete file ' . basename($this->red_path), LOGGER_DEBUG); + + if ((! $this->auth->owner_id) || (! perm_is_allowed($this->auth->owner_id, $this->auth->observer, 'write_storage'))) { + throw new DAV\Exception\Forbidden('Permission denied.'); + } + + if ($this->auth->owner_id !== $this->auth->channel_id) { + if (($this->auth->observer !== $this->data['creator']) || intval($this->data['is_dir'])) { + throw new DAV\Exception\Forbidden('Permission denied.'); + } + } + + attach_delete($this->auth->owner_id, $this->folder_hash); + } + + + /** * @brief Checks if a child exists. * * @param string $name diff --git a/include/acl_selectors.php b/include/acl_selectors.php index cb2266473..4d44ec12e 100644 --- a/include/acl_selectors.php +++ b/include/acl_selectors.php @@ -231,6 +231,7 @@ function populate_acl($defaults = null,$show_jotnets = true) { $jotnets = ''; if($show_jotnets) { +logger('jot_networks'); call_hooks('jot_networks', $jotnets); } @@ -243,6 +244,7 @@ function populate_acl($defaults = null,$show_jotnets = true) { '$allowgid' => json_encode($allow_gid), '$denycid' => json_encode($deny_cid), '$denygid' => json_encode($deny_gid), + '$jnetModalTitle' => t('Other networks and post services'), '$jotnets' => $jotnets, '$aclModalTitle' => t('Permissions'), '$aclModalDismiss' => t('Close') diff --git a/include/api.php b/include/api.php index b51bcc5f0..875bf121f 100644 --- a/include/api.php +++ b/include/api.php @@ -2416,6 +2416,96 @@ logger('Req: ' . var_export($req,true)); api_register_func('api/oauth/request_token', 'api_oauth_request_token', false); api_register_func('api/oauth/access_token', 'api_oauth_access_token', false); + + +function api_export_users(&$a,$type) { + + if (! is_site_admin()){ + header('HTTP/1.0 401 Unauthorized'); + die('Only admin accounts may use this endpoint.'); + } + + $r = q("SELECT * FROM account"); + + // TODO: paginating! + + $ret = array(); + foreach($r as $u){ + $ret[] = $u; + } + + json_return_and_die(array('status' => 'OK', + 'users' => $u)); +} +api_register_func('api/export/users','api_export_users', true); + + + +function api_export_channel_hashes(&$a, $type) { + + if (! is_site_admin()){ + header('HTTP/1.0 401 Unauthorized'); + die('Only admin accounts may use this endpoint.'); + } + + if( $_REQUEST['account_id'] == ''){ + header('HTTP/1.0 422 Unprocessable Entity'); + die('Must supply account_id parameter.'); + + } + + $c = q("select * from channel where channel_account_id = '%d'", + intval($_REQUEST['account_id'])); + + if(! $c){ + header('HTTP/1.0 404 Not Found'); + die('No such account_id '. $_REQUEST['account_id']); + + } + + $ret = array(); + foreach ($c as $r){ + $ret[] = $r['channel_hash']; + } + json_return_and_die(array('status' => 'OK', + 'channel_hashes' => $ret)); +} +api_register_func('api/export/channels','api_export_channel_hashes', true); + + + + +function api_export_identity(&$a, $type) { + + if (! is_site_admin()){ + header('HTTP/1.0 401 Unauthorized'); + die('Only admin accounts may use this endpoint.'); + } + + if( $_REQUEST['channel_hash'] == ''){ + header('HTTP/1.0 422 Unprocessable Entity'); + die('Must supply channel_hash parameter.'); + + } + + require_once('include/identity.php'); + + $c = q("select channel_id from channel where channel_hash = '%s' LIMIT 1", + dbesc($_REQUEST['channel_hash'])); + + if(! $c){ + header('HTTP/1.0 404 Not Found'); + die('No such channel '. $_REQUEST['channel_hash']); + + } + json_return_and_die( + identity_basic_export($c[0]['channel_id'], + (($_REQUEST['posts']) ? intval($_REQUEST['posts']) : 0 ))); +} +api_register_func('api/export/identity','api_export_identity', true); + + + /* Not implemented by now: statuses/retweets_of_me diff --git a/include/conversation.php b/include/conversation.php index a5fe573cd..c278dcf12 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -1024,8 +1024,8 @@ function builtin_activity_puller($item, &$conv_responses) { if((activity_match($item['verb'], $verb)) && ($item['id'] != $item['parent'])) { $name = (($item['author']['xchan_name']) ? $item['author']['xchan_name'] : t('Unknown')); - $url = (($item['author']['xchan_url']) - ? '<a href="' . chanlink_url($item['author']['xchan_url']) . '">' . $name . '</a>' + $url = (($item['author']['xchan_url'] && $item['author']['xchan_photo_s']) + ? '<a href="' . chanlink_url($item['author']['xchan_url']) . '">' . '<img class="response-photo" src="' . zid($item['author']['xchan_photo_s']) . ' alt="' . urlencode($name) . '" /> ' . $name . '</a>' : '<a href="#" class="disabled">' . $name . '</a>' ); diff --git a/include/dir_fns.php b/include/dir_fns.php index e5f0e1e2b..398f43d00 100644 --- a/include/dir_fns.php +++ b/include/dir_fns.php @@ -15,6 +15,19 @@ function find_upstream_directory($dirmode) { global $DIRECTORY_FALLBACK_SERVERS; $preferred = get_config('system','directory_server'); + + // Thwart attempts to use a private directory + + if(($preferred) && ($prefered != z_root())) { + $r = q("select * from site where site_url = '%s' limit 1", + dbesc($preferred) + ); + if(($r) && ($r[0]['site_flags'] & DIRECTORY_MODE_STADALONE)) { + $preferred = ''; + } + } + + if (! $preferred) { /* diff --git a/include/identity.php b/include/identity.php index 0c4a9df45..21d919508 100644 --- a/include/identity.php +++ b/include/identity.php @@ -904,19 +904,6 @@ function profile_load(&$a, $nickname, $profile = '') { } /** - * @brief - * - * @param App &$a - * @param boolean $connect - */ -function profile_create_sidebar(&$a, $connect = true) { - - $block = (((get_config('system', 'block_public')) && (! local_channel()) && (! remote_channel())) ? true : false); - - $a->set_widget('profile', profile_sidebar($a->profile, $block, $connect)); -} - -/** * @brief Formats a profile for display in the sidebar. * * It is very difficult to templatise the HTML completely diff --git a/include/network.php b/include/network.php index c67c019ef..65599bd05 100644 --- a/include/network.php +++ b/include/network.php @@ -526,28 +526,6 @@ function allowed_email($email) { -function avatar_img($email) { - - $avatar = array(); - $a = get_app(); - - $avatar['size'] = 300; - $avatar['email'] = $email; - $avatar['url'] = ''; - $avatar['success'] = false; - - call_hooks('avatar_lookup', $avatar); - - if (! $avatar['success']) - $avatar['url'] = $a->get_baseurl() . '/' . get_default_profile_photo(); - - logger('Avatar: ' . $avatar['email'] . ' ' . $avatar['url'], LOGGER_DEBUG); - - return $avatar['url']; -} - - - function parse_xml_string($s,$strict = true) { if($strict) { if(! strstr($s,'<?xml')) diff --git a/include/text.php b/include/text.php index c2573da0c..edaa8dcd3 100644 --- a/include/text.php +++ b/include/text.php @@ -872,15 +872,17 @@ function searchbox($s,$id='search-box',$url='/search',$save = false) { )); } +function valid_email_regex($x){ + if(preg_match('/^[_a-zA-Z0-9\-\+]+(\.[_a-zA-Z0-9\-\+]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)+$/',$x)) + return true; + return false; +} function valid_email($x){ if(get_config('system','disable_email_validation')) return true; - if(preg_match('/^[_a-zA-Z0-9\-\+]+(\.[_a-zA-Z0-9\-\+]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)+$/',$x)) - return true; - - return false; + return valid_email_regex($x); } /** |