Discourse Signatures

ユーザー入力の署名画像URLには全くバリデーションがないのでしょうか?
基本的に、ユーザーは何でも入力でき、それが他のユーザーにプッシュされるということですか?

また、URL署名のDBサイズが32,000に設定されているのはなぜですか?
画像へのURLに32,000文字も必要とする人がいるでしょうか?

不気味ですね :ghost:

CSSを次のように変更して、最大高さと幅をハードコーディングしました。

.signature-img {
  max-width: 600px;
  max-height: 100px;
  width: auto;
  height: auto;
  display: block;
  margin: 5px 0;
}

plugin.rbで署名URLの最大サイズを250に変更しました。

  register_user_custom_field_type("signature_url", :string, max_length: 250)
  register_user_custom_field_type("signature_raw", :string, max_length: 250)

plugin.rbの「on(:user_updated) do |user|」の末尾にこれを追加しました(高度なモードは使用しません)。

    # 高度なモードでない場合はURLを検証する
    if !SiteSetting.signatures_advanced_mode && user.custom_fields["signature_url"]
      url = user.custom_fields["signature_url"]

      # 厳密な検証:HTTPSのみ、特定の画像ファイルタイプのみ
      unless url =~ /\Ahttps:\/\/ [a-zA-Z0-9.\-\/_]+\.(png|jpe?g|gif|webp)(\?[a-zA-Z0-9=\&]+)?\z/
        Rails.logger.warn("[discourse-signatures] ユーザー #{user.id} の無効なsignature_urlを拒否しました: #{url.inspect}")
        user.custom_fields["signature_url"] = nil
        user.save
      end
    end

もし私が何か間違っていること(Discourseでの作業は初めてです)があれば、修正して正しい方法を教えてください。

「いいね!」 1

250では足りないからです…

それが署名の全体的な考え方です。フォーラムでも同じで、人々が何かを入力し、他の人がそれを見るのと同じです。クレイジーな世界ですね?

「いいね!」 5

Discourse が 3.5.0.beta8 (3.5.0.beta9-dev も問題あり) にアップグレードされると、ユーザーが署名を編集しても保存できないことが判明しました (保存されたように表示されても効果がない)。3.5.0.beta7 では正常でした。多くのプラグインが beta7 から beta8 に組み込まれているため、早急な修正を希望します。

「いいね!」 2

署名に関する特定のユースケースがあり、いくつかの変更を比較的簡単に行えるかどうか疑問に思っています。

  1. UIで特定のグループの署名のみを表示したいという点に同意します。私はCSSが得意ではありません。
  2. コミュニティとサポートチケットシステムの両方としてDiscourseを使用しています。「署名をXカテゴリにのみ表示する」という設定を取得する方法はありますか?

主にメール経由でのやり取りが行われるサポートセクションでのみ、署名が必要です。

「いいね!」 3

4件の投稿が新しいトピックに分割されました: Feature request: include sig in email notifications

CSSに詳しい方、以下のようなことは可能でしょうか?

  1. 特定のグループのみに署名を設定する機能を制限する方法

  2. 署名の最大画像サイズと最大テキストサイズを制限して、スパムっぽくならないようにする方法

こちらが使えると思います。

右クリック > 要素を検証 で要素のID/クラスを取得し、display:none で非表示にできます。残念ながら、今は携帯電話なのでクラス/IDを確認できません :sweat_smile:

皆さん、こんにちは。

このプラグインはまだ利用可能ですか?

見つけられないのですが…

これは included-in-core ではないため、別途インストールする必要があります。

ありがとうございます。私はそういうことを把握するのが苦手でして。どうすればいいのか全く分かりません。設定があるべきだと思います。ずっと簡単なのに。署名をすべて許可したいグループがなぜ存在するのか分かりません。また、「署名を有効にする - 投稿の下にユーザー署名を表示」という設定を非表示にするオプションもあればいいのにと思います。

また、テキスト署名の文字数制限や、バナー署名の画像サイズ制限のオプションもあるべきです。

CSSが分かればいいのに(笑)

Ok、グループの署名をより良く機能させたい方(特に署名を有料アップグレード/サブスクリプションの一部として使用するオプションを利用したい方)のために、これをはるかに良くし、アップグレードの促進に役立つと思われるコード(およびその理由)を以下に示します。何度も試行錯誤しましたが、機能しています。「XXXXX」の部分を置き換える必要がある箇所に注意してください。

達成したかった2つのことは次のとおりです。
A) 署名の表示を無効にする機能を無効にすること。これは、アップグレードしたユーザーは、自分の署名がすべての人に見られることを知っていることを意味します。

B) 特定のグループのみに署名を作成する機能を許可すること。

  1. 管理 > 外観 > テーマとコンポーネント > コンポーネント > インストール > 新規作成 に移動します。

  2. このコードを <head> タブに追加します。

