--- /dev/null
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1, minimal-ui">
+ <title>Markdown preview</title>
+ <link rel="stylesheet" type="text/css" href="http://thomasf.github.io/solarized-css/solarized-dark.min.css">
+ <script src="http://code.jquery.com/jquery-1.12.4.min.js"></script>
+
+ <script>
+ (function($, undefined) {
+ var socket = new WebSocket("ws://localhost:7379");
+ socket.onopen = function() {
+ console.log("Connection established.");
+ socket.send("MDPM-Register-UUID: 3cb46385-5b3d-454f-be06-14c04b2d5607");
+ };
+ socket.onclose = function(event) {
+ if (event.wasClean) {
+ console.log('Connection closed gracefully.');
+ } else {
+ console.log('Connection terminated.');
+ }
+ console.log('Code: ' + event.code + ' reason: ' + event.reason);
+ };
+ socket.onmessage = function(event) {
+ $("#markdown-body").html($(event.data).find("#content").html()).trigger('mdContentChange');
+ var scroll = $(document).height() * ($(event.data).find("#position-percentage").html() / 100);
+ $("html, body").animate({ scrollTop: scroll }, 600);
+ };
+ socket.onerror = function(error) {
+ console.log("Error: " + error.message);
+ };
+ })(jQuery);
+ </script>
+ </head>
+ <body>
+ <article id="markdown-body" class="markdown-body">
+ <p>Markdown preview</p>
+ </article>
+ </body>
+</html>
# 蔵書管理サーバ(book_server)
+## 実装機能
+ * ユーザ登録
+ * ISDNによる書籍検索
+
## ファイル構成
``` text
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
```
# 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
--- /dev/null
+development:
+ adapter: mysql2
+ database:
+ host:
+ username:
+ password:
+ encoding: utf8
+
--- /dev/null
+# 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
--- /dev/null
+- # 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
+
+
+
+
+
+
+
+
+