-オープンソースのSNSエンジン OpenPNEプロジェクト-

最新ブログ

Home

4/1にOpenPNE公式SNSをOpenPNE3化します!

03 / 25 木曜日 2010

OpenPNE開発チームの山下です。
いきなりですが、お知らせです。

ついに公式SNSがOpenPNE3になります。

OpenPNE3.4 をリリースし、OpenPNE2からの移行もサポートするようになりました。
また、OpenPNE3.4 のリリースから2ヶ月が経ち、公式SNSが2系のままではいけないだろう…。
ということで、移行に踏み切りました。

移行日

2010年4月1日

移行についての注意

  • 移行作業当日は、公式SNSに接続できなくなります。
  • 移行後はレビュー機能・お気に入り機能などが使用できなくなります。

ご迷惑おかけしますが、ご了承いただけると幸いです。

招待制から登録制へ

移行と同時に招待制から登録制になります。
招待制のままのほうがいいのでは?というかたもいらっしゃるとは思いますが…
もっと多くの人にOpenPNE3に触れてほしいという狙いがあります。
そしてよりいっそう、ユーザ同士でOpenPNEに関する情報を交換しやすくしたいという思いもあり、招待制から登録制に移行させていただきました。

これからもOpenPNEをよろしくお願いします!

安定版OpenPNE2.14.5と旧安定版OpenPNE2.12.18リリースしました

03 / 18 木曜日 2010

OpenPNE開発チームの今村です。
本日2010/3/18(木)、安定版 OpenPNE2.14.5 , 旧安定版 OpenPNE2.12.18 をリリースしました。
かんたんログインによるなりすましの問題の対応がまだの方は、この機会にマイナーバージョンアップをお願いします!

続きを読む

OpenPNE3プラグインで簡単マッシュアップ!

03 / 15 月曜日 2010

  • TIPS
  • 深町 英太郎

OpenPNE開発チームの深町です。

カヤックさんの多すぎるWebサービスの中に、im.kayac.comというサービスがあります。「I’m Kayac? 自己紹介?」とか思ってたんですが、どうやらInstant Messageの略でIMのようです。

im.kayac.comは、APIにリクエストを投げるだけで他のサービスに通知を飛ばせる便利なサービスです。専用のiPhoneアプリを入れることでiPhoneにポップアップ通知をすることができます。ちなみに僕はiPhoneは持っていません。Touchです。

おぉ、なんか便利そうだ。問題は使い道だなぁ。何に使おう。

製品テストにいいかも?

最近、OpenPNE3の単体テストを走らせていたのですが、時間の長いこと長いこと。その間ぼーっとしてるわけにもいかないのでTumblrでせっせとリブログを繰り返しているのですが、気づいたら終わってる。非効率だ。終わったら通知させるようにしよう。

$ symfony test:unit; curl -d ‘message=OpenPNE3 Unit Tests were done.’ http://im.kayac.com/api/post/nitro_idiot

こうして単体テストを走らせておくと、終わったタイミングで御苑で花見をしている僕のiPhoneがピコンとなるわけです。あ、僕はiPhoneは持ってませんでした。Touchです。

とてもクールなサービスですね。

OpenPNEとの連携

以上、im.kayac.comの紹介でした。カヤックでは製品テストが好きなプログラマを募集しています!

…あ、僕はカヤック社員ではありませんでした。OpenPNE開発者です。

やっぱ他社のサービス紹介だけでもあれなのでOpenPNEとの連携でも考えたほうがいいですよねー :p

opImKayacComPluginってのはどう?

普段僕はOpenPNE3のプラグインなんて作らないのですが、「えー、深町さんひょっとして作れないんじゃないですかぁ?きゃははー」とか言われると嫌なのでチュートリアルがてら作ってみたいと思います。いや、作れるんだって!本気出せば!

今回作るのはフレンドが日記を書いたり、自分のにコメントがついたときにim.kayac.comを使ってiPhoneに通知できるようにするプラグイン「opImKayacComPlugin」です。

0. 実装方針

OpenPNE3で使われているフレームワークsymfonyには「イベントディスパッチャ」という機構があります。これは、拡張可能なプログラムを書ける大変クールな機構です。

