Merge pull request #1569 from ClearlyClaire/glitch-soc/merge-upstream
Merge upstream changes
This commit is contained in:
		
						commit
						a2df067f98
					
				@ -42,7 +42,7 @@ class Settings::DeletesController < Settings::BaseController
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def destroy_account!
 | 
			
		||||
    current_account.suspend!(origin: :local)
 | 
			
		||||
    current_account.suspend!(origin: :local, block_email: false)
 | 
			
		||||
    AccountDeletionWorker.perform_async(current_user.account_id)
 | 
			
		||||
    sign_out
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
@ -6,6 +6,10 @@ import { multiply } from 'color-blend';
 | 
			
		||||
 | 
			
		||||
export default class ModalRoot extends React.PureComponent {
 | 
			
		||||
 | 
			
		||||
  static contextTypes = {
 | 
			
		||||
    router: PropTypes.object,
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  static propTypes = {
 | 
			
		||||
    children: PropTypes.node,
 | 
			
		||||
    onClose: PropTypes.func.isRequired,
 | 
			
		||||
 | 
			
		||||
@ -21,7 +21,7 @@ export default class VideoModal extends ImmutablePureComponent {
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  componentDidMount () {
 | 
			
		||||
    const { media, onChangeBackgroundColor, onClose } = this.props;
 | 
			
		||||
    const { media, onChangeBackgroundColor } = this.props;
 | 
			
		||||
 | 
			
		||||
    const backgroundColor = getAverageFromBlurhash(media.get('blurhash'));
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -5,11 +5,11 @@ import { Stack as ImmutableStack, Map as ImmutableMap } from 'immutable';
 | 
			
		||||
export default function modal(state = ImmutableStack(), action) {
 | 
			
		||||
  switch(action.type) {
 | 
			
		||||
  case MODAL_OPEN:
 | 
			
		||||
        return state.unshift(ImmutableMap({ modalType: action.modalType, modalProps: action.modalProps }));
 | 
			
		||||
    return state.unshift(ImmutableMap({ modalType: action.modalType, modalProps: action.modalProps }));
 | 
			
		||||
  case MODAL_CLOSE:
 | 
			
		||||
    return (action.modalType === undefined || action.modalType === state.getIn([0, 'modalType'])) ? state.shift() : state;
 | 
			
		||||
  case TIMELINE_DELETE:
 | 
			
		||||
        return state.filterNot((modal) => modal.get('modalProps').statusId === action.id);
 | 
			
		||||
    return state.filterNot((modal) => modal.get('modalProps').statusId === action.id);
 | 
			
		||||
  default:
 | 
			
		||||
    return state;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@ -279,39 +279,10 @@ class Formatter
 | 
			
		||||
    result.flatten.join
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  UNICODE_ESCAPE_BLACKLIST_RE = /\p{Z}|\p{P}/
 | 
			
		||||
 | 
			
		||||
  def utf8_friendly_extractor(text, options = {})
 | 
			
		||||
    old_to_new_index = [0]
 | 
			
		||||
 | 
			
		||||
    escaped = text.chars.map do |c|
 | 
			
		||||
      output = begin
 | 
			
		||||
        if c.ord.to_s(16).length > 2 && !UNICODE_ESCAPE_BLACKLIST_RE.match?(c)
 | 
			
		||||
          CGI.escape(c)
 | 
			
		||||
        else
 | 
			
		||||
          c
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      old_to_new_index << old_to_new_index.last + output.length
 | 
			
		||||
 | 
			
		||||
      output
 | 
			
		||||
    end.join
 | 
			
		||||
 | 
			
		||||
    # Note: I couldn't obtain list_slug with @user/list-name format
 | 
			
		||||
    # for mention so this requires additional check
 | 
			
		||||
    special = Extractor.extract_urls_with_indices(escaped, options).map do |extract|
 | 
			
		||||
      new_indices = [
 | 
			
		||||
        old_to_new_index.find_index(extract[:indices].first),
 | 
			
		||||
        old_to_new_index.find_index(extract[:indices].last),
 | 
			
		||||
      ]
 | 
			
		||||
 | 
			
		||||
      next extract.merge(
 | 
			
		||||
        indices: new_indices,
 | 
			
		||||
        url: text[new_indices.first..new_indices.last - 1]
 | 
			
		||||
      )
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    special = Extractor.extract_urls_with_indices(text, options)
 | 
			
		||||
    standard = Extractor.extract_entities_with_indices(text, options)
 | 
			
		||||
    extra = Extractor.extract_extra_uris_with_indices(text, options)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -236,11 +236,11 @@ class Account < ApplicationRecord
 | 
			
		||||
    suspended? && deletion_request.present?
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def suspend!(date: Time.now.utc, origin: :local)
 | 
			
		||||
  def suspend!(date: Time.now.utc, origin: :local, block_email: true)
 | 
			
		||||
    transaction do
 | 
			
		||||
      create_deletion_request!
 | 
			
		||||
      update!(suspended_at: date, suspension_origin: origin)
 | 
			
		||||
      create_canonical_email_block!
 | 
			
		||||
      create_canonical_email_block! if block_email
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -24,6 +24,10 @@ module Twitter::TwitterText
 | 
			
		||||
        )
 | 
			
		||||
      \)
 | 
			
		||||
    /iox
 | 
			
		||||
    REGEXEN[:valid_iri_ucschar] = /[\u{A0}-\u{D7FF}\u{F900}-\u{FDCF}\u{FDF0}-\u{FFEF}\u{10000}-\u{1FFFD}\u{20000}-\u{2FFFD}\u{30000}-\u{3FFFD}\u{40000}-\u{4FFFD}\u{50000}-\u{5FFFD}\u{60000}-\u{6FFFD}\u{70000}-\u{7FFFD}\u{80000}-\u{8FFFD}\u{90000}-\u{9FFFD}\u{A0000}-\u{AFFFD}\u{B0000}-\u{BFFFD}\u{C0000}-\u{CFFFD}\u{D0000}-\u{DFFFD}\u{E1000}-\u{EFFFD}]/iou
 | 
			
		||||
    REGEXEN[:valid_iri_iprivate] = /[\u{E000}-\u{F8FF}\u{F0000}-\u{FFFFD}\u{100000}-\u{10FFFD}]/iou
 | 
			
		||||
    REGEXEN[:valid_url_query_chars] = /(?:#{REGEXEN[:valid_iri_ucschar]})|(?:#{REGEXEN[:valid_iri_iprivate]})|[a-z0-9!?\*'\(\);:&=\+\$\/%#\[\]\-_\.,~|@]/iou
 | 
			
		||||
    REGEXEN[:valid_url_query_ending_chars] = /(?:#{REGEXEN[:valid_iri_ucschar]})|(?:#{REGEXEN[:valid_iri_iprivate]})|[a-z0-9_&=#\/\-]/iou
 | 
			
		||||
    REGEXEN[:valid_url_path] = /(?:
 | 
			
		||||
      (?:
 | 
			
		||||
        #{REGEXEN[:valid_general_url_path_chars]}*
 | 
			
		||||
 | 
			
		||||
@ -59,6 +59,10 @@ describe Settings::DeletesController do
 | 
			
		||||
          expect(user.account.reload).to be_suspended
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        it 'does not create an email block' do
 | 
			
		||||
          expect(CanonicalEmailBlock.block?(user.email)).to be false
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        context 'when suspended' do
 | 
			
		||||
          let(:user) { Fabricate(:user, account_attributes: { username: 'alice', suspended_at: Time.now.utc }) }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user