diamant 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 78504900d38add8a76be57a468a7e3b86284ef964de1e75a6bc40f614649f78b
4
- data.tar.gz: b0212f1c5b7180d0b7de192ab13c5abe37863d6fd5dbde61d5dea86dfcba3572
3
+ metadata.gz: 5f4a7116de355c0b04280914d27758f287116298d2cde5a36e311382352342b1
4
+ data.tar.gz: 04a5cd38b4596383a220bd553b6e6d1a9360310810156d009f8cad569db9bd01
5
5
  SHA512:
6
- metadata.gz: da679165a67588a03666ad9e12149927bdbaf6cf663165693cc42c26a70ec39f7f0e19a9b61214d27ba6b2c9ec13f64b55f8059a2d49d4a539940b82c9b39d29
7
- data.tar.gz: 814580c5b14c5344b1e2432e7eb078e83c1421b939f11437f6a921f94dec7c066bd8329348d259749dacf7ac033e086d9a1d784773a389e4294b9e6794ef5118
6
+ metadata.gz: e948fce49088c1b5483a18dd4c4dfccfbaefb7b160d4a9ce0fc880a0bf4487c6ded0eda9a3b58de9ad74fe5a05f3922c790716d26789db0a18621381fe6acefe
7
+ data.tar.gz: 1113f9c27f505edcc445b116a3d9dbb900c681a5305b48655d72faee52714a1ca7c4b3b71a7123b80e8f93468ecfcfa88afd5f455e2fc4222adef6e73070fa61
@@ -23,15 +23,15 @@ module Diamant
23
23
  end
24
24
 
25
25
  def write
26
- IO.write('key.rsa', @key.to_pem)
26
+ File.write('key.rsa', @key.to_pem)
27
27
  File.chmod(0o400, 'key.rsa')
28
- IO.write('cert.pem', @cert.to_pem)
28
+ File.write('cert.pem', @cert.to_pem)
29
29
  File.chmod(0o644, 'cert.pem')
30
30
  end
31
31
 
32
32
  private
33
33
 
34
- def init_cert
34
+ def init_cert # rubocop:disable Metrics/AbcSize
35
35
  @cert = OpenSSL::X509::Certificate.new
36
36
  @cert.version = 3
37
37
  @cert.serial = 0x0
@@ -40,7 +40,7 @@ module Diamant
40
40
  @cert.public_key = @key.public_key
41
41
  @cert.not_before = Time.now
42
42
  # 1 years validity
43
- @cert.not_after = @cert.not_before + 1 * 365 * 24 * 60 * 60
43
+ @cert.not_after = @cert.not_before + (1 * 365 * 24 * 60 * 60)
44
44
  @cert
45
45
  end
46
46
 
@@ -34,6 +34,7 @@ module Diamant
34
34
  def extract_info
35
35
  @extension = File.extname @path
36
36
  raise MimeError, "#{@path} format is not supported!" unless supported?
37
+
37
38
  # Any other supported extension
38
39
  @content_type = MIMETYPES[@extension]
39
40
  end
@@ -13,6 +13,7 @@ module Diamant
13
13
  return false if current_load < 11
14
14
  # Seppuku
15
15
  raise 'Server is under heavy load' if current_load > 1965
16
+
16
17
  if current_load > 42
17
18
  @logger.warn '41 - Too much threads...'
18
19
  sock.puts "41 See you soon...\r\n"
@@ -42,12 +43,13 @@ module Diamant
42
43
  end
43
44
  route << '/index.gmi' if File.directory?(route)
44
45
  return ['51 Not found!'] unless File.exist?(route)
46
+
45
47
  build_response route
46
48
  end
47
49
 
48
50
  def build_response(route)
49
51
  info = Diamant::MimeType.new(route)
50
- answer = IO.readlines route, chomp: true
52
+ answer = File.readlines route, chomp: true
51
53
  answer.prepend "20 #{info.content_type}"
52
54
  rescue Diamant::MimeError
53
55
  ['50 Not a supported file!']
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Diamant
4
- VERSION = '0.0.8'
4
+ VERSION = '0.0.9'
5
5
  end