<script>
// 基本的なページ構造が最初に読み込まれるのを待つ
document.addEventListener("DOMContentLoaded", function() {
    
    // ウォッチャーを設定
    const observer = new MutationObserver(function(mutations) {
        // ページ上のすべてのコントロールラベルを検索
        const labels = document.querySelectorAll('label.control-label');
        
        labels.forEach(label => {
            // 特定の「署名」ラベルを探す
            if (label.textContent.trim() === 'Enable Signatures') {
                // ラベルとチェックボックスの両方を保持するメインコンテナを見つけて非表示にする
                const controlGroup = label.closest('.control-group') || label.parentElement;
                if (controlGroup) {
                    controlGroup.style.display = 'none';
                }
            }
        });
    });

    // bodyが確実に存在するため、今すぐbodyの監視を開始する
    observer.observe(document.body, { childList: true, subtree: true });
});
</script>

3. このコードをCSSタブに追加します(XXXXXをグループ名に置き換えます)。

/* すべての人に対して署名セクションを非表示にする */
.user-preferences .control-group.signatures,
.user-preferences .signature-preferences,
.user-preferences div[data-setting-name="user_card_badge"] + .control-group {
    display: none !important;
}

/* 'user-is-XXXXX' クラスがbodyに存在する場合にのみ表示する */
body.user-is-XXXXX .user-preferences .control-group.signatures,
body.user-is-XXXXX .user-preferences .signature-preferences,
body.user-is-XXXXX .user-preferences div[data-setting-name="user_card_badge"] + .control-group {
    display: block !important;
}
  1. このコードを最初のブロックの上にある <head> タグに追加します(XXXXXをグループ名に置き換えます)。
<script>
(function() {
  const checkAccess = () => {
    // Discourse は現在のユーザーのグループをこのグローバルオブジェクトに格納します
    const user = window.Discourse && window.Discourse.User && window.Discourse.User.current();
    
    if (user && user.groups) {
      // グループ名が "XXXXX" と一致するかどうかを確認
      const isXXXXX = user.groups.some(g => g.name === 'XXXXX');
      
      if (isXXXXX) {
        document.body.classList.add('user-is-XXXXX');
      }
    }
  };

  // すぐに実行
  checkAccess();

  // ユーザーがページ間を移動するたびに実行
  document.addEventListener('discourse-ready', checkAccess);
  
  // バックアップ: 遅延読み込みをキャッチするために1秒後に再度実行
  setTimeout(checkAccess, 1000);
})();
</script>
  1. このコードを最初のブロックの下にあるCSSタブに追加します(XXXXXをグループ名に置き換えます)。
/* すべての人に対して署名セクションを非表示にする */
.user-preferences .control-group.signatures,
.user-preferences .signature-preferences,
.user-preferences div[data-setting-name="user_card_badge"] + .control-group {
    display: none !important;
}

/* 'user-is-XXXXX' クラスがbodyに存在する場合にのみ表示する */
body.user-is-XXXXX .user-preferences .control-group.signatures,
body.user-is-XXXXX .user-preferences .signature-preferences,
body.user-is-XXXXX .user-preferences div[data-setting-name="user_card_badge"] + .control-group {
    display: block !important;
}

完了です。

私は開発者ではありません。私が知っているのは、これが私のサイトで100%機能しているということです。

また、プラグインの作者へ。署名の文字数を制限する機能があれば、大変ありがたいです。色々なことを試しましたが、どれも機能しませんでした。

「いいね!」 1

最も要望の多かった機能をプラグインのブランチに追加しました

皆さん、このブランチを試してフィードバックをいただければ、来週マージできます。

「いいね!」 3

アップグレードが来週の場合、どのように行われますか?:slight_smile:

これをどうやってテストすればいいですか?初心者な質問ですみません。上記で思いついたものよりもこちらの方が好みです。また、画像署名をオフにしてテキストベースのものだけを許可するオプションを追加することは可能でしょうか?ありがとうございます!

こんにちは、Longさん!Discourseサイトをセルフホストしていますか?もしそうなら、最初の投稿にリンクされている手順を使用してプラグインをインストールできます。

個人的には、Falcoのブランチが確定し、マージされるのを待つことをお勧めします。

はい、セルフホスティングです。プラグインはインストール済みです。そのブランチが確定しマージされたら、自動的に更新されますか?ありがとうございます!

「いいね!」 1

app.yml のプラグイン行を次のように変更します。

- sudo -E -u discourse git clone -b feature/group-category-restrictions git@github.com:discourse/discourse-signatures.git

ありがとうございます。更新されたプラグインを待ちます。そちらの方が失敗しにくいでしょうね :rofl:

これは馬鹿げた質問かもしれませんが、アップデートがマージされたとき、プラグインは自動的に更新され、設定で新しいオプションが表示されるのでしょうか?

いいえ、手動で更新する必要があると思います。

「いいね!」 2