Enable HTTPBuilder debug message

在用 groovy & cucumber 寫 API test 時,如果發生問題只會噴個 error 的 body 而已,這樣非常難 debug 。而且有一些參數是設在 http header 上,如果把每個 API 的 header 都印出來,要到處塞 debug logger。如果是 https 的話,也沒辦法使用 tcpdump 來看。

這時可以用下列方法簡單的把 logger 設定打開,就可以直接噴在營幕上了,這樣比較好 debug。

mvn -B integration-test -Dcucumber.options="--tags @test_only" \
-Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog \
-Dorg.apache.commons.logging.simplelog.showdatetime=true \
-Dorg.apache.commons.logging.simplelog.log.org.apache.http=DEBUG

還有其他的參數可以參考後附的文章內容。

reference

Backup HipChat messages by API

簡單的 Script 來備份 HipChat 該房間所有的 messages。

Why?

因為我沒有 Admin 權限! 所以只好這樣幹。

#!/bin/sh
HOST=https://{your hipchat host}
TOKEN={token}
ROOM={room}
DATE={start time}
NUMBER_OF_DAYS=410
OUTPUT_DIR=/tmp/backup
for i in `seq 1 $NUMBER_OF_DAYS` ;
do
    let DATE+=86400
    let END=DATE+86400
    if [ ! -f /tmp/backup/$DATE ] ; then
        response=$(curl -v  "$HOST/v2/room/$ROOM/history?date=$END&end-date=$DATE&reverse=true&max-results=1000&auth_token=$TOKEN" --write-out %{http_code} -o $OUTPUT_DIR/$DATE)
        test $response -ne 200 && sleep 60;
    fi
done

Reference:
* View room history

淺談TOTP(Time-based One-time Password)

TOTP 是利用 Application and services 上時間是一致,拿二邊共同的 key ,並且作一樣的 Hash 後,結果會產生一樣的 token,即可拿來作驗證,常被使用來作二次驗證(two-step verification)。

因為這部份的演算法是 RFC6238,所以可使用任何的 apps 來協助驗證,例如:Google Authenticator, Duo 之類的。

怎麼實作的

PHP 有人作好了: otphp

跟據 wikipedia 裡的 Implementation 章節中,有一段描述如何產生 token:

  1. Calculate C as the number of times TI has elapsed after T0.
  2. Compute the HMAC hash H with C as the message and K as the key (the HMAC algorithm is defined in the previous section, but also most cryptographical libraries support it). K should be passed as it is, C should be passed as a raw 64-bit unsigned integer.
  3. Take the least 4 significant bits of H and use it as an offset, O.
  4. Take 4 bytes from H starting at O bytes MSB, discard the most significant bit and store the rest as an (unsigned) 32-bit integer, I.
  5. The token is the lowest N digits of I in base 10. If the result has fewer digits than N, pad it with zeroes from the left.

如果覺得太復雜,我挖了一下 otphp,應該在 otphp/src/OTP.php 裡面的 protected function generateOTP($input) 中有實作。

使用

安裝 composer require spomky-labs/otphp

sample code:

<?php
require __DIR__ . '/vendor/autoload.php';
use OTPHP\TOTP;

$totp = new TOTP(
    "whatup.tw@gmail.com" // The label (string)
);
$google_chart = $totp->getQrCodeUri();
$otpCode = $totp->now();
echo "<img src='{$google_chart}'><br/>";
echo "Current OTP: " . $totp->now() . "<br/>\n";
echo "Current Secret: " . $totp->getSecret() . "<br/>\n";
echo "Verify OTP: " . $totp->verify($otpCode) . "<br/>\n";
?>

到 browser 執行後會產生下面畫面:
totp example result

接下來你就拿出你的 Google Authenticator 來掃這個條碼,就可以新增一組新驗證碼。

Google Authenticator 預設是 30s ,所以 30s 後,這個 OTP 產生出來的 token 應該會無法使用。如果你的 application 可以看到 secret 的話,應該會看到 app & service 的 secret 應該要一樣。

剩下的可以參考 document 說的很清楚。

限制

  • 其實無法防止 phishing 網頁用假的頁面來騙你資料,在你輸入 token 後,壞人在 30s 之內也可以同時登入。
  • secret key 如果被人拿走,別人也同時擁有通過二次驗證的能力。
  • app & services 之間的時間一定不能差太多,所以手機不能調整時間(有人喜歡看時鐘快五分鐘)。

2016 美濃彩繪大地-美濃花海

每年過年期間,美濃在中正湖附近會出現大片的波斯菊花海。
我覺得跟荷蘭的鬱金香花海和北海道的薰衣草花海有幾分相似,一大片的花海遍佈中正湖。
再加上冬天是高雄的乾季,不太下雨且天氣也沒有北部這麼冷,是個適合全家出遊的好天氣。

在中正湖邊有一個大大的 LOVE ,搭配著客家花布的色彩和整片的波斯菊花海,有不少人在這跟 LOVE 一起合照。
不過現在花還開的不夠盛大,尚有一小部份還是還是綠色底色。
Love!

從這裡往湖的方向望去,可以看到大片的花海搭配著中正湖中的涼亭,而遠方背景中的山是人字山。
美濃中正湖旁

搭配著冬天的金色的夕陽和整片的花海,感覺和冰冷的北部完全不一樣,整個人都暖了起來。
夕陽下的美濃花海

各種顏色的波斯菊看起來非常的壯觀。
夕陽下的美濃花海

紅色的波斯菊配上紫色的稻草人別有一番風味。
夕陽下的美濃花海

好幾個月沒放風了,難得放風的潔終於可以小小的出門走走了。
難得放風的潔

過年期間如果不知道要往哪跑可以來美濃賞花海啊,適合全家大小一起來拍照!