Skip to content

Commit

Permalink
Improve web api protect (#6343)
Browse files Browse the repository at this point in the history
  • Loading branch information
abcang authored and Gargron committed Apr 17, 2018
1 parent 204d72f commit 8971999
Show file tree
Hide file tree
Showing 6 changed files with 18 additions and 10 deletions.
9 changes: 9 additions & 0 deletions app/controllers/api/web/base_controller.rb
@@ -0,0 +1,9 @@
# frozen_string_literal: true

class Api::Web::BaseController < Api::BaseController
protect_from_forgery with: :exception

rescue_from ActionController::InvalidAuthenticityToken do
render json: { error: "Can't verify CSRF token authenticity." }, status: 422
end
end
2 changes: 1 addition & 1 deletion app/controllers/api/web/embeds_controller.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true

class Api::Web::EmbedsController < Api::BaseController
class Api::Web::EmbedsController < Api::Web::BaseController
respond_to :json

before_action :require_user!
Expand Down
3 changes: 1 addition & 2 deletions app/controllers/api/web/push_subscriptions_controller.rb
@@ -1,10 +1,9 @@
# frozen_string_literal: true

class Api::Web::PushSubscriptionsController < Api::BaseController
class Api::Web::PushSubscriptionsController < Api::Web::BaseController
respond_to :json

before_action :require_user!
protect_from_forgery with: :exception

def create
active_session = current_session
Expand Down
2 changes: 1 addition & 1 deletion app/controllers/api/web/settings_controller.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true

class Api::Web::SettingsController < Api::BaseController
class Api::Web::SettingsController < Api::Web::BaseController
respond_to :json

before_action :require_user!
Expand Down
10 changes: 5 additions & 5 deletions app/javascript/mastodon/actions/push_notifications/registerer.js
Expand Up @@ -36,7 +36,7 @@ const subscribe = (registration) =>
const unsubscribe = ({ registration, subscription }) =>
subscription ? subscription.unsubscribe().then(() => registration) : registration;

const sendSubscriptionToBackend = (getState, subscription) => {
const sendSubscriptionToBackend = (subscription) => {
const params = { subscription };

if (me) {
Expand All @@ -46,7 +46,7 @@ const sendSubscriptionToBackend = (getState, subscription) => {
}
}

return api(getState).post('/api/web/push_subscriptions', params).then(response => response.data);
return api().post('/api/web/push_subscriptions', params).then(response => response.data);
};

// Last one checks for payload support: https://web-push-book.gauntface.com/chapter-06/01-non-standards-browsers/#no-payload
Expand Down Expand Up @@ -85,13 +85,13 @@ export function register () {
} else {
// Something went wrong, try to subscribe again
return unsubscribe({ registration, subscription }).then(subscribe).then(
subscription => sendSubscriptionToBackend(getState, subscription));
subscription => sendSubscriptionToBackend(subscription));
}
}

// No subscription, try to subscribe
return subscribe(registration).then(
subscription => sendSubscriptionToBackend(getState, subscription));
subscription => sendSubscriptionToBackend(subscription));
})
.then(subscription => {
// If we got a PushSubscription (and not a subscription object from the backend)
Expand Down Expand Up @@ -134,7 +134,7 @@ export function saveSettings() {
const alerts = state.get('alerts');
const data = { alerts };

api(getState).put(`/api/web/push_subscriptions/${subscription.get('id')}`, {
api().put(`/api/web/push_subscriptions/${subscription.get('id')}`, {
data,
}).then(() => {
if (me) {
Expand Down
2 changes: 1 addition & 1 deletion app/javascript/mastodon/actions/settings.js
Expand Up @@ -24,7 +24,7 @@ const debouncedSave = debounce((dispatch, getState) => {

const data = getState().get('settings').filter((_, path) => path !== 'saved').toJS();

api(getState).put('/api/web/settings', { data })
api().put('/api/web/settings', { data })
.then(() => dispatch({ type: SETTING_SAVE }))
.catch(error => dispatch(showAlertForError(error)));
}, 5000, { trailing: true });
Expand Down

0 comments on commit 8971999

Please sign in to comment.