OpenPNE3ではこの機構を使って、ページの読み込みの前後(正確にはアクションの前後)で、好きなコードを走らせることができます。たとえばopAshiatoPluginでは、メンバーのホーム・日記などを見たときに”あしあと”をつける処理をしています。

今回も同じ要領で、日記の作成のあとにim.kayac.comに通知を投げる処理を加えたいと思います。

1. config.phpでイベントを受け取る

OpenPNEのプラグインを作るときに、必ず実行させたいコードってたまにありますよね。そういうコードは config/config.php に書くといいです。今回イベントのリスナーは必ず追加したいのでここに書きます。

※追記 : 卜部さんから、sfPluginConfigurationを継承するクラスを作ることで、リスナーと処理を一緒のファイルに書けるよ、というアドバイスをもらいました。以下の例ではconfig/opImKayacComConfiguration.class.php というファイルに記述するといいプログラムになるかもしれません。参考 : http://github.com/ebihara/opPluginChannelServerPlugin/blob/master/config/opPluginChannelServerPluginConfiguration.class.php

・config/config.php

<?php

// 日記が書き込まれたら
// opImKayacComListener::listenToPostDiaryCreate()を実行してね
$this->dispatcher->connect(
  'op_action.post_execute_diary_create',
  array('opImKayacComListener', 'listenToPostDiaryCreate')
);

OpenPNEのアクションが実行されると、アクションの前にop_action.pre_execute_{module}_{action}、アクションの後にop_action.post_execute_{module}_{action}という名前のイベントが発生します。これに対してconnect()を使ってリスナーを登録します。listenじゃなくてconnectなのが紛らわしいです。

opImKayacComListenerクラスはまだ作っていないので、この状態だとエラーになりますが、とりあえずここは放っておきましょう。

2. im.kayac.comに通知を投げるには

まずはim.kayac.comに通知を投げる必要があります。im.kayac.comはPOSTメソッドでHTTPリクエストを飛ばせばいいです。PHPからはfile_get_contents()を使います。

  static public function postToImKayacCom()
  {
    $params = array(
      'password' => 'hogehoge',
      'message' => '[op3] うべー',
    );
    $header = array(
      'Content-Type: application/x-www-form-urlencoded',
      'Content-Length: '.strlen($params),
    );
    $options = array(
      'http' => array(
        'method' => 'POST',
        'header' => implode("\r\n", $header),
        'content' => $params,
      )
    );

    file_get_contents('http://im.kayac.com/api/post/nitro_idiot', false, stream_context_create($options));
  }

Notification on iPod touch

うべー。

こういうstaticなユーティリティ関数を使いたい場合は、慣習としてlib/util/にファイルを置きます。ここではlib/util/opImKayacComPluginToolkit.class.phpというファイルを作りました。

さて、いよいよ受け取ったイベントで通知処理をする段階です。

3. opImKayacComListenerクラスを作る

さて、いよいよメインの処理です。といっても大したことをするわけじゃなくて、さっき作ったopImKayacComPluginToolkit::postToImKayacCom()を呼び出して通知するくらいです。

・lib/opImKayacComListener.class.php

<?php

class opImKayacComListener
{
  static public function listenToPostDiaryCreate()
  {
    opImKayacComPluginToolkit::postToImKayacCom('nitro_idiot');
  }
}

ここで通知するユーザの選択もできます。たとえば、自分が日記を書いたときまでiPhoneに通知されたらうざいですよね。その場合は sfContext::getInstance()->getUser()->getMemberId() でアクセスしているユーザのMemberIdを取得して判定することができます。

さぁ、これで日記を投稿すれば僕に通知がくるようになりました。最後まで書いてると上司から肩を叩かれそうなのでチュートリアルはここまで!

まとめ

・必ず実行したいコードは config/config.php に書く
・ユーティリティ関数はlib/util以下に置く
・イベントディスパッチャを使えば既存の機能を簡単に拡張できる

さらに改良するには

ただ、このままだと僕(nitro_idiot)にしか通知を送れません。POSTするURLのユーザ名を引数で受け取ることでそれぞれのユーザに通知することができます。

その場合、それぞれのユーザにim.kayac.comのアカウントを設定させる必要もあります。これはconfig/doctrine/schema.yml に新規テーブルの記述を加えて、config/member_config.yml と lib/form/MemberConfigForm/MemberConfigImKayacComForm.class.php を追加すれば実現できます。

