# coding: utf-8
+# Web GUI用コントローラ
+# @author OHASHI, Norikazu
+
require 'sinatra/base'
require 'sinatra'
require 'haml'
+
+
# ユーザアクセス用モデル
require_relative '../models/users_db'
+# 書籍管理サーバ WebGUI Controller
class WebGui < Sinatra::Base
+ # エラーステータス設定
+ # @attr_reader [Integer] status HTTTP レスポンスステータス
class WebError < StandardError
- attr_reader :status
+ attr_reader :status
+
+ # @param [Integer] status HTTP レスポンスステータス
def initialize(status)
@status = status
end
:expire_after => 300,
:secret => 'change'
- #stylesheet
+ # スタイルシート
get '/style.css' do
scss :'scss/style'
end
- # main page
+ # メインページ
get '/' do
haml :main
end
- # signup page
+ # サインアップページ
get '/signup' do
haml :signup
end
- # signup posting
+ # サインアップページ(POST)
+ # @note POST パラメータ:
+ # name [String] ログインユーザ名,
+ # full_name [String] フルネーム,
+ # email [String] Eメール,
+ # passwd [String] パスワード
+ # @raise [WebError] サイアップ失敗
post '/signup' do
name = params[:name]
full_name = params[:full_name]
passwd = params[:passwd]
begin
+ # アカウント作成
id = UserAccount.createAccount(name, full_name, email, passwd)
session[:userId] = id;
redirect "/user_home"
end
end
+ # ログインページ
get '/login' do
haml :login
end
+ # ログインページ(POST)
+ # @note POST パラメータ:
+ # name [String] ログインユーザ名,
+ # passwd [String] パスワード
+ # @raise [WebError] ログイン失敗
post '/login' do
name = params[:name]
passwd = params[:passwd]
begin
+ # パスワードチェック
id = UserAccount.checkPasswd(name, passwd);
session[:userId] = id;
redirect "/user_home"
end
end
+ # ユーザ用ホームページ
+ # @raise [WebError] セッションの期限切れ
get '/user_home' do
id = session[:userId]
if (id == nil)
haml :user_home
end
+ # ログアウトページ
get '/logout' do
# 最終ログイン情報登録
haml :logout
end
+ # エラーページ
error WebError do
e = env['sinatra.error']
status e.status
# coding: utf-8
+# ユーザDBアクセス処理
+# @author OHASHI, Norikazu
require 'active_record'
require 'mysql2'
ActiveRecord::Base.configurations = YAML.load_file(db_config)
ActiveRecord::Base.establish_connection(:development)
+# ユーザ情報
class User < ActiveRecord::Base
end
-
+# ユーザ管理
class UserAccount
+ # ユーザロール
+ ROLE_AUTH = 0 #管理者権限
+ ROLE_NORMAL = 8 #一般権限
+
# 認証エラー
class AuthenticationError < SecurityError
end
class DbAccessError < StandardError
end
- # ユーザロールを設定
-
+
# ユーザアカウントを作成
+ # @param [String] name ユーザ名
+ # @param [String] full_name フルネーム
+ # @param [String] email Eメール
+ # @param [String] passwd パスワード
+ # @return [Integer] 採番されたユーザID
+ # @raise [AlreadyInstanceError] すでにユーザ情報を登録済み
+
def self.createAccount(name, full_name, email, passwd)
# ユーザの有無をチェック
user.email = email
user.passwd_salt = passwd_salt
user.passwd_hash = passwd_hash
- user.role = 8
+ user.role = ROLE_NORMAL
user.create_at = DateTime.now
user.update_at = DateTime.now
user.save
# パスワードをチェックする
+ # @param [String] name ユーザ名
+ # @param [String] passwd パスワード
+ # @return [Integer] 認証されたユーザID
+ # @raise [NotfoundInstanceError] ユーザ情報の取得に失敗
+ # @raise [AutenticationError] 認証失敗
def self.checkPasswd(name, passwd)
user = User.find_by(user_name: name)
end
# ユーザ情報取得
+ # @param [Integer] id 対象ユーザID
+ # @return [User] ユーザ情報
+ # @raise [NotfoundInstanceError] ユーザ情報の取得に失敗
def self.getUser(id)
user = User.find_by(user_id: id)
if (user == nil)
+# coding: utf-8
+# 書籍管理サーバベース処理
+# @author OHASHI, Norikazu
+
require 'sinatra/base'
require_relative './app/controllers/web_gui'
# require 'app/controllers/restful_api'
+# 書籍サーバ用メインルート
class Main < Sinatra::Base
+ #ルートに対応するコントローラの指定
ROUTES = {
+ # Web GUI 用のRoute
'/' => WebGui
+ # Web API 用のRoute
# '/webapi' => RESTfulAPI,
}
end