From e11996b23c5c0d0a1e4eba7d7036a289a9d037d0 Mon Sep 17 00:00:00 2001 From: "OHASHI, Norikazu" Date: Wed, 24 Apr 2019 22:13:32 +0900 Subject: [PATCH] =?utf8?q?=E3=83=A6=E3=83=BC=E3=82=B6=E6=83=85=E5=A0=B1?= =?utf8?q?=E4=BF=AE=E6=AD=A3=E3=82=92Hush=E3=81=A7=E8=A1=8C=E3=81=86?= =?utf8?q?=E3=82=88=E3=81=86=E3=81=AB=E5=AF=BE=E5=BF=9C=20sidebar=E3=81=AE?= =?utf8?q?=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E5=88=86=E5=89=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- readme.md | 2 +- sinatra/app/controllers/web_gui.rb | 6 ++-- sinatra/app/models/users_db.rb | 52 +++++++++++++++++------------ sinatra/app/views/layout.haml | 34 +++++-------------- sinatra/app/views/main.haml | 2 +- sinatra/app/views/sidebar.haml | 23 +++++++++++++ sinatra/public/favicon.ico | Bin 0 -> 4286 bytes 7 files changed, 68 insertions(+), 51 deletions(-) create mode 100644 sinatra/app/views/sidebar.haml create mode 100644 sinatra/public/favicon.ico diff --git a/readme.md b/readme.md index 6b16fb5..bdc5b0b 100644 --- a/readme.md +++ b/readme.md @@ -85,7 +85,7 @@ | 1 | key_hash | VARCHAR(60) | NOT NULL, PRIMARY KEY | SHA125 HASH (アクセスキー) | | 2 | isbn | VARCHAR(14) | NOT NULL, UNIQUE | 対象ISBN | | 3 | mime_type | VARCHAR(255) | NOT NULL | 画像のMIME TYPE | -| 4 | shadow | LARGETEXT | NOT NULL | 画像のデータ(BASE64) | +| 4 | shadow | LONGBLOB | NOT NULL | 画像のデータ | | 5 | creat_at | DATETIME | NOT NULL | 登録日時 | | 6 | update_at | DATETIME | NOT NULL | 更新日時 | diff --git a/sinatra/app/controllers/web_gui.rb b/sinatra/app/controllers/web_gui.rb index 8819a4b..f064e82 100644 --- a/sinatra/app/controllers/web_gui.rb +++ b/sinatra/app/controllers/web_gui.rb @@ -135,6 +135,7 @@ class WebGui < Sinatra::Base # @post_param new_pass [String] 新パスワード # @post_param full_name [String] フルネーム # @post_param email [String] Eメール + # @raise [WebError] セッションの期限切れ # @raise [WebError] ユーザ情報編集失敗 post '/user_edit' do id = session[:userId] @@ -154,10 +155,9 @@ class WebGui < Sinatra::Base raise StandardError, "アカウント名とIDが不正" end end - UserAccount.changeUser(id, new_pass, full_name, email) + UserAccount.changeUser(id, passwd: new_pass, full_name: full_name, email: email) redirect "/user_home" - rescue StandardError, - UserAccount::NotFoundInstanceError, + rescue UserAccount::NotFoundInstanceError, UserAccount::AuthenticationError raise WebError.new(statu: 400, message: "ユーザ情報の編集に失敗しました。", refs: "/user_edit") end diff --git a/sinatra/app/models/users_db.rb b/sinatra/app/models/users_db.rb index 5d17800..74749c7 100644 --- a/sinatra/app/models/users_db.rb +++ b/sinatra/app/models/users_db.rb @@ -40,7 +40,6 @@ end # ユーザ管理 class UserAccount - # ユーザ認証エラー class AuthenticationError < SecurityError @@ -157,32 +156,32 @@ class UserAccount # ユーザ情報の変更 # @param [Integer] id 変更対象のユーザID - # @param [String] passwd 変更するパスワード (未修正の場合は空文字列) - # @param [String] full_name 変更するフルネーム (未修正の場合は空文字列) - # @param [String] email 変更するEメールアドレス (未修正の場合は空文字列) - def self.changeUser(id, passwd, full_name, email) + # @param [Hash] columns 変更するカラムと値のハッシュ + + def self.changeUser(id, columns) user = User.find_by(user_id: id) change_f = false if (user == nil) raise NotFoundInstanceError end - # パスワード更新 - if (passwd != "") - user.passwd_hash = BCrypt::Engine.hash_secret(passwd, user.passwd_salt) - change_f = true - end - - # フルネーム更新 - if ((full_name != "") && (full_name != user.full_name) ) - user.full_name = full_name - change_f = true - end - - # Eメール更新 - if ((email != "") && (email != user.email)) - user.email = email - change_f = true + columns.each do |key, value| + if ((value == nil) || (value == "")) + # 値がない、値が空文字の場合は対象としない。 + next + end + if (key == :passwd) + # パスワード更新 + user.passwd_hash = BCrypt::Engine.hash_secret(value, user.passwd_salt) + change_f = true + else + if (value != user.send(key)) + # その他のステータス、値が異なれば更新 + method = key.to_s + "=" + user.send(method, value) + change_f = true + end + end end # 更新内容の適用 @@ -192,4 +191,15 @@ class UserAccount end end + # ユーザ情報の削除 + def deleteUser(id) + user = User.find_by(id: id) + if (user == nil) + raise NotFoundInstanceError + end + if (not user.destroy) + raise DbAccessError + end + end + end diff --git a/sinatra/app/views/layout.haml b/sinatra/app/views/layout.haml index c92384d..3908d7f 100644 --- a/sinatra/app/views/layout.haml +++ b/sinatra/app/views/layout.haml @@ -1,11 +1,9 @@ - # encoding: utf-8 - if @username != nil - - title_name = @username+"書籍" - - id = @id + - title_name = @username+" 蔵書管理 " - user_name = @username - - is_admin = @is_admin - else - - title_name = "書籍一覧管理" + - title_name = "蔵書管理 Web" !!! %html %head{ :lang => 'ja' } @@ -20,27 +18,13 @@ #main1= yield - else #head - #{user_name} 書籍一覧 + #{user_name} 蔵書管理 Home #center #sidebar - %a{ :href => "/user_home" } - ホーム - %br - %a{ :href => "/book_list" } - 書籍一覧 - %br - - if is_admin - %a{ :href => "/user_list" } - ユーザ情報変更 - - else - %a{ :href => "/user_edit" } - ユーザ情報変更 - %br - %a{ :href => "/logout" } - ログアウト + = haml :sidebar #main2= yield - #foot - %p - 連絡先: - %a{ :href => 'mailto:support@book_server.neko-mori.org' } - support@book_server.neko-mori.org + #foot + %p + 連絡先: + %a{ :href => 'mailto:support@book_server.neko-mori.org' } + support@book_server.neko-mori.org diff --git a/sinatra/app/views/main.haml b/sinatra/app/views/main.haml index 1089886..9a3e0dc 100644 --- a/sinatra/app/views/main.haml +++ b/sinatra/app/views/main.haml @@ -1,7 +1,7 @@ - # encoding: utf-8 %h1 - 蔵書管理サーバ + 蔵書管理 Web v0.01 .buttoms .buttoms__push diff --git a/sinatra/app/views/sidebar.haml b/sinatra/app/views/sidebar.haml new file mode 100644 index 0000000..0a3dab5 --- /dev/null +++ b/sinatra/app/views/sidebar.haml @@ -0,0 +1,23 @@ +- # encoding: utf-8 +- is_admin = @is_admin + +.side_item + %a{ :href => "/user_home" } + ホーム +.side_item + %a{ :href => "/book_list" } + 書籍一覧 +.side_item + %a{ :href => "/book_regist" } + 書籍登録 +.side_item + - if is_admin + %a{ :href => "/user_list" } + ユーザ情報変更 + - else + %a{ :href => "/user_edit" } + ユーザ情報変更 + +.side_item + %a{ :href => "/logout" } + ログアウト diff --git a/sinatra/public/favicon.ico b/sinatra/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..abe7eaaa9f42eae1ecc982ca6b1955c4877b6eb9 GIT binary patch literal 4286 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 J?|