data/lib/diamant.rb CHANGED
@@ -34,13 +34,7 @@ module Diamant
34
34
 
35
35
  def main_loop(ssl_serv)
36
36
  loop do
37
- Thread.new(ssl_serv.accept) do |client|
38
- handle_client(client)
39
- rescue Errno::ECONNRESET, Errno::ENOTCONN => e
40
- @logger.error(e.message)
41
- ensure
42
- client.close
43
- end
37
+ main_loop_tick ssl_serv.accept
44
38
  rescue OpenSSL::SSL::SSLError => e
45
39
  # Do not even try to answer anything as the socket cannot be
46
40
  # built. This will abruptly interrupt the connection from a client
@@ -56,6 +50,17 @@ module Diamant
56
50
  end
57
51
  end
58
52
 
53
+ # Might raises some errors
54
+ def main_loop_tick(connection)
55
+ Thread.new(connection) do |client|
56
+ handle_client(client)
57
+ rescue Errno::ECONNRESET, Errno::ENOTCONN, Errno::ETIMEDOUT => e
58
+ @logger.error(e.message)
59
+ ensure
60
+ client.close
61
+ end
62
+ end
63
+
59
64
  def handle_client(client)
60
65
  current_load = Thread.list.length - 1
61
66
  return if reject_request?(client, current_load)
metadata CHANGED
@@ -1,113 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: diamant
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Étienne Deparis
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-10-20 00:00:00.000000000 Z
11
+ date: 2024-07-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ruby-net-text
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - '='
18
- - !ruby/object:Gem::Version
19
- version: 0.0.9
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - '='
25
- - !ruby/object:Gem::Version
26
- version: 0.0.9
27
- - !ruby/object:Gem::Dependency
28
- name: rspec
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '3.12'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '3.12'
41
- - !ruby/object:Gem::Dependency
42
- name: rubocop
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '1.57'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '1.57'
55
- - !ruby/object:Gem::Dependency
56
- name: rubocop-performance
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '1.19'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '1.19'
69
- - !ruby/object:Gem::Dependency
70
- name: rubocop-rspec
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: '2.24'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: '2.24'
83
- - !ruby/object:Gem::Dependency
84
- name: simplecov
85
15
  requirement: !ruby/object:Gem::Requirement
86
16
  requirements:
87
17
  - - "~>"
88
18
  - !ruby/object:Gem::Version
89
- version: '0.22'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - "~>"
95
- - !ruby/object:Gem::Version
96
- version: '0.22'
97
- - !ruby/object:Gem::Dependency
98
- name: yard
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - "~>"
102
- - !ruby/object:Gem::Version
103
- version: '0.9'
104
- type: :development
19
+ version: '0.1'
20
+ type: :runtime
105
21
  prerelease: false
106
22
  version_requirements: !ruby/object:Gem::Requirement
107
23
  requirements:
108
24
  - - "~>"
109
25
  - !ruby/object:Gem::Version
110
- version: '0.9'
26
+ version: '0.1'
111
27
  description: |
112
28
  Diamant is a server for the Gemini network protocol. It can only serve
113
29
  static files. Internally, it uses the OpenSSL library to handle the TLS
@@ -128,7 +44,11 @@ files:
128
44
  homepage: https://git.umaneti.net/diamant/about/
129
45
  licenses:
130
46
  - WTFPL
131
- metadata: {}
47
+ metadata:
48
+ rubygems_mfa_required: 'true'
49
+ source_code_uri: https://git.umaneti.net/fronde
50
+ homepage_uri: https://etienne.depar.is/fronde/
51
+ funding_uri: https://liberapay.com/milouse
132
52
  post_install_message:
133
53
  rdoc_options: []
134
54
  require_paths:
@@ -144,7 +64,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
144
64
  - !ruby/object:Gem::Version
145
65
  version: '0'
146
66
  requirements: []
147
- rubygems_version: 3.4.20
67
+ rubygems_version: 3.5.15
148
68
  signing_key:
149
69
  specification_version: 4
150
70
  summary: A simple Gemini server for static files.