セキュリティ系の勉強・その他開発メモとか雑談. Twitter, ブログカテゴリ一覧
本ブログはあくまでセキュリティに関する情報共有の一環として作成したものであり,公開されているシステム等に許可なく実行するなど、違法な行為を助長するものではありません.

【RubyOnRails】format.jsが呼ばれない, respond_to内のreturnについて

問題

タイトルがうまくまとめられていませんが、、
非同期による処理をwebページ上で行いたく、js経由でコントローラのupdateアクションを呼ぼうとしています。その途中でsave失敗時などに処理を中断したいなと思いたち、を下の様なコードを書きました。

# hoge_controller.rb
def update

    if (予期しない入力がある、save失敗など)
        respond_to do |format|
            format.js{
                @status = "fail"
                render ajax_redirect_to(root_path) # 非同期でリダイレクトする独自メソッド
                return # ここに挟んでみた
            }
            format.html{
                flash[:danger] = I18n.t("events.update.danger.category")
                redirect_to(root_path) # htmlはこれをすれば処理を抜けるはず
            }
        end
    end
    # ここから正常処理を行う。
    ....
    ....
end

しかしこれでは、format.jsは呼ばれません。(おそらくhtmlも呼ばれない)

解決

qiita.com

ブロック内にreturnを挟むとその時点で、メソッドを抜けるとのこと。上のコードでは、そもそもformat.jsが呼ばれる前にupdateから抜けてしまっているのが原因ですね。下の様に直しました。respond_toの外にreturnを設置。無事期待通りの動きになりました。

# hoge_controller.rb
def update

    if (予期しない入力がある、save失敗など)
        respond_to do |format|
            format.js{
                @status = "fail"
                render ajax_redirect_to(root_path) # 非同期でリダイレクトする独自メソッド
            }
            format.html{
                flash[:danger] = I18n.t("events.update.danger.category")
                redirect_to(root_path) # htmlはこれをすれば処理を抜けるはず
            }
        end
        return # ここに移動
    end
    # ここから正常処理を行う。
    ....
    ....
end

form_with の label 内に<i>タグを使用する

Railsdeviseを使用してサインアップフォームを生成し、ビューのコードをSlimで書き換える際に困りました。以下のようなform_withを用いてフォームを生成している場面

<div class="field">
    <%= f.label :password %> <i>(leave blank if you don't want to change it)</i><br />
    <%= f.password_field :password, autocomplete: "new-password" %>


以下のように書き換えられます。

  .field
    = f.label :password
    i
      |  (leave blank if you dont want to change it)
    br/
    = f.password_field :password,id:"password", class: "form-control", autocomplete: "new-password"

インデントがわかりにくいのは申し訳ないです。この書き方において、<i>タグはlabelには含まれていないです。上の元コードも含まれていないので。

ハニポログイン試行パスワードランキング(2018年後期ウチのt-pot ver.)

はじめに

タイトル通りですが、ウチに植えていたt-potにアクセスしてきた方々が、ログイン試行に使用したユーザ名とパスワードを書き留めておこうと思います。ただ、設置したのが10月後半なので、3ヶ月に満たない物になるのはご了承ください。

ユーザ名

ユーザ名 回数
root 397169
admin 123183
enable 74671
shell 66570
(空白) 25687
user 12734
guest 12591
sh 10681
default 9605
1234 8818

パスワード

パスワード 回数
system 67187
sh 63135
61162
1234 27995
admin 18825
123456 18232
password 16520
12345 12216
user 10625
1111 9500

2018年最悪なパスワードランキングは..

ランク パスワード
1位 123456
2位 password
3位 123456789
4位 12345678
5位 12345
6位 111111
7位 1234567
8位 sunshine
9位 qwerty
10位 iloveyou

以下から引用してきています。100位まで載っているのでぜひ見て下さい。 gigazine.net

The Worst Passwords of 2018 100-50 | SplashData

比べてみて

123456passwordは入っていますね。11111234..に属するものも見受けられます。この最悪パスワードランキングはシステム系からwebサイト全般など全ての統計と思われるので、4桁のパスワードが登場しないのはそれだけ桁数制限をかけている場所が多いからではないでしょうか?対してハニポさんには4桁のものやshまで登場しますから(adminとか手抜き設定すぎる..)、比較したランキングの分野が多少違うのかなと感じます。それでも、王道のパスワードはやはり王道でした笑

RubyOnRailsチュートリアルのテストをRSpecで書く

前書き

最近Rubyチュートリアルをやっていたのですが、その中で紹介されているテストコードはMinitestで書かれています。今回はそれをRSpecに書き換えながら行ったので、どうせなら公開しておこうと思います。(RSpec初心者なので綺麗な書き方はできていません!)rubyRSpecも初心者だった私はとても苦戦したので、そんな人の助けになればとおもいます。チュートリアルは下のページから飛べます。 現時点でRails5.1版を参考にしました。

railstutorial.jp

書き換える際に..

書き換えながら思ったことは、ビュー周りのテストをどう書くか。CapybaraというGemを使用すればほとんどの事は出来ますが、そもそもビューのテストをチュートリアルが紹介しているほど正確にやるべきかと、疑問には思いました。
それと、可能な限りチュートリアルのテストコードがやっているテストを再現したつもりですが、コントローラとフィーチャーテストの境が微妙なテストは、別の場所に書いたり、省略していたりします。(初心者なので許してください。)
また、検索で引っかかるRSpec書き換えのブログさんの物を多少借りている部分もあったと思うので、被っていたら申し訳ないです!

本題

以下のリンクから飛べます。一応プロジェクトごと載せておきます。

github.com

Docker You are using pip version 10.0.1, however version 18.1 is available.

状況

https://graneed.hatenablog.com/entry/2018/06/14/231740
上のサイトを参考にt-potに新しくWOWHoneypotを追加しようと、イメージのBuild中。下のようなエラーが出た。よく見るエラーだけどわかりづらいエラー。

  Could not find a version that satisfies the requirement install (from versions: )
No matching distribution found for install
You are using pip version 10.0.1, however version 18.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

環境は

16.04.5 LTS (GNU/Linux 4.15.0-39-generic x86_64)

今回

# Install packages 
RUN apk -U upgrade && \
    apk add build-base git libssl1.0 openssl-dev libffi-dev  python-dev py-cffi py-ipaddress py-lxml py-mysqldb py-pip py-pysqlite py-requests py-setuptools && \
    pip install --upgrade pip
RUN    pip install pyOpenSSL==16.2.0


1. 上記のエラーからpipのバージョンを上げるために、 pip install --upgrade pip追記 1. ここと似たエラーが出たため、libffi-devapk add行に追記。  

これでビルドに成功

まとめ

linux内のpip系は全く関係ない。Dockerfile内での記述を変更する。Docker初心者にはわかりにくかった。