From 5deb20e26430f39f164878402299f5f5df8a19a6 Mon Sep 17 00:00:00 2001 From: Kyle Drake Date: Sun, 2 Jun 2013 23:08:48 -0700 Subject: [PATCH] Basic creation of initial site --- app.rb | 42 +++++++++++++++++++++++++++++++++- models/site.rb | 3 ++- views/new.slim | 2 +- views/templates/index.slim | 5 ++++ views/templates/not_found.slim | 5 ++++ 5 files changed, 54 insertions(+), 3 deletions(-) create mode 100644 views/templates/index.slim create mode 100644 views/templates/not_found.slim diff --git a/app.rb b/app.rb index c7513990..5711ce1a 100644 --- a/app.rb +++ b/app.rb @@ -5,6 +5,24 @@ use Rack::Session::Cookie, key: 'neocities', expire_after: 31556926, # one year in seconds secret: $config['session_secret'] +get %r{.+} do + subname = request.host.match /[\w-]+/ + pass if subname.nil? + subname = subname.to_s + pass if subname == 'www' || subname == 'neocities' || subname == 'testneocities' + + base_path = site_base_path subname + path = File.join(base_path, (request.path =~ /\/$/ ? (request.path + 'index.html') : request.path)) + + if File.exist?(path) + send_file path + else + send_file File.join(base_path, 'not_found.html') + end + + send_file path +end + get '/' do dashboard_if_signed_in slim :index @@ -28,8 +46,22 @@ end post '/create' do dashboard_if_signed_in @site = Site.new username: params[:username], password: params[:password], email: params[:email], new_tags: params[:tags] + if @site.valid? - DB.transaction { @site.save } + + base_path = site_base_path @site.username + + DB.transaction { + @site.save + + begin + FileUtils.mkdir base_path + rescue Errno::EEXIST + end + + File.write File.join(base_path, 'index.html'), slim(:'templates/index', pretty: true, layout: false) + File.write File.join(base_path, 'not_found.html'), slim(:'templates/not_found', pretty: true, layout: false) + } session[:id] = @site.id redirect '/dashboard' @@ -70,4 +102,12 @@ end def current_site @site ||= Site[id: session[:id]] +end + +def site_base_path(subname) + File.join settings.public_folder, 'sites', subname +end + +def template_site_title(username) + "#{username.capitalize}#{username[username.length-1] == 's' ? "'" : "'s"} Site" end \ No newline at end of file diff --git a/models/site.rb b/models/site.rb index fa9d9740..a4ebda9e 100644 --- a/models/site.rb +++ b/models/site.rb @@ -1,5 +1,6 @@ class Site < Sequel::Model MINIMUM_PASSWORD_LENGTH = 5 + USERNAME_REGEX = /[^\w-]/i many_to_one :server many_to_many :tags @@ -59,7 +60,7 @@ class Site < Sequel::Model errors.add :over_capacity, 'We are currently at capacity, and cannot create your home page. We will fix this shortly. Please come back later and try again, our apologies.' end - if values[:username].nil? || values[:username].empty? || values[:username].match(/[^\w.-]/i) + if values[:username].nil? || values[:username].empty? || values[:username].match(USERNAME_REGEX) errors.add :username, 'A valid username is required.' end diff --git a/views/new.slim b/views/new.slim index 6f70da5b..bc99ca10 100644 --- a/views/new.slim +++ b/views/new.slim @@ -14,7 +14,7 @@ .row .span6 - p First, enter a username. This will also be used as your site path.
Do not forget this, it will be used to sign in to and manage your home page.
It cannot contain spaces, and can only use the following characters: a-z A-Z 0-9 . _ - + p First, enter a username. This will also be used as your site path.
Do not forget this, it will be used to sign in to and manage your home page.
It cannot contain spaces, and can only use the following characters: a-z A-Z 0-9 _ - .row .span1 diff --git a/views/templates/index.slim b/views/templates/index.slim new file mode 100644 index 00000000..faff87fb --- /dev/null +++ b/views/templates/index.slim @@ -0,0 +1,5 @@ +html + head + title #{template_site_title @site.username} - Front Page + body + p This is a new page! Coming soon. \ No newline at end of file diff --git a/views/templates/not_found.slim b/views/templates/not_found.slim new file mode 100644 index 00000000..58178574 --- /dev/null +++ b/views/templates/not_found.slim @@ -0,0 +1,5 @@ +html + head + title #{template_site_title @site.username} - Not Found + body + p The requested page was not found. \ No newline at end of file