他には日記コメントがついたら知りたい!とか、メッセージをすぐ確認したい!とかにも同じように対応することができます。

今あるOpenPNEのプラグインは、opDiaryPluginとかopMessagePluginとか、大きなものが多いですが、これくらい小さなものでも面白いものが作れるとわかっていただけたでしょうか?

今日作ったプラグインは…

今日作ったopImKayacComPluginはもちろんオープンソースです!

http://github.com/fukamachi/opImKayacComPlugin

この記事のコードからかなり変わっちゃっていますが、原型は同じなので参考にしていただけると幸いです。わからないことがあれば公式SNSやTwitter宛に気軽に聞いてください :)

OpenPNE 3.5.0 リリースのお知らせ

03 / 13 土曜日 2010

OpenPNE 開発チームの海老原です。

緊急リリースなどの開発の都合によりリリースが遅れてしまいましたが、昨日 2010/03/12 (金)、開発版 OpenPNE 3.5.0 をリリースしました。

今回のリリースでは、安定版でおこなわれたバグ修正のほか、待望の自動ログイン機能、プラグインインストール、リリース周りの改善、プロフィールページの外部公開機能などの機能追加、改善がおこなわれています。

いくつかの新機能については、今村さんが OpenPNE 3.5.0 の新機能をわかりやすく紹介しているナイスなエントリ、 「今週のOpenPNE3デモサイト委員会 #17 」 を是非ご覧ください!
(※余談ですが、エントリ中で触れられている「プラグインチャンネルサーバー」について、近日中に嬉しいお知らせができると思うので、こちらも楽しみにしていただければと思います)

次のリリースは 2010/03/25 (木) を予定しています。

続きを読む

OpenPNE 3.4.2 および OpenPNE 3.2.3 リリースのお知らせ

03 / 11 木曜日 2010

OpenPNE 開発チームの卜部です。

本日、安定版 OpenPNE 3.4.2 と旧安定版 OpenPNE 3.2.3 をリリースしました。
緊急リリースが何度かあり、開発が遅れることがございましたが、今回は無事予定通りのリリースとなりました。

今回のリリースでは、プロフィール登録周りのバグの修正やバリデーション周りのバグの修正、3.4.x に追加されていたナビゲーションキャッシュのバグフィックスなどが取り込まれています。

次のリリースは 2010/04/08 (木) を予定しています。

バグ修正

  • #602: (3.4.2 限定) Display other member’s local navigation sometimes (違うメンバーのローカルナビゲーションが表示されることがある)
  • #663, : The session timeout of pc_frontend does not became enabled. (pc_frontendのセッションタイムアウトが有効にならない)
  • #637: opValidatorDate with date_time option don’t return time correctly. (opValidatorDateをwith_timeオプション付きで使用したとき時刻が違う値になる)
  • #719: After sorted an item name by profile choice list, change of an item name cannot be performed. (プロフィール選択肢一覧で項目名を入れ替えた後に項目名の変更が出来ない)

続きを読む

opBlogPlugin 1.0.1 リリースのお知らせ

03 / 09 火曜日 2010

OpenPNE 開発チームの長澤です。

OpenPNE3 用の外部ブログプラグイン opBlogPlugin のバージョン 1.0.1 をリリースしました。

今回のリリースで、1.0.0.1 時点で発見されていたバグの修正が行われています。

1.0.1での変更点

#176: IE7でblogのURL設定画面のレイアウトが不自然
#648: opBlogPlugin 1.0.0.1で画像が変
#770: フレンドが一定以上になるとフレンドのブログリストが正常に取得されない
#772: ブログタイトルが多重エスケープされてしまう
#828: マイホームとプロフィールページの文言がおかしい
#771: change deprecated helper function to the function of substitution (非推奨関数を代替の関数に変更する)

詳しくは、Redmine の v1.0.1 バージョン情報のページをご覧ください。

アップデート手順

バージョン 1.0.x をお使いの方

opPlugin:install タスクを実行することで最新バージョンへのアップデートをおこなうことができます。


$ php symfony opPlugin:install -r 1.0.1 opBlogPlugin
$ php symfony cc

以上でアップデート完了です。

バージョン 0.9.x をお使いの方

