solutus 0.1.7 → 0.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b04c38164c87829f2c2908ef025b83c2c6c57883bec8c6a0c1a36e96406dbec6
4
- data.tar.gz: 19670e1dec56f403d484b180ee2bdba8bacdf1fc203b8949027e763acb02f08f
3
+ metadata.gz: 615a04274d007c7612352ad3ac5c941de06dea56621269225c1e0cb4f71ff07b
4
+ data.tar.gz: a35acf50ab7948dd020bb8530779fc2ec2f9ad544c6f27626ebb6008610947c5
5
5
  SHA512:
6
- metadata.gz: 6908bc0fe5cc77a11e9547bbd3336bf5a4aac65568e0324cd25837dbd72ee6e5a6a58c21ca4cab353f238cc92d9937af7f99297d0b7a8c4b07d076e3e616e2ff
7
- data.tar.gz: 14475f41fcdf8394a6e1ec48d7150054d8bab94e7990961a6cba580fc84d97157e07363f029b0bbbf5f6b360c932edfa19ea04eaa3c2df1bc9a3c890b0e5e84f
6
+ metadata.gz: 66220afe441695e91441e285cbe68b19655e831a96bb951ea2ba92fb558a2cc3ba40af44be913ceecc6283df1c6d37a6808089fc402252b43497345f246f109c
7
+ data.tar.gz: 619a7e1e9d7cc3e366d04feebc881204d5520133762ef6717cf3cc5cc0969a6e31afa97e5d5a35b7f8b03db4a624f3490404e107d6b2f5b62fe76910215a5b3b
@@ -30,7 +30,7 @@ class Solutus
30
30
  PASSWORD_FILE = "password.txt"
31
31
  DAY_ENDINGS = ["th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th", "th", "st"]
32
32
 
33
- VERSION = '0.1.7'
33
+ VERSION = '0.1.8'
34
34
 
35
35
  LOG_FILE = 'log'
36
36
 
@@ -57,6 +57,7 @@ class Solutus
57
57
 
58
58
  class Solutus_Server < Sinatra::Base
59
59
  CSS = File.read(File.join(File.dirname(File.expand_path(__FILE__)), '../resources', "style.css"))
60
+ FILE_EXCLUDES = ['password.txt', '.gitignore', 'nohup.out', 'log']
60
61
  enable :sessions
61
62
 
62
63
  set :public_folder, SITE_PATH
@@ -146,6 +147,30 @@ class Solutus
146
147
  "saved page @ #{path}"
147
148
  end
148
149
 
150
+ get "/newpage" do
151
+ dir = params['dir']
152
+ filename = params['filename']
153
+ dir = File.join(SITE_PAGES_PATH, dir)
154
+ path = File.join(dir, filename) + '.yml'
155
+ if !File.directory?(dir)
156
+ FileUtils.mkdir_p(dir)
157
+ end
158
+ f = File.new(path, 'w')
159
+ title = 'Page Title'
160
+ text = <<HERE
161
+ template: default
162
+ title: #{title}
163
+ content: |
164
+ <h1>#{title}</h1>
165
+ <p>
166
+ Some Content
167
+ </p>
168
+ HERE
169
+ f.write(text)
170
+ write_log("Created page #{path} from #{request.ip}")
171
+ redirect "/edit"
172
+ end
173
+
149
174
  post "/newpost" do
150
175
  if !session[:verified]
151
176
  return render_login("You were logged out.")
@@ -195,7 +220,11 @@ class Solutus
195
220
  return render_login("You were logged out.")
196
221
  end
197
222
  path = params['path']
198
- render_edit_file(path)
223
+ if File.file?(path)
224
+ render_edit_file(path)
225
+ else
226
+ 'error, not a file'
227
+ end
199
228
  end
200
229
 
201
230
  post "/savefile" do
@@ -203,6 +232,10 @@ class Solutus
203
232
  return 'error'
204
233
  end
205
234
  path = params['path']
235
+ if FILE_EXCLUDES.include?(path.split("/"[-1]))
236
+ write_log("security breach attempt @ #{path} from #{request.ip}")
237
+ return 'security error'
238
+ end
206
239
  content = params['content']
207
240
  f = File.open(path, 'w')
208
241
  f.write(content)
@@ -216,8 +249,8 @@ class Solutus
216
249
  if !session[:verified]
217
250
  return "error"
218
251
  end
219
- Solutus.command("deploy")
220
- "deployed"
252
+ Solutus.command("build")
253
+ "built"
221
254
  end
222
255
 
223
256
  get "/:page" do
@@ -351,6 +384,19 @@ class Solutus
351
384
  settings.global_settings.each do |key, val|
