Merge pull request #4717 from pixelfed/staging

Staging
This commit is contained in:
daniel 2023-10-29 03:08:19 -06:00 committed by GitHub
commit 4bac21d5d5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 64 additions and 3 deletions

View file

@ -470,7 +470,7 @@ class ApiV1Dot1Controller extends Controller
abort_if(BouncerService::checkIp($request->ip()), 404); abort_if(BouncerService::checkIp($request->ip()), 404);
} }
$rl = RateLimiter::attempt('pf:apiv1.1:iar:'.$request->ip(), 3, function(){}, 1800); $rl = RateLimiter::attempt('pf:apiv1.1:iar:'.$request->ip(), config('pixelfed.app_registration_rate_limit_attempts', 3), function(){}, config('pixelfed.app_registration_rate_limit_decay', 1800));
abort_if(!$rl, 400, 'Too many requests'); abort_if(!$rl, 400, 'Too many requests');
$this->validate($request, [ $this->validate($request, [

View file

@ -286,4 +286,7 @@ return [
'max_altext_length' => env('PF_MEDIA_MAX_ALTTEXT_LENGTH', 1000), 'max_altext_length' => env('PF_MEDIA_MAX_ALTTEXT_LENGTH', 1000),
'allow_app_registration' => env('PF_ALLOW_APP_REGISTRATION', true), 'allow_app_registration' => env('PF_ALLOW_APP_REGISTRATION', true),
'app_registration_rate_limit_attempts' => env('PF_IAR_RL_ATTEMPTS', 3),
'app_registration_rate_limit_decay' => env('PF_IAR_RL_DECAY', 1800),
]; ];

View file

@ -37,6 +37,8 @@
v-on:bookmark="handleBookmark()" v-on:bookmark="handleBookmark()"
v-on:share="shareStatus()" v-on:share="shareStatus()"
v-on:unshare="unshareStatus()" v-on:unshare="unshareStatus()"
v-on:follow="follow()"
v-on:unfollow="unfollow()"
v-on:counter-change="counterChange" v-on:counter-change="counterChange"
/> />
</div> </div>
@ -333,6 +335,30 @@
}) })
}, },
follow() {
axios.post('/api/v1/accounts/' + this.post.account.id + '/follow')
.then(res => {
this.$store.commit('updateRelationship', [res.data]);
this.user.following_count++;
this.post.account.followers_count++;
}).catch(err => {
swal('Oops!', 'An error occurred when attempting to follow this account.', 'error');
this.post.relationship.following = false;
});
},
unfollow() {
axios.post('/api/v1/accounts/' + this.post.account.id + '/unfollow')
.then(res => {
this.$store.commit('updateRelationship', [res.data]);
this.user.following_count--;
this.post.account.followers_count--;
}).catch(err => {
swal('Oops!', 'An error occurred when attempting to unfollow this account.', 'error');
this.post.relationship.following = true;
});
},
openContextMenu() { openContextMenu() {
this.$nextTick(() => { this.$nextTick(() => {
this.$refs.contextMenu.open(); this.$refs.contextMenu.open();

View file

@ -205,12 +205,20 @@
<div v-else class="float-right"> <div v-else class="float-right">
<button <button
v-if="posts.length > 0"
type="button" type="button"
class="btn btn-outline-primary btn-sm py-1 font-weight-bold px-3" class="btn btn-outline-primary btn-sm py-1 font-weight-bold px-3"
@click.prevent="publishCollection"> @click.prevent="publishCollection">
Publish Publish
</button> </button>
<button
v-else
type="button"
class="btn btn-outline-primary btn-sm py-1 font-weight-bold px-3 disabled" disabled>
Publish
</button>
<button <button
type="button" type="button"
class="btn btn-primary btn-sm py-1 font-weight-bold px-3" class="btn btn-primary btn-sm py-1 font-weight-bold px-3"
@ -527,6 +535,11 @@ export default {
}, },
publishCollection() { publishCollection() {
if (this.posts.length === 0) {
swal('Error', 'You cannot publish an empty collection');
return;
}
if(this.owner == false) { if(this.owner == false) {
return; return;
} }
@ -541,6 +554,8 @@ export default {
.then(res => { .then(res => {
console.log(res.data); console.log(res.data);
// window.location.href = res.data.url; // window.location.href = res.data.url;
}).catch(err => {
swal('Something went wrong', 'There was a problem with your request, please try again later.', 'error')
}); });
} else { } else {
return; return;

View file

@ -1084,6 +1084,16 @@ export default {
return App.util.format.timeAgo(ts); return App.util.format.timeAgo(ts);
}, },
formatBytes(bytes, decimals = 2) {
if (!+bytes) {
return '0 Bytes'
}
const dec = decimals < 0 ? 0 : decimals
const units = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
const quotient = Math.floor(Math.log(bytes) / Math.log(1024))
return `${parseFloat((bytes / Math.pow(1024, quotient)).toFixed(dec))} ${units[quotient]}`
},
fetchProfile() { fetchProfile() {
let tags = { let tags = {
public: 'Public', public: 'Public',
@ -1194,6 +1204,13 @@ export default {
}, 300); }, 300);
}).catch(function(e) { }).catch(function(e) {
switch(e.response.status) { switch(e.response.status) {
case 413:
self.uploading = false;
io.value = null;
swal('File is too large', 'The file you uploaded has the size of ' + self.formatBytes(io.size) + '. Unfortunately, only images up to ' + self.formatBytes(self.config.uploader.max_photo_size * 1024) + ' are supported.\nPlease resize the file and try again.', 'error');
self.page = 2;
break;
case 451: case 451:
self.uploading = false; self.uploading = false;
io.value = null; io.value = null;

View file

@ -20,7 +20,7 @@
@endsection @endsection
@push('meta')<meta property="og:description" content="{{$profile->bio}}"> @push('meta')<meta property="og:description" content="{{strip_tags($profile->bio)}}">
@if(false == $settings['crawlable'] || $profile->remote_url) @if(false == $settings['crawlable'] || $profile->remote_url)
<meta name="robots" content="noindex, nofollow"> <meta name="robots" content="noindex, nofollow">
@else <meta property="og:image" content="{{$profile->avatarUrl()}}"> @else <meta property="og:image" content="{{$profile->avatarUrl()}}">