opBlogPlugin 1.0.0 リリースのお知らせ の記事の手順でアップデートを行う必要があります。
その際は 1.0.0 となっている箇所を、1.0.1 と置き換えて作業を行ってください。

バージョンの確認

以下のコマンドでプラグインのバージョンを確認することができます。

$ php symfony plugin:list

正常にアップデートされていれば以下のように表示されます。

opBlogPlugin 1.0.1-stable # plugins.openpne.jp (plugins.openpne.jp)

開発やバグ報告・要望について

バグや要望等は、こちらから、報告ができます。

ソースコードは Github で管理されています。
バグ修正などしていただいた場合、pull request していただければと思います。
http://github.com/nothan/opBlogPlugin

【緊急リリース】携帯版かんたんログインの不備によりなりすましがおこなわれてしまう問題について

03 / 05 金曜日 2010

この記事に関連する次の記事もご覧ください。

携帯版を使用している OpenPNE では、かんたんログイン機能の不備により、なりすましがおこなわれてしまう可能性があります。

このエントリでは、本問題についての解説と、 OpenPNE 1.6 〜 OpenPNE 1.8、 OpenPNE 2.0 〜 OpenPNE 2.8、 OpenPNE 2.10 〜 OpenPNE 2.14、 OpenPNE 3.0 〜 OpenPNE 3.4 向けに対応方法の説明をおこないます。

本問題について

影響を受けるシステム:
携帯版を有効にしているすべての OpenPNE 1.6 〜 OpenPNE 1.8, OpenPNE 2, OpenPNE 3
本問題についての説明:
OpenPNE の携帯版には、携帯電話の端末 ID (OpenPNE では「携帯電話個体識別番号」という呼称を使用しています)を使用して、メールアドレスやパスワードの入力をユーザに要求することなくログインをおこなうための、かんたんログイン機能が存在します。
かんたんログイン機能は IP アドレス帯域制限によって、真正な携帯電話からのアクセスに限定しなければ安全に使用することができません。 PC からかんたんログイン機能を使用できる状態にある場合、特定の情報を送信してかんたんログインをおこなうことで、なりすましログインがおこなわれてしまう可能性があります。

かんたんログイン機能の安全性を担保するための OpenPNE の IP アドレス帯域制限には以下の問題があります。そのため、なりすましログインをされる危険性があります。

  • ・OpenPNE 2.14 (OpenPNE 2.13.2 以降) には、特定の操作をおこなうことで、携帯電話の IP アドレス帯域制限を回避されてしまう脆弱性が存在する
  • ・IP アドレス帯域制限機能が OpenPNE 2.10 以降にしか存在しない
  • ・OpenPNE 2.10 以降、 OpenPNE 3.0 以降の IP アドレス帯域制限機能がデフォルトで OFF (使用しない) になっている
想定される影響:
なりすましログインがおこなわれることによって、パスワードなどを要求する重要な操作を除き、ほとんどの情報の閲覧や変更を、なりすましたメンバーの権限でおこなわれてしまう可能性があります。
対策方法・回避方法:
本エントリの「本問題への対応方法」をご覧ください。

掲載されている各対応方法をすぐには実施できない場合、管理画面から「携帯版使用設定」を「使用しない」にすることでこの問題を回避することができます。

謝辞
OpenPNE 2.14 における IP アドレス帯域制限機能回避の脆弱性について、高木浩光氏よりご報告いただきました。厚く御礼申し上げます。
関連情報
JVN#06874657 OpenPNE におけるアクセス制限回避の脆弱性
JVNDB-2010-000006 – JVN iPedia – 脆弱性対策情報データベース

本問題への対応方法

OpenPNE 3.0 〜 OpenPNE 3.4

マイナーバージョンアップもしくは修正パッチの適用を実施してください。
(OpenPNE 3 の修正パッチは patch -p1 < /path/to/patch のようにして当ててください)

OpenPNE 3.0.6.1 :
[.zip 版ダウンロード] [修正パッチ]
OpenPNE 3.2.2.1 :
[.zip 版ダウンロード] [修正パッチ]
OpenPNE 3.4.1.1 :
[.zip 版ダウンロード] [修正パッチ]

その後、管理画面の SNS 設定を確認し、「携帯電話のIP帯域設定」が「携帯電話のIP帯域をチェックする」になっていない場合は変更してください。