352
385
  result[key.to_sym] = val
353
386
  end
387
+ dirs = Dir.entries(SITE_PAGES_PATH)
388
+ puts dirs
389
+ dir_res = ''
390
+ dirs.each do |d|
391
+ if File.directory?(File.join(SITE_PAGES_PATH, d)) && d != ".."
392
+ val = d + "/"
393
+ if val == '.'
394
+ val = "/"
395
+ end
396
+ dir_res += "<option value='#{d}'>#{val}</option>"
397
+ end
398
+ end
399
+ result[:page_paths] = dir_res
354
400
  result[:blogs] = blog_select
355
401
  result[:pages] = page_select
356
402
  result[:css] = CSS
@@ -375,11 +421,17 @@ class Solutus
375
421
  dirs = [".", "static/css", "templates", "pages/site-pages"]
376
422
  dirs.each do |dir|
377
423
  result += "<optgroup label='#{dir}'>"
378
- files = Dir.entries(dir).select {|f| !File.directory? f}
424
+ if dir == "."
425
+ files = Dir.entries(dir).select {|f| !File.directory? f}
426
+ else
427
+ files = Solutus.relative_path_to_all_files_in_dir(dir)
428
+ end
379
429
  files.each do |filename|
380
- if !['password.txt', '.gitignore', 'nohup.out', 'log'].include?(filename)
430
+ if !FILE_EXCLUDES.include?(filename)
381
431
  path = File.join(dir, filename)
382
- result += "<option value=\"#{path}\">#{filename}</option>\n"
432
+ if File.file?(path)
433
+ result += "<option value=\"#{path}\">#{filename}</option>\n"
434
+ end
383
435
  end
384
436
  end
385
437
  result += "</optgroup>"
@@ -418,7 +470,6 @@ class Solutus
418
470
 
419
471
  def self.command(*args)
420
472
  start_time = Time.now
421
-
422
473
  if args.length >= 1
423
474
  if ["-v", "--version"].include?(args[0])
424
475
  puts VERSION
@@ -588,7 +639,7 @@ HERE
588
639
  end
589
640
 
590
641
  @@page_urls = Array.new
591
- Dir.entries(SITE_PAGES_PATH).each do |entry|
642
+ relative_path_to_all_files_in_dir(SITE_PAGES_PATH).each do |entry|
592
643
  next if entry == "." || entry == ".."
593
644
  puts "Rendering page #{entry}"
594
645
  path = File.join(SITE_PAGES_PATH, entry)
@@ -790,6 +841,21 @@ HERE
790
841
  result
791
842
  end
792
843
 
844
+ def self.relative_path_to_all_files_in_dir(dir)
845
+ result = Array.new
846
+ Dir.entries(dir).each do |entry|
847
+ next if entry == "." || entry == ".."
848
+ path = File.join(dir, entry)
849
+ if File.file?(path)
850
+ result.push(entry)
851
+ elsif File.directory?(path)
852
+ result = result + relative_path_to_all_files_in_dir(path).collect {|x| File.join(entry, x)}
853
+ end
854
+ end
855
+ result
856
+ end
857
+
858
+
793
859
  def self.create_password(password)
794
860
  content = Digest::MD5.hexdigest password
795
861
  if File.file?(PASSWORD_FILE)
@@ -6,9 +6,8 @@
6
6
  <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.38.0/mode/htmlmixed/htmlmixed.js"></script>
7
7
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.38.0/theme/lesser-dark.css">
8
8
  <style type="text/css">
9
-
9
+ {{css}}
10
10
  </style>
11
- {{{stylesheets}}}
12
11
  </head>
13
12
 
14
13
  <body>
@@ -20,7 +19,6 @@
20
19
  <script>
21
20
  var myCodeMirror = CodeMirror.fromTextArea(document.getElementById('editor'), {
22
21
  lineNumbers: true,
23
- styleActiveLine: true,
24
22
  matchBrackets: true,
25
23
  theme: 'lesser-dark'
26
24
  });
@@ -24,6 +24,18 @@
24
24
  </fieldset>
25
25
  </form>
26
26
  </p>
27
+
28
+ <p>
29
+ <form method="get" action="/newpage">
30
+ <fieldset>
31
+ <legend>New Page</legend>
32
+ Page subdirectory:
33
+ <select name='dir'>{{{page_paths}}}</select>
34
+ <p>Page name: <input type='text' name='filename'></p>
35
+ <p><button type="submit">Create page</button></fieldset></p>
36
+ </fieldset>
37
+ </form>
38
+ </p>
27
39
  {{/advanced}}
28
40
  {{^advanced}}
29
41
  <p>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: solutus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jerome Wei