オープンソースMBaaS「BaasBox」を使ってみる(1) インストールからログインまで

数回に分けて、このBaasBoxを手元のvagrant環境で動かしてAPIたたくところまで試す予定。

[The open source backend for your mobile app | BAASBOX][2]
[BaasBox - オープンソースなmBaaS - モバイル/タブレット向けオープンソース紹介 - Mobile Touch - モバイル/タブレット開発者およびデザイナー向け情報ポータル][1]

## 環境

    $ uname -a
    Linux vagrant-ubuntu-precise-64 3.2.0-57-generic #87-Ubuntu SMP Tue Nov 12 21:35:10 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux 

## 準備

JDK(6以上)とPlay Framework(バージョンはBaasBoxのREADMEにあった2.1.1にした)が必要

    # jdk インストール
    # http://www.devlog.alt-area.org/?p=1817 を見た 
    $ sudo add-apt-repository ppa:webupd8team/java
    $ sudo apt-get update
    $ sudo apt-get install oracle-java7-installer

    # playフレームワークのインストール
    # http://hirooka.pro/?p=1618 を見た
    $ wget http://downloads.typesafe.com/play/2.1.1/play-2.1.1.zip
    $ unzip play-2.1.1.zip
    $ sudo mv play-2.1.1 /usr/local/
    $ sudo ln -sf /usr/local/play-2.1.1 /usr/local/play

    # パスの設定
    $ vi ~/.profile
    # export PLAY_HOME=/usr/local/play
    # export PATH=$PATH:$PLAY_HOME

    $ source ~/.profile
    # 確認
    $ which play
    $ play help
	
## BaasBox

    # 落としてきて
    $ wget https://github.com/baasbox/baasbox/archive/master.zip
    $ unzip master.zip
    $ cd baasbox-master

    # 一回パッケージング？
    $ play dist

    # dist以下にzipファイルが生成されるので、それを展開
    $ cd dist
    $ unzip baasbox-0.7.3-snapshot.zip

    # startという起動用のスクリプトを実行
    $ cd baasbox-0.7.3-snapshot
    $ chmod 755 start
    $ ./start

これでhttp://localhost:9000とかhttp://192.168.33.10:9000とかでアクセスできるようになる。READMEにも書いてあるとおり、admin/admin/1234567890で管理画面にログインできて、上記リンクにあるスクリーンショットみたいな画面になる。

![BaasBox1.png](https://qiita-image-store.s3.amazonaws.com/0/10192/5d6aa5c9-80f8-3f10-16bf-912c5f86f542.png)

## ユーザーを作成してログインしてみる

私がとっつきやすそうなところといえばユーザー認証なので、ユーザーを作成してログインしてみる。APIでも作成できるけど画面から。作成するユーザーは以下のとおり。

    Username : ritou
    Password : (パスワードランキング1位になった6文字)
    Role : administrator

![BaasBox2.png](https://qiita-image-store.s3.amazonaws.com/0/10192/adb9b5ff-6c3e-28fb-9842-736ccfd2437d.png)

![BaasBox3.png](https://qiita-image-store.s3.amazonaws.com/0/10192/29f4f607-b445-baf0-05a6-23ff67ef075a.png)

![BaasBox4.png](https://qiita-image-store.s3.amazonaws.com/0/10192/3b96d8ce-068d-111f-c88b-08fc3f4e63e2.png)

ログインするAPIをたたいてみる。

    $ curl -i -X POST -d "username=ritou&password=123456&appcode=1234567890" http://localhost:9000/login
    HTTP/1.1 200 OK
    Access-Control-Allow-Origin: *
    Access-Control-Allow-Headers: X-Requested-With
    Content-Length: 292
    X-BB-SESSION: c60e3705-0fe9-48fc-93cf-a26bd00e752e
    Content-Type: application/json

    {"result":"ok","data":{"user":{"name":"ritou","status":"ACTIVE","roles":[{"name":"administrator"}]},"visibleByAnonymousUsers":{},"visibleByTheUser":{},"visibleByRegisteredUsers":{},"signUpDate":"2014-01-24 02:47:26+0000","X-BB-SESSION":"c60e3705-0fe9-48fc-93cf-a26bd00e752e"},"http_code":200}

ログインできた。レスポンスヘッダ、ボディに含まれる"X-BB-SESSION"がBaasBoxにおけるセッションIDとなる。せっかくなのでユーザー新規作成もAPIでやってみる。

    $ curl -i -X POST -H "Content-Type: application/json" -H "X-BAASBOX-APPCODE: 1234567890" -d '{"username":"ritou2","password":"password","visibleByTheUser":{},"visibleByFriend":{},"visibleByRegisteredUsers":{},"visibleByAnonymousUsers":{}}' http://localhost:9000/user
    HTTP/1.1 201 Created
    Access-Control-Allow-Origin: *
    Access-Control-Allow-Headers: X-Requested-With
    Content-Length: 290
    X-BB-SESSION: fb30f20b-5fab-4623-b19c-f78abde069f3
    Content-Type: application/json
    BB-USERNAME: internal_admin

    {"result":"ok","data":{"user":{"name":"ritou2","status":"ACTIVE","roles":[{"name":"registered"}]},"visibleByAnonymousUsers":{},"visibleByTheUser":{},"visibleByRegisteredUsers":{},"signUpDate":"2014-01-24 03:46:12+0000","X-BB-SESSION":"fb30f20b-5fab-4623-b19c-f78abde069f3"},"http_code":201}

そのユーザーでログイン。

    $ curl -i -X POST -d "username=ritou2&password=password&appcode=1234567890" http://localhost:9000/login
    HTTP/1.1 200 OK
    Access-Control-Allow-Origin: *
    Access-Control-Allow-Headers: X-Requested-With
    Content-Length: 290
    X-BB-SESSION: 1b02a39a-b7fa-4cdc-a278-a3f657743703
    Content-Type: application/json

    {"result":"ok","data":{"user":{"name":"ritou2","status":"ACTIVE","roles":[{"name":"registered"}]},"visibleByAnonymousUsers":{},"visibleByTheUser":{},"visibleByRegisteredUsers":{},"signUpDate":"2014-01-24 03:46:12+0000","X-BB-SESSION":"1b02a39a-b7fa-4cdc-a278-a3f657743703"},"http_code":200}

ここまでの動作には問題なし。passwordや123456っていうパスワードは自動ではじきたい気もするが。。。
次回はソーシャルログインやコレクション登録のあたりを触ってみる予定。

  [1]: http://mobiletou.ch/2013/12/baasbox-%E3%82%AA%E3%83%BC%E3%83%97%E3%83%B3%E3%82%BD%E3%83%BC%E3%82%B9%E3%81%AAmbaas
  [2]: http://www.baasbox.com/