マイナーバージョンアップをしていない環境で、パッチを適用できない場合、携帯電話の IP アドレス帯域リストを更新した上で SNS 設定の「携帯電話のIP帯域設定」を「携帯電話のIP帯域をチェックする」に変更してください。

以下の画像のようになっていれば OK です。

お使いのバージョンの最新版の IP 帯域リストの入手方法は、本エントリの「今後の OpenPNE プロジェクトとしての携帯電話 IP 帯域リスト更新ポリシー」に示してあります。

OpenPNE 2.10 〜 OpenPNE 2.14

マイナーバージョンアップもしくは修正パッチの適用を実施してください。

OpenPNE 2.10.13.1 :
[.tar.gz 版ダウンロード][.tar.bz2 版ダウンロード] [.zip 版ダウンロード] [修正パッチ]
OpenPNE 2.12.17.1 :
[.tar.gz 版ダウンロード][.tar.bz2 版ダウンロード] [.zip 版ダウンロード] [修正パッチ]
OpenPNE 2.14.4.1 :
[.tar.gz 版ダウンロード][.tar.bz2 版ダウンロード] [.zip 版ダウンロード] [修正パッチ]

ソースコードの入れ替え、もしくは修正パッチの適用をおこなった後、 config.php の CHECK_KTAI_IP の設定が false になっている場合は、以下のように true に設定してください。

define(‘CHECK_KTAI_IP’, true);

OpenPNE 2.12.17 では ソースコードを入れ替えることなく、 config.php の CHECK_KTAI_IP の設定を true に設定する(IP アドレス帯域制限機能を使用するようにする)だけでも効果があります。

マイナーバージョンアップをしていない環境で、パッチを適用できない場合、携帯電話の IP アドレス帯域リストを更新した上で config.php の CHECK_KTAI_IP の設定を true に変更してください。

お使いのバージョンの最新版の IP 帯域リストの入手方法は、本エントリの「今後の OpenPNE プロジェクトとしての携帯電話 IP 帯域リスト更新ポリシー」に示してあります。

OpenPNE 2.0 〜 OpenPNE 2.8

OpenPNE 2.0 〜 OpenPNE 2.8 で携帯電話 IP 帯域制限機能を利用するためのパッチを公開します。

OpenPNE 2.0 〜 OpenPNE 2.2 向けのパッチはこちらになります: https://gist.github.com/raw/322468/bb6bbd4c5f59dff51c571b0a32c1752c5cc9320f/openpne2.diff
OpenPNE 2.4 〜 OpenPNE 2.8 向けのパッチはこちらになります: https://gist.github.com/raw/322468/2798c821f82eaa064294eea519407f771ea17714/openpne2.4.diff

今後 IP アドレス帯域リストを更新する場合は、 2.12 向けのリストを使用してください。

このパッチを適用するか、もしくは、 OpenPNE 2.12, OpenPNE 2.14 へのメジャーバージョンアップを実施してください。

OpenPNE 1.6 〜 OpenPNE 1.8

OpenPNE 1.6 〜 OpenPNE 1.8 で携帯電話 IP 帯域制限機能を利用するための .htaccess を公開します。

https://gist.github.com/raw/322468/51e7cdf982a3f4a8f7e322ff5b2b9fbedfa1127b/.htaccess

このファイルを public_html ディレクトリ以下に設置してご利用いただくか、もしくは、 OpenPNE 2.12, OpenPNE 2.14 へのメジャーバージョンアップを実施してください。

今後の OpenPNE プロジェクトとしての携帯電話 IP 帯域リスト更新ポリシー

今回、すべての OpenPNE において携帯版の IP アドレス帯域制限をデフォルト ON にするにあたり、各キャリア側の携帯 IP アドレス帯域への対応ポリシーを決定しました。

いままでマイナーバージョンアップに IP アドレス帯域リストの更新を含めていましたが、それとは別に IP アドレス帯域リストのみの単体リリースを実施するようにしていく予定です(本サイトで発表します)。

OpenPNE 2 をお使いの場合は、 webapp/lib/ktaiIP.php を以下から入手できるものに置き換えれば IP 帯域リストを更新できます。

