diff --git a/app/Profile.php b/app/Profile.php index 70ba38ed7..e46bedeed 100644 --- a/app/Profile.php +++ b/app/Profile.php @@ -296,4 +296,11 @@ class Profile extends Model { return $this->hasMany(Collection::class); } + + public function hasFollowRequestById(int $id) + { + return FollowRequest::whereFollowerId($id) + ->whereFollowingId($this->id) + ->exists(); + } } diff --git a/app/Util/ActivityPub/Helpers.php b/app/Util/ActivityPub/Helpers.php index e0fb72995..eaa526b74 100644 --- a/app/Util/ActivityPub/Helpers.php +++ b/app/Util/ActivityPub/Helpers.php @@ -125,7 +125,7 @@ class Helpers { { $audience = self::normalizeAudience($data); $url = $profile->permalink(); - return in_array($url, $audience); + return in_array($url, $audience['to']) || in_array($url, $audience['cc']); } public static function validateUrl($url) @@ -328,7 +328,9 @@ class Helpers { $status->scope = $scope; $status->visibility = $scope; $status->save(); - self::importNoteAttachment($res, $status); + if($reply_to == null) { + self::importNoteAttachment($res, $status); + } return $status; }); diff --git a/app/Util/ActivityPub/Inbox.php b/app/Util/ActivityPub/Inbox.php index b64985bf6..d7f3310c1 100644 --- a/app/Util/ActivityPub/Inbox.php +++ b/app/Util/ActivityPub/Inbox.php @@ -137,15 +137,13 @@ class Inbox public function handleNoteCreate() { - return; - $activity = $this->payload['object']; $actor = $this->actorFirstOrCreate($this->payload['actor']); if(!$actor || $actor->domain == null) { return; } - if(Helpers::userInAudience($this->profile, $this->payload) == false) { + if($actor->followers()->count() == 0) { return; } diff --git a/app/Util/RateLimit/User.php b/app/Util/RateLimit/User.php index b945f6407..d2f243202 100644 --- a/app/Util/RateLimit/User.php +++ b/app/Util/RateLimit/User.php @@ -11,7 +11,7 @@ trait User { public function getMaxPostsPerHourAttribute() { - return 20; + return 50; } public function getMaxPostsPerDayAttribute() diff --git a/config/instance.php b/config/instance.php index 82a8efafc..a59542466 100644 --- a/config/instance.php +++ b/config/instance.php @@ -29,5 +29,15 @@ return [ ] ], + 'page' => [ + '404' => [ + 'header' => env('PAGE_404_HEADER', 'Sorry, this page isn\'t available.'), + 'body' => env('PAGE_404_BODY', 'The link you followed may be broken, or the page may have been removed. Go back to Pixelfed.') + ], + '503' => [ + 'header' => env('PAGE_503_HEADER', 'Service Unavailable'), + 'body' => env('PAGE_503_BODY', 'Our service is in maintenance mode, please try again later.') + ] + ], ]; \ No newline at end of file diff --git a/resources/assets/js/app.js b/resources/assets/js/app.js index c8b4b8d9c..ad0c293af 100644 --- a/resources/assets/js/app.js +++ b/resources/assets/js/app.js @@ -1 +1,15 @@ -require('./bootstrap'); \ No newline at end of file +window._ = require('lodash'); +window.Popper = require('popper.js').default; +window.pixelfed = window.pixelfed || {}; +window.$ = window.jQuery = require('jquery'); +require('bootstrap'); +window.axios = require('axios'); +window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; +require('readmore-js'); + +let token = document.head.querySelector('meta[name="csrf-token"]'); +if (token) { + window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content; +} else { + console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token'); +} diff --git a/resources/assets/js/bootstrap.js b/resources/assets/js/bootstrap.js deleted file mode 100644 index ad0c293af..000000000 --- a/resources/assets/js/bootstrap.js +++ /dev/null @@ -1,15 +0,0 @@ -window._ = require('lodash'); -window.Popper = require('popper.js').default; -window.pixelfed = window.pixelfed || {}; -window.$ = window.jQuery = require('jquery'); -require('bootstrap'); -window.axios = require('axios'); -window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; -require('readmore-js'); - -let token = document.head.querySelector('meta[name="csrf-token"]'); -if (token) { - window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content; -} else { - console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token'); -} diff --git a/resources/assets/js/components/bookmarkform.js b/resources/assets/js/components/bookmarkform.js deleted file mode 100644 index 14d096adb..000000000 --- a/resources/assets/js/components/bookmarkform.js +++ /dev/null @@ -1,8 +0,0 @@ -$(document).ready(function() { - $(document).on('submit', '.bookmark-form', function(e) { - e.preventDefault(); - var el = $(this); - var id = el.data('id'); - var res = axios.post('/i/bookmark', {item: id}); - }); -}); \ No newline at end of file diff --git a/resources/assets/js/components/commentform.js b/resources/assets/js/components/commentform.js deleted file mode 100644 index 0563fecc9..000000000 --- a/resources/assets/js/components/commentform.js +++ /dev/null @@ -1,51 +0,0 @@ -$(document).ready(function() { - - $('.status-card > .card-footer').each(function() { - $(this).addClass('d-none'); - }); - - $(document).on('click', '.status-comment-focus', function(el) { - var form = $(this).parents().eq(2).find('.card-footer'); - form.removeClass('d-none'); - var el = $(this).parents().eq(2).find('input[name="comment"]'); - el.focus(); - }); - - $(document).on('submit', '.comment-form', function(e, data) { - e.preventDefault(); - - let el = $(this); - let id = el.data('id'); - let commentform = el.find('input[name="comment"]'); - let commenttext = commentform.val(); - let item = {item: id, comment: commenttext}; - - commentform.prop('disabled', true); - axios.post('/i/comment', item) - .then(function (res) { - - var username = res.data.username; - var permalink = res.data.url; - var profile = res.data.profile; - var reply = res.data.comment; - - if($('.status-container').length == 1) { - var comments = el.parents().eq(3).find('.comments'); - } else { - var comments = el.parents().eq(1).find('.comments'); - } - - var comment = '
' + username + ''+ reply + '
'; - - comments.prepend(comment); - - commentform.val(''); - commentform.blur(); - commentform.prop('disabled', false); - - }) - .catch(function (res) { - - }); - }); -}); \ No newline at end of file diff --git a/resources/assets/js/components/localstorage.js b/resources/assets/js/components/localstorage.js deleted file mode 100644 index a64b6635d..000000000 --- a/resources/assets/js/components/localstorage.js +++ /dev/null @@ -1,33 +0,0 @@ -window.ls = {}; - -window.ls.get = function(key) { - return JSON.parse(localStorage.getItem(key)); -} - - -window.ls.set = function(key, val) { - try { - localStorage.setItem(key, JSON.stringify(val)); - return true; - } catch(e) { - return false; - } -} - -window.ls.del = function(key) { - try { - localStorage.removeItem(key); - return true; - } catch(e) { - return false; - } -} - -window.ls.clear = function() { - try { - localStorage.clear(); - return true; - } catch(e) { - return false; - } -} \ No newline at end of file diff --git a/resources/assets/js/components/notifications.js b/resources/assets/js/components/notifications.js deleted file mode 100644 index 07ff4dbed..000000000 --- a/resources/assets/js/components/notifications.js +++ /dev/null @@ -1,159 +0,0 @@ -$(document).ready(function() { - - $('.nav-link.nav-notification').on('click', function(e) { - e.preventDefault(); - let el = $(this); - if(el.attr('data-toggle') == 'tooltip') { - el.attr('data-toggle', 'dropdown'); - el.tooltip('dispose'); - } - let container = $('.navbar .nav-notification-dropdown'); - if(pixelfed.notifications) { - return; - } - axios.get('/api/v2/notifications') - .then((res) => { - $('.nav-notification-dropdown .loader').hide(); - let data = res.data; - data.forEach(function(v, k) { - let action = v.action; - let notification = $('The link you followed may be broken, or the page may have been removed. Go back to Pixelfed.
+{!!config('instance.page.404.body')!!}
Our service is in maintenance mode, please try again later. Go back to Pixelfed.
+{!!config('instance.page.503.body')!!}