From 04a56f1824ab746599a058b1551b4ebcf3d9a824 Mon Sep 17 00:00:00 2001 From: "OHASHI, Norikazu" Date: Sat, 16 Mar 2019 14:40:41 +0900 Subject: [PATCH] =?utf8?q?=E3=83=A6=E3=83=BC=E3=82=B6=E3=83=BCDB=E5=91=A8?= =?utf8?q?=E3=82=8A=E3=81=AE=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .markdown-preview.html | 41 +++++++++++++++ readme.md | 7 ++- sinatra/app/controllers/web_gui.rb | 65 ++++++++++++++++++----- sinatra/app/models/database.yml | 8 +++ sinatra/app/models/users_db.rb | 83 ++++++++++++++++++++++++++++++ sinatra/app/views/layout.haml | 39 ++++++++++++++ 6 files changed, 229 insertions(+), 14 deletions(-) create mode 100644 .markdown-preview.html create mode 100644 sinatra/app/models/database.yml create mode 100644 sinatra/app/models/users_db.rb create mode 100644 sinatra/app/views/layout.haml diff --git a/.markdown-preview.html b/.markdown-preview.html new file mode 100644 index 0000000..f0fc0f0 --- /dev/null +++ b/.markdown-preview.html @@ -0,0 +1,41 @@ + + + + + + Markdown preview + + + + + + +
+

Markdown preview

+
+ + diff --git a/readme.md b/readme.md index 0cca57b..d28c8e5 100644 --- a/readme.md +++ b/readme.md @@ -1,5 +1,9 @@ # 蔵書管理サーバ(book_server) +## 実装機能 + * ユーザ登録 + * ISDNによる書籍検索 + ## ファイル構成 ``` text @@ -28,8 +32,7 @@ list.erb # list of books view search.erb # search books view detail.erb # detail of book parameter view - find_isbn.erb # search books parameter with - isbn view + find_isbn.erb # search books parameter with isbn view setup.erb # setup book parameter view ``` diff --git a/sinatra/app/controllers/web_gui.rb b/sinatra/app/controllers/web_gui.rb index ce8bc08..c7dbdad 100644 --- a/sinatra/app/controllers/web_gui.rb +++ b/sinatra/app/controllers/web_gui.rb @@ -1,37 +1,78 @@ # coding: utf-8 require 'sinatra/base' +require 'sinatra' +require 'sinatra/cookies' +require 'haml' +require 'sass' +require 'digest/sha1' + +# ユーザアクセス用モデル +require '../models/users_db' class WebGui < Sinatra::Base set :root, File.join(File.dirname(__FILE__), '..') - set :views, Proc.new {File.join(root, "view")} + set :views, Proc.new {File.join(root, "views")} - #main page + before do + set :haml, :format => :html5 + end + + # main page get '/' do - erb :main + haml :main end - #signup page + # signup page get '/signup' do - erb :signup + @salt = Digest::SHA1.hexdigest("#{DateTime.now.to_s}") + haml :signup end + # signup post '/signup' do - # ユーザ登録処理呼び出し - erb :user_home + name = params[:name] + full_name = params[:full_name] + email = params[:email] + passwd_hash = params[:passwd_hash] + passwd_salt = params[:salt] + + id = UserAccount.createAccount(name, full_name, email, passwd_hash, passwd_salt) + + redirect "/user_home/#{id}" end get '/login' do - erb :login + haml :login end post '/login' do - # パスワード認証呼び出し - erb :user_home + user_name = params[:name] + id, salt = UserAccount.gelSalt(user_name); + @id = id + @salt = salt + halm :check_passwd + end + + post '/check_passwd/:id' do + id = params[:id] + passwd_hash = params[:passwd_hash] + id = UserAccount.checkPasswd(id, passwd_hash); + + redirect "/user_home/#{id}" + end + + get '/user_home/:id' do + id = params[:id] + user = UserAccount.getUser(id) + @id = id + @username = user.user_name + haml :user_home end get '/logout' do # 最終ログイン情報登録 - erb :logout -end + haml :logout + end +end diff --git a/sinatra/app/models/database.yml b/sinatra/app/models/database.yml new file mode 100644 index 0000000..5373a94 --- /dev/null +++ b/sinatra/app/models/database.yml @@ -0,0 +1,8 @@ +development: + adapter: mysql2 + database: + host: + username: + password: + encoding: utf8 + diff --git a/sinatra/app/models/users_db.rb b/sinatra/app/models/users_db.rb new file mode 100644 index 0000000..46b32f0 --- /dev/null +++ b/sinatra/app/models/users_db.rb @@ -0,0 +1,83 @@ +# coding: utf-8 + +require 'active_record' +require 'mysql2' + +# DB設定ファイルの読み込み +ActiveRecord::Base.cofigurations = YAML.load_file('database.yml') +ActiveRecord::Base.establish_connection(:development) + +class Users < ActiveRecord::Base +end + + +class UserAccount + + # 認証エラー + class AuthenticationError < SecurityError + end + + # すでに存在している + class AlreadyInstanceError < StandardError + end + + # 存在していない + class NotfondInstanceError < StandardError + end + + # DBアクセス失敗 + class DbAccessError < StandardError + end + + role[:admin] = 1 + role[:normal] = 8 + # ユーザアカウントを作成 + def self.createAccount(name, full_name, email, passwd_hash, passwd_salt) + user = Users.new + if (User.find_by(:user_name, name) != nil) + raise AlreadyInstanceError + end + user.user_name = name + user.full_name = full_name + user.email = email + user.passwd_hash = passwd_hash + user.passwd_salt = passwd_salt + user.role = role[:normal] + user.create_at = DateTime.now + user.update_at = DateTime.now + user.save + return user.id + end + + # パスワード用SALTを取得する + def self.getSalt(name) + user = Users.find_by(:user_name, name) + if (user == nil) + raise NotfondInstanceError + end + + return user.user_id, user.passwd_salt + end + + #パスワードハッシュをチェックする + def self.checkPasswd(id, passwd_hash) + user = Users.find_by(:user_id, id) + if (user == nil) + raise NotfondInstanceError + end + + if (user.passwd_hash != passwd_hash) + raise AuthenticationError + end + + return id + end + def self.getUser(id) + user = Users.find_by(:user_id, id) + if (user == nil) + raise NotfondInstanceError + end + return user + end + +end diff --git a/sinatra/app/views/layout.haml b/sinatra/app/views/layout.haml new file mode 100644 index 0000000..60ee733 --- /dev/null +++ b/sinatra/app/views/layout.haml @@ -0,0 +1,39 @@ +- # encoding: utf-8 +- if @username != nil + - title_name = @username+"書籍" + - id = @id + - user_name = @username +- else + - title_name = "書籍一覧管理" +!!! +%html + %head{ :lang => 'ja' } + %meta{ :charset => 'utf-8'} + %title= #{title_name} + %link{ :rel => 'stylesheet', :href => '/style.css'} + %body + + - if @username != nil + #title= yield + - else + #head + @username 書籍一覧 + #center + #sidebar + %a{ :href => '/user_home/#{id}' } + ホーム + %a{ :href => '/book_list/#{id}'} + 書籍一覧 + %a{ :href => '/user_info/#{id}'} + ユーザ情報 + #main= yield + #foot + + + + + + + + + -- 2.19.2