2.10:
https://trac.openpne.jp/svn/OpenPNE_specification/mobile_ip_list/20100305/2.10/ktaiIP.php
2.12:
https://trac.openpne.jp/svn/OpenPNE_specification/mobile_ip_list/20100305/2.12/ktaiIP.php
2.14:
https://trac.openpne.jp/svn/OpenPNE_specification/mobile_ip_list/20100305/2.14/ktaiIP.php

OpenPNE 3 をお使いの場合は、 lib/config/config/mobile_ip_address.yml を以下で発表されるものに置き換えれば IP 帯域リストを更新できます。

3.0:
https://trac.openpne.jp/svn/OpenPNE_specification/mobile_ip_list/20100305/3.0/mobile_ip_address.yml
3.2:
https://trac.openpne.jp/svn/OpenPNE_specification/mobile_ip_list/20100305/3.2/mobile_ip_address.yml
3.4:
https://trac.openpne.jp/svn/OpenPNE_specification/mobile_ip_list/20100305/3.4/mobile_ip_address.yml

今週のOpenPNE3デモサイト委員会 #17

03 / 01 月曜日 2010

OpenPNE3デモサイト委員会、広報担当の今村です。
「今週のOpenPNE3デモサイト委員会」第17回です。

今回はOpenPNE3.5.0リリースに先駆けて、OpenPNE3.5.0に追加される新機能についていくつかご紹介したいと思います。

続きを読む

【緊急リリース】 opMessagePlugin の脆弱性対応リリース(0.9.0.3, 0.8.2.3)のお知らせ

02 / 26 金曜日 2010

OpenPNE 開発チームの卜部です。

本日 2010/02/26 (金) 、 opMessagePlugin に脆弱性が発見されたため、緊急リリースをおこないました。

対象:

  • opMessagePlugin 0.8.2.2 以前 (OpenPNE 3.0.0 ~ 3.0.6 に同梱されているもの)
  • opMessagePlugin 0.9.0.2 以前 (OpenPNE 3.1.5 ~ 3.4.1 に同梱されているもの)

影響を受けるシステム:

対象のバージョンの opMessagePlugin を使用しているすべての OpenPNE3
(ただし、2010/02/26 23:22 以降にセットアップをおこなった OpenPNE3 には対策版のプラグインがインストールされるため、影響を受けません)

想定される影響:

  • ・他人のメッセージが削除・復元ができる
  • ・自分宛の下書きメッセージが閲覧できる
  • ・自分が送受信していないメッセージの宛先を確認できる

主に上記の修正が含まれます。詳細につきましてはロードマップをご確認ください。

opMessagePlugin 0.8.2.3 のロードマップ
opMessagePlugin 0.9.0.3 のロードマップ

対策方法:

OpenPNE 3.0.3 ~ 3.0.6 をお使いの場合、OpenPNEのトップディレクトリで以下のコマンドを実行してアップデートを実施してください。

$ php symfony opPlugin:install opMessagePlugin -r 0.8.2.3
$ php symfony propel:build-model
$ php symfony propel:build-form
$ php symfony propel:build-filter
$ php symfony cc

OpenPNE 3.1.5 ~ OpenPNE 3.4.1 をお使いの場合、OpenPNEのトップディレクトリで以下のコマンドを実行してアップデートを実施してください。

$ php symfony opPlugin:install opMessagePlugin -r 0.9.0.3
$ php symfony doctrine:build-model
$ php symfony doctrine:build-form
$ php symfony doctrine:build-filter
$ php symfony cc

OpenPNE 3.0.0, 3.0.1, 3.0.2 をお使いの方は、 OpenPNE 3.0.3 へのアップデートを実施してください。

OpenPNE3.5.0 リリース延期のお知らせ

02 / 26 金曜日 2010

OpenPNE開発チームの今村です。

2010/02/25(木) にリリースを予定していた 開発版OpenPNE 3.5.0 ですが、
開発の遅れにより延期することになりました。
ご連絡が遅れましたこと、お詫び申し上げます。

延期後のリリース日につきましては、現在未定となっております。
正確なリリース日が決まり次第、再度ご連絡いたします。

OpenPNE3.5.0の対応項目はこちらをご覧ください。

OpenPNE 3.5.0
http://redmine.openpne.jp/versions/show/35

ページの先頭に戻る