diamant 0.0.8 → 0.0.9
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 +4 -4
- data/lib/diamant/cert_generator.rb +4 -4
- data/lib/diamant/mimetype.rb +1 -0
- data/lib/diamant/response.rb +3 -1
- data/lib/diamant/version.rb +1 -1
- data/lib/diamant.rb +12 -7
- metadata +11 -91
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5f4a7116de355c0b04280914d27758f287116298d2cde5a36e311382352342b1
|
4
|
+
data.tar.gz: 04a5cd38b4596383a220bd553b6e6d1a9360310810156d009f8cad569db9bd01
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
26
|
+
File.write('key.rsa', @key.to_pem)
|
27
27
|
File.chmod(0o400, 'key.rsa')
|
28
|
-
|
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
|
|
data/lib/diamant/mimetype.rb
CHANGED
data/lib/diamant/response.rb
CHANGED
@@ -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 =
|
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!']
|
data/lib/diamant/version.rb
CHANGED
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
|
-
|
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.
|
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:
|
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.
|
90
|
-
type: :
|
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.
|
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.
|
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.
|