From 8fc2fc71b975dbdfea63124f23255197dfa689b3 Mon Sep 17 00:00:00 2001 From: "OHASHI, Norikazu" Date: Sat, 13 Apr 2019 13:27:50 +0900 Subject: [PATCH] =?utf8?q?yard=20=E7=94=A8=E3=81=AB=E3=82=B3=E3=83=A1?= =?utf8?q?=E3=83=B3=E3=83=88=E3=82=92=E6=95=B4=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- sinatra/app/controllers/web_gui.rb | 38 ++++++++++++++++++++++++++---- sinatra/app/models/users_db.rb | 29 +++++++++++++++++++---- sinatra/start.rb | 8 +++++++ 3 files changed, 66 insertions(+), 9 deletions(-) diff --git a/sinatra/app/controllers/web_gui.rb b/sinatra/app/controllers/web_gui.rb index 9e09cc9..fadc6a3 100644 --- a/sinatra/app/controllers/web_gui.rb +++ b/sinatra/app/controllers/web_gui.rb @@ -1,15 +1,25 @@ # 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 @@ -24,22 +34,28 @@ class WebGui < Sinatra::Base :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] @@ -47,6 +63,7 @@ class WebGui < Sinatra::Base passwd = params[:passwd] begin + # アカウント作成 id = UserAccount.createAccount(name, full_name, email, passwd) session[:userId] = id; redirect "/user_home" @@ -56,15 +73,22 @@ class WebGui < Sinatra::Base 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" @@ -75,6 +99,8 @@ class WebGui < Sinatra::Base end end + # ユーザ用ホームページ + # @raise [WebError] セッションの期限切れ get '/user_home' do id = session[:userId] if (id == nil) @@ -88,11 +114,13 @@ class WebGui < Sinatra::Base haml :user_home end + # ログアウトページ get '/logout' do # 最終ログイン情報登録 haml :logout end + # エラーページ error WebError do e = env['sinatra.error'] status e.status diff --git a/sinatra/app/models/users_db.rb b/sinatra/app/models/users_db.rb index d0ad470..784116e 100644 --- a/sinatra/app/models/users_db.rb +++ b/sinatra/app/models/users_db.rb @@ -1,4 +1,6 @@ # coding: utf-8 +# ユーザDBアクセス処理 +# @author OHASHI, Norikazu require 'active_record' require 'mysql2' @@ -9,12 +11,17 @@ db_config = File.join(File.dirname(__FILE__), 'database.yml') 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 @@ -31,9 +38,15 @@ class UserAccount 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) # ユーザの有無をチェック @@ -52,7 +65,7 @@ class UserAccount 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 @@ -62,6 +75,11 @@ class UserAccount # パスワードをチェックする + # @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) @@ -82,6 +100,9 @@ class UserAccount end # ユーザ情報取得 + # @param [Integer] id 対象ユーザID + # @return [User] ユーザ情報 + # @raise [NotfoundInstanceError] ユーザ情報の取得に失敗 def self.getUser(id) user = User.find_by(user_id: id) if (user == nil) diff --git a/sinatra/start.rb b/sinatra/start.rb index 73971e8..8b3fb6c 100644 --- a/sinatra/start.rb +++ b/sinatra/start.rb @@ -1,10 +1,18 @@ +# 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 -- 2.19.2