読者です 読者をやめる 読者になる 読者になる

WAFに必要な要素

この1ヶ月はPerlRubyのWAFのコードは大分読んで、必要な要素がわかったので、angelosのクラス構成をベースに簡単にまとめてみました。
http://github.com/dann/angelos/tree/master

WAF Core

  • Application Class (Angelos.pm)
    • WAF全体のsetup
  • Component
    • Controller
    • View
    • (Model)
  • Component Loader
    • Componentの読み込みと組み立て(Pluginの組み込み)
    • mstがCatalystでDIコンテナを使いたいといっててのはここの部分ですね
  • Engine
  • Dispatcher
    • Routing + Controllerへのdispatch
      • HTTP::Router + α
  • Engine拡張
    • Middleware
      • request handlerをwrap
  • プラグイン機構 (Angelos::Class)
    • Angelos::Class::Hookable
    • hook機構によるプラグイン機構。MouseX::Plaggerizeからfork予定.
  • Angelos::Class::Mixinable
    • Mixin機構による拡張を実現するプラグイン機構。MooseX::Object::Pluggableのmouse port.
  • Script
  • WAFに必要なその他の機能(必須ではない機能)
    • Authorization+Authentication
    • Session
      • HTTP::Sessionベースで
    • I18N

Session, Authentication, I18Nは、フレームワークのPluginという形に最終的にはなるかなと思ってます。Session, AuthenticationはMiddlewareレイヤでやるべきかは少し悩んではいますが。

フレームワーク周辺機能

Webアプリで必要になる要素はデフォルトで用意しておきたいなと思ってます。コア機能という形でいれこむかはさておき、WAFとconfigurationやモデルが共有できるような仕組みを提供したいと思っています。

  • CLI
    • アプリのCLIのベースクラス
  • Job Queue
    • これはまだ未コミット。

angelosのクラス構成

ここ数日でangelosもWAFとしての骨格は整ってきたかなという印象です。コードもここ数日で大分整理したので、HTTP::Engineを使ったWAFの例としては参考にできる点もあるのではないかと思います。

現在のクラス構成は以下のようになっています。

.
|-- Angelos
|   |-- CLI
|   |   |-- Command.pm
|   |   `-- Help.pm
|   |-- CLI.pm
|   |-- Class
|   |   |-- Hookable
|   |   |   `-- Plugin.pm
|   |   |-- Hookable.pm
|   |   `-- Mixinable.pm
|   |-- Component
|   |   `-- Loader.pm
|   |-- Component.pm
|   |-- Config
|   |   |-- Loader.pm
|   |   |-- Schema.pm
|   |   `-- Validator.pm
|   |-- Config.pm
|   |-- Context
|   |   `-- Mixin
|   |-- Context.pm
|   |-- Controller
|   |   `-- Mixin
|   |-- Controller.pm
|   |-- Debug
|   |   |-- Components.pm
|   |   |-- MemoryUsage.pm
|   |   `-- Routes.pm
|   |-- Dispatcher
|   |   |-- Dispatch.pm
|   |   `-- Routes
|   |       `-- Builder.pm
|   |-- Dispatcher.pm
|   |-- Engine
|   |   |-- ModPerl.pm
|   |   |-- Plugin
|   |   |   `-- Session.pm
|   |   `-- Plugin.pm
|   |-- Engine.pm
|   |-- Exception.pm
|   |-- Exceptions.pm
|   |-- Home.pm
|   |-- I18N.pm
|   |-- Logger.pm
|   |-- MIMETypes.pm
|   |-- Manual
|   |   `-- Tutorial.pod
|   |-- Manual.pm
|   |-- Middleware
|   |   |-- Builder.pm
|   |   |-- Profile.pm
|   |   `-- Unicode.pm
|   |-- Middleware.pm
|   |-- Script
|   |   |-- Command
|   |   |   |-- Console
|   |   |   |   `-- Plugin
|   |   |   |-- Console.pm
|   |   |   |-- Gen
|   |   |   |   `-- Flavor
|   |   |   |       `-- App.pm
|   |   |   |-- Gen.pm
|   |   |   |-- Po.pm
|   |   |   `-- Server.pm
|   |   `-- Help.pm
|   |-- Script.pm
|   |-- SessionBuilder.pm
|   |-- Utils.pm
|   |-- View
|   |   |-- Plugin
|   |   `-- TT.pm
|   `-- View.pm
|-- Angelos.pm

今後のTODO

今後は、以下のようなものを追加していきたいなと。

  • WAFの基本機能の追加
    • Controller: redirect, forward, detachなど。
    • View
      • displayメソッドの実装(merb likeな)
  • Modelの統合
    • どのように実現するか要検討
  • Authorization+Authetication対応
    • 今みている限りだとCatalystの認証機構のportが一番筋がよさそうです
  • Job Queueへの対応
  • $c依存にするか否かの決定