summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2021-11-26 05:58:18 +0100
committerGitHub <noreply@github.com>2021-11-26 05:58:18 +0100
commit7de0ee7aba86cffeaeffded7e0699214fb64364e (patch)
tree117d92cf2099a0b4c9b8e730ef18be80dc0e6f9a
parent12b3ff6c6d70df1ce34f4b103b519250c9e2d2c8 (diff)
Remove Keybase integration (#17045)
-rw-r--r--app/controllers/api/proofs_controller.rb23
-rw-r--r--app/controllers/api/v1/accounts/identity_proofs_controller.rb3
-rw-r--r--app/controllers/settings/identity_proofs_controller.rb60
-rw-r--r--app/controllers/well_known/keybase_proof_config_controller.rb9
-rw-r--r--app/javascript/mastodon/actions/identity_proofs.js31
-rw-r--r--app/javascript/mastodon/features/account/components/header.js16
-rw-r--r--app/javascript/mastodon/features/account_timeline/components/header.js4
-rw-r--r--app/javascript/mastodon/features/account_timeline/containers/header_container.js2
-rw-r--r--app/javascript/mastodon/features/account_timeline/index.js2
-rw-r--r--app/javascript/mastodon/reducers/identity_proofs.js25
-rw-r--r--app/javascript/mastodon/reducers/index.js2
-rw-r--r--app/javascript/styles/mastodon/forms.scss62
-rw-r--r--app/lib/activitypub/adapter.rb1
-rw-r--r--app/lib/proof_provider.rb12
-rw-r--r--app/lib/proof_provider/keybase.rb69
-rw-r--r--app/lib/proof_provider/keybase/badge.rb45
-rw-r--r--app/lib/proof_provider/keybase/config_serializer.rb76
-rw-r--r--app/lib/proof_provider/keybase/serializer.rb25
-rw-r--r--app/lib/proof_provider/keybase/verifier.rb59
-rw-r--r--app/lib/proof_provider/keybase/worker.rb32
-rw-r--r--app/models/account_identity_proof.rb46
-rw-r--r--app/models/concerns/account_associations.rb3
-rw-r--r--app/models/concerns/account_merging.rb2
-rw-r--r--app/serializers/activitypub/actor_serializer.rb5
-rw-r--r--app/serializers/rest/identity_proof_serializer.rb17
-rw-r--r--app/services/activitypub/process_account_service.rb26
-rw-r--r--app/services/delete_account_service.rb2
-rw-r--r--app/views/accounts/_bio.html.haml10
-rw-r--r--app/views/admin/accounts/show.html.haml12
-rw-r--r--app/views/settings/identity_proofs/_proof.html.haml21
-rw-r--r--app/views/settings/identity_proofs/index.html.haml17
-rw-r--r--app/views/settings/identity_proofs/new.html.haml36
-rw-r--r--config/locales/en.yml21
-rw-r--r--config/navigation.rb1
-rw-r--r--config/routes.rb6
-rw-r--r--db/post_migrate/20211126000907_drop_account_identity_proofs.rb13
-rw-r--r--db/schema.rb15
-rw-r--r--spec/controllers/api/proofs_controller_spec.rb93
-rw-r--r--spec/controllers/settings/identity_proofs_controller_spec.rb186
-rw-r--r--spec/controllers/well_known/keybase_proof_config_controller_spec.rb15
-rw-r--r--spec/fabricators/account_identity_proof_fabricator.rb8
-rw-r--r--spec/lib/proof_provider/keybase/verifier_spec.rb82
-rw-r--r--spec/services/activitypub/process_account_service_spec.rb45
43 files changed, 25 insertions, 1215 deletions
diff --git a/app/controllers/api/proofs_controller.rb b/app/controllers/api/proofs_controller.rb
deleted file mode 100644
index dd32cd577bf..00000000000
--- a/app/controllers/api/proofs_controller.rb
+++ /dev/null
@@ -1,23 +0,0 @@
-# frozen_string_literal: true
-
-class Api::ProofsController < Api::BaseController
- include AccountOwnedConcern
-
- skip_before_action :require_authenticated_user!
-
- before_action :set_provider
-
- def index
- render json: @account, serializer: @provider.serializer_class
- end
-
- private
-
- def set_provider
- @provider = ProofProvider.find(params[:provider]) || raise(ActiveRecord::RecordNotFound)
- end
-
- def username_param
- params[:username]
- end
-end
diff --git a/app/controllers/api/v1/accounts/identity_proofs_controller.rb b/app/controllers/api/v1/accounts/identity_proofs_controller.rb
index 4b5f6902c7d..48f293f47a3 100644
--- a/app/controllers/api/v1/accounts/identity_proofs_controller.rb
+++ b/app/controllers/api/v1/accounts/identity_proofs_controller.rb
@@ -5,8 +5,7 @@ class Api::V1::Accounts::IdentityProofsController < Api::BaseController
before_action :set_account
def index
- @proofs = @account.suspended? ? [] : @account.identity_proofs.active
- render json: @proofs, each_serializer: REST::IdentityProofSerializer
+ render json: []
end
private
diff --git a/app/controllers/settings/identity_proofs_controller.rb b/app/controllers/settings/identity_proofs_controller.rb
deleted file mode 100644
index bf2899da66f..00000000000
--- a/app/controllers/settings/identity_proofs_controller.rb
+++ /dev/null
@@ -1,60 +0,0 @@
-# frozen_string_literal: true
-
-class Settings::IdentityProofsController < Settings::BaseController
- before_action :check_required_params, only: :new
-
- def index
- @proofs = AccountIdentityProof.where(account: current_account).order(provider: :asc, provider_username: :asc)
- @proofs.each(&:refresh!)
- end
-
- def new
- @proof = current_account.identity_proofs.new(
- token: params[:token],
- provider: params[:provider],
- provider_username: params[:provider_username]
- )
-
- if current_account.username.casecmp(params[:username]).zero?
- render layout: 'auth'
- else
- redirect_to settings_identity_proofs_path, alert: I18n.t('identity_proofs.errors.wrong_user', proving: params[:username], current: current_account.username)
- end
- end
-
- def create
- @proof = current_account.identity_proofs.where(provider: resource_params[:provider], provider_username: resource_params[:provider_username]).first_or_initialize(resource_params)
- @proof.token = resource_params[:token]
-
- if @proof.save
- PostStatusService.new.call(current_user.account, text: post_params[:status_text]) if publish_proof?
- redirect_to @proof.on_success_path(params[:user_agent])
- else
- redirect_to settings_identity_proofs_path, alert: I18n.t('identity_proofs.errors.failed', provider: @proof.provider.capitalize)
- end
- end
-
- def destroy
- @proof = current_account.identity_proofs.find(params[:id])
- @proof.destroy!
- redirect_to settings_identity_proofs_path, success: I18n.t('identity_proofs.removed')
- end
-
- private
-
- def check_required_params
- redirect_to settings_identity_proofs_path unless [:provider, :provider_username, :username, :token].all? { |k| params[k].present? }
- end
-
- def resource_params
- params.require(:account_identity_proof).permit(:provider, :provider_username, :token)
- end
-
- def publish_proof?
- ActiveModel::Type::Boolean.new.cast(post_params[:post_status])
- end
-
- def post_params
- params.require(:account_identity_proof).permit(:post_status, :status_text)
- end
-end
diff --git a/app/controllers/well_known/keybase_proof_config_controller.rb b/app/controllers/well_known/keybase_proof_config_controller.rb
deleted file mode 100644
index e1d43ecbe9a..00000000000
--- a/app/controllers/well_known/keybase_proof_config_controller.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-# frozen_string_literal: true
-
-module WellKnown
- class KeybaseProofConfigController < ActionController::Base
- def show
- render json: {}, serializer: ProofProvider::Keybase::ConfigSerializer, root: 'keybase_config'
- end
- end
-end
diff --git a/app/javascript/mastodon/actions/identity_proofs.js b/app/javascript/mastodon/actions/identity_proofs.js
deleted file mode 100644
index 10398395660..00000000000
--- a/app/javascript/mastodon/actions/identity_proofs.js
+++ /dev/null
@@ -1,31 +0,0 @@
-import api from '../api';
-
-export const IDENTITY_PROOFS_ACCOUNT_FETCH_REQUEST = 'IDENTITY_PROOFS_ACCOUNT_FETCH_REQUEST';
-export const IDENTITY_PROOFS_ACCOUNT_FETCH_SUCCESS = 'IDENTITY_PROOFS_ACCOUNT_FETCH_SUCCESS';
-export const IDENTITY_PROOFS_ACCOUNT_FETCH_FAIL = 'IDENTITY_PROOFS_ACCOUNT_FETCH_FAIL';
-
-export const fetchAccountIdentityProofs = accountId => (dispatch, getState) => {
- dispatch(fetchAccountIdentityProofsRequest(accountId));
-
- api(getState).get(`/api/v1/accounts/${accountId}/identity_proofs`)
- .then(({ data }) => dispatch(fetchAccountIdentityProofsSuccess(accountId, data)))
- .catch(err => dispatch(fetchAccountIdentityProofsFail(accountId, err)));
-};
-
-export const fetchAccountIdentityProofsRequest = id => ({
- type: IDENTITY_PROOFS_ACCOUNT_FETCH_REQUEST,
- id,
-});
-
-export const fetchAccountIdentityProofsSuccess = (accountId, identity_proofs) => ({
- type: IDENTITY_PROOFS_ACCOUNT_FETCH_SUCCESS,
- accountId,
- identity_proofs,
-});
-
-export const fetchAccountIdentityProofsFail = (accountId, err) => ({
- type: IDENTITY_PROOFS_ACCOUNT_FETCH_FAIL,
- accountId,
- err,
- skipNotFound: true,
-});
diff --git a/app/javascript/mastodon/features/account/components/header.js b/app/javascript/mastodon/features/account/components/header.js
index 4d0a828c70d..48ec49d8148 100644
--- a/app/javascript/mastodon/features/account/components/header.js
+++ b/app/javascript/mastodon/features/account/components/header.js
@@ -123,7 +123,7 @@ class Header extends ImmutablePureComponent {
}
render () {
- const { account, intl, domain, identity_proofs } = this.props;
+ const { account, intl, domain } = this.props;
if (!account) {
return null;
@@ -297,20 +297,8 @@ class Header extends ImmutablePureComponent {
<div className='account__header__extra'>
<div className='account__header__bio'>
- {(fields.size > 0 || identity_proofs.size > 0) && (
+ {fields.size > 0 && (
<div className='account__header__fields'>
- {identity_proofs.map((proof, i) => (
- <dl key={i}>
- <dt dangerouslySetInnerHTML={{ __html: proof.get('provider') }} />
-
- <dd className='verified'>
- <a href={proof.get('proof_url')} target='_blank' rel='noopener noreferrer'><span title={intl.formatMessage(messages.linkVerifiedOn, { date: intl.formatDate(proof.get('updated_at'), dateFormatOptions) })}>
- <Icon id='check' className='verified__mark' />
- </span></a>
- <a href={proof.get('profile_url')} target='_blank' rel='noopener noreferrer'><span dangerouslySetInnerHTML={{ __html: ' '+proof.get('provider_username') }} /></a>
- </dd>
- </dl>
- ))}
{fields.map((pair, i) => (
<dl key={i}>
<dt dangerouslySetInnerHTML={{ __html: pair.get('name_emojified') }} title={pair.get('name')} className='translate' />
diff --git a/app/javascript/mastodon/features/account_timeline/components/header.js b/app/javascript/mastodon/features/account_timeline/components/header.js
index 17b693600e5..33bea4c1799 100644
--- a/app/javascript/mastodon/features/account_timeline/components/header.js
+++ b/app/javascript/mastodon/features/account_timeline/components/header.js
@@ -11,7 +11,6 @@ export default class Header extends ImmutablePureComponent {
static propTypes = {
account: ImmutablePropTypes.map,
- identity_proofs: ImmutablePropTypes.list,
onFollow: PropTypes.func.isRequired,
onBlock: PropTypes.func.isRequired,
onMention: PropTypes.func.isRequired,
@@ -92,7 +91,7 @@ export default class Header extends ImmutablePureComponent {
}
render () {
- const { account, hideTabs, identity_proofs } = this.props;
+ const { account, hideTabs } = this.props;
if (account === null) {
return null;
@@ -104,7 +103,6 @@ export default class Header extends ImmutablePureComponent {
<InnerHeader
account={account}
- identity_proofs={identity_proofs}
onFollow={this.handleFollow}
onBlock={this.handleBlock}
onMention={this.handleMention}
diff --git a/app/javascript/mastodon/features/account_timeline/containers/header_container.js b/app/javascript/mastodon/features/account_timeline/containers/header_container.js
index e12019547ec..b3f8521cb95 100644
--- a/app/javascript/mastodon/features/account_timeline/containers/header_container.js
+++ b/app/javascript/mastodon/features/account_timeline/containers/header_container.js
@@ -21,7 +21,6 @@ import { openModal } from '../../../actions/modal';
import { blockDomain, unblockDomain } from '../../../actions/domain_blocks';
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
import { unfollowModal } from '../../../initial_state';
-import { List as ImmutableList } from 'immutable';
const messages = defineMessages({
unfollowConfirm: { id: 'confirmations.unfollow.confirm', defaultMessage: 'Unfollow' },
@@ -34,7 +33,6 @@ const makeMapStateToProps = () => {
const mapStateToProps = (state, { accountId }) => ({
account: getAccount(state, accountId),
domain: state.getIn(['meta', 'domain']),
- identity_proofs: state.getIn(['identity_proofs', accountId], ImmutableList()),
});
return mapStateToProps;
diff --git a/app/javascript/mastodon/features/account_timeline/index.js b/app/javascript/mastodon/features/account_timeline/index.js
index 20f1dba9f5b..37df2818b19 100644
--- a/app/javascript/mastodon/features/account_timeline/index.js
+++ b/app/javascript/mastodon/features/account_timeline/index.js
@@ -12,7 +12,6 @@ import ColumnBackButton from '../../components/column_back_button';
import { List as ImmutableList } from 'immutable';
import ImmutablePureComponent from 'react-immutable-pure-component';
import { FormattedMessage } from 'react-intl';
-import { fetchAccountIdentityProofs } from '../../actions/identity_proofs';
import MissingIndicator from 'mastodon/components/missing_indicator';
import TimelineHint from 'mastodon/components/timeline_hint';
import { me } from 'mastodon/initial_state';
@@ -80,7 +79,6 @@ class AccountTimeline extends ImmutablePureComponent {
const { accountId, withReplies, dispatch } = this.props;
dispatch(fetchAccount(accountId));
- dispatch(fetchAccountIdentityProofs(accountId));
if (!withReplies) {
dispatch(expandAccountFeaturedTimeline(accountId));
diff --git a/app/javascript/mastodon/reducers/identity_proofs.js b/app/javascript/mastodon/reducers/identity_proofs.js
deleted file mode 100644
index 58af0a5faaa..00000000000
--- a/app/javascript/mastodon/reducers/identity_proofs.js
+++ /dev/null
@@ -1,25 +0,0 @@
-import { Map as ImmutableMap, fromJS } from 'immutable';
-import {
- IDENTITY_PROOFS_ACCOUNT_FETCH_REQUEST,
- IDENTITY_PROOFS_ACCOUNT_FETCH_SUCCESS,
- IDENTITY_PROOFS_ACCOUNT_FETCH_FAIL,
-} from '../actions/identity_proofs';
-
-const initialState = ImmutableMap();
-
-export default function identityProofsReducer(state = initialState, action) {
- switch(action.type) {
- case IDENTITY_PROOFS_ACCOUNT_FETCH_REQUEST:
- return state.set('isLoading', true);
- case IDENTITY_PROOFS_ACCOUNT_FETCH_FAIL:
- return state.set('isLoading', false);
- case IDENTITY_PROOFS_ACCOUNT_FETCH_SUCCESS:
- return state.update(identity_proofs => identity_proofs.withMutations(map => {
- map.set('isLoading', false);
- map.set('loaded', true);
- map.set(action.accountId, fromJS(action.identity_proofs));
- }));
- default:
- return state;
- }
-};
diff --git a/app/javascript/mastodon/reducers/index.js b/app/javascript/mastodon/reducers/index.js
index e518c8228ab..53e2dd681ee 100644
--- a/app/javascript/mastodon/reducers/index.js
+++ b/app/javascript/mastodon/reducers/index.js
@@ -32,7 +32,6 @@ import filters from './filters';
import conversations from './conversations';
import suggestions from './suggestions';
import polls from './polls';
-import identity_proofs from './identity_proofs';
import trends from './trends';
import missed_updates from './missed_updates';
import announcements from './announcements';
@@ -69,7 +68,6 @@ const reducers = {
notifications,
height_cache,
custom_emojis,
- identity_proofs,
lists,
listEditor,
listAdder,
diff --git a/app/javascript/styles/mastodon/forms.scss b/app/javascript/styles/mastodon/forms.scss
index 5b71b6334ee.