decidim-bulletin_board 0.3.1 → 0.4.0
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/Gemfile.lock +2 -1
- data/decidim-bulletin_board.gemspec +3 -3
- data/lib/decidim/bulletin_board.rb +2 -2
- data/lib/decidim/bulletin_board/authority.rb +4 -0
- data/lib/decidim/bulletin_board/authority/create_election.rb +53 -0
- data/lib/decidim/bulletin_board/client.rb +1 -1
- data/lib/decidim/bulletin_board/message_identifier.rb +86 -0
- data/lib/decidim/bulletin_board/version.rb +1 -1
- metadata +16 -26
- data/lib/decidim/bulletin_board/create_election.rb +0 -51
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6a143d34d670d822c82a6f08abaa0f90faf4e9312875cba0a9117faa09679e5f
|
4
|
+
data.tar.gz: 27b4d187001dd0aa3ed497bb6c4d21138b794075e91faace0eae5fa8c2738d50
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aebd18c91bc774fc539fc87940fb5da309217e3850770e3b0e4f751d35222295e43eca3f1f0d8702730ffed582f2676f192e4142d2f092b9185f162ff12b9644
|
7
|
+
data.tar.gz: a458ac71cc856888dff79c2c5e2504e14cd2ef9191a74025fca344e9598ee691740cb29481932ddb9bc71467e6504a1457349ca4c47bc11f5f96d41027b10c33
|
data/Gemfile.lock
CHANGED
@@ -23,11 +23,11 @@ Gem::Specification.new do |s|
|
|
23
23
|
s.executables = s.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
24
24
|
s.require_paths = ["lib"]
|
25
25
|
|
26
|
-
s.add_dependency "activemodel", "
|
27
|
-
s.add_dependency "activesupport", "
|
26
|
+
s.add_dependency "activemodel", ">= 5.0.0"
|
27
|
+
s.add_dependency "activesupport", ">= 5.0.0"
|
28
28
|
s.add_dependency "byebug", "~> 11.0"
|
29
29
|
s.add_dependency "graphlient", "~> 0.4.0"
|
30
|
-
s.add_dependency "jwt"
|
30
|
+
s.add_dependency "jwt", "~> 2.2.2"
|
31
31
|
s.add_dependency "wisper", "~> 2.0.0"
|
32
32
|
|
33
33
|
s.add_development_dependency "rake", "~> 13.0"
|
@@ -5,11 +5,11 @@ require "graphlient"
|
|
5
5
|
require "wisper"
|
6
6
|
require "active_model"
|
7
7
|
require "decidim/bulletin_board/jwk_utils"
|
8
|
+
require "decidim/bulletin_board/message_identifier"
|
8
9
|
require "decidim/bulletin_board/client"
|
9
10
|
require "decidim/bulletin_board/graphql/client"
|
10
|
-
require "decidim/bulletin_board/create_election"
|
11
11
|
require "decidim/bulletin_board/voter"
|
12
|
-
require "decidim/bulletin_board/authority
|
12
|
+
require "decidim/bulletin_board/authority"
|
13
13
|
require "active_support/configurable"
|
14
14
|
require "jwt"
|
15
15
|
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module BulletinBoard
|
5
|
+
module Authority
|
6
|
+
# This class handles the creation of an election.
|
7
|
+
class CreateElection
|
8
|
+
def initialize(election_data, message_id)
|
9
|
+
@client = BulletinBoard::Graphql::Client.client
|
10
|
+
@election_data = election_data
|
11
|
+
@message_id = message_id
|
12
|
+
@private_key = private_key
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.call(election_data, message_id)
|
16
|
+
new(election_data, message_id).call
|
17
|
+
end
|
18
|
+
|
19
|
+
def call
|
20
|
+
args = {
|
21
|
+
message_id: message_id,
|
22
|
+
signed_data: encode_data(election_data)
|
23
|
+
}
|
24
|
+
|
25
|
+
response = client.query do
|
26
|
+
mutation do
|
27
|
+
createElection(messageId: args[:message_id], signedData: args[:signed_data]) do
|
28
|
+
election do
|
29
|
+
status
|
30
|
+
end
|
31
|
+
error
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
response.data.create_election
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
attr_reader :client, :election_data, :message_id
|
42
|
+
|
43
|
+
def private_key
|
44
|
+
@private_key ||= JwkUtils.import_private_key(BulletinBoard.identification_private_key)
|
45
|
+
end
|
46
|
+
|
47
|
+
def encode_data(election_data)
|
48
|
+
JWT.encode(election_data, private_key.keypair, "RS256")
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -40,7 +40,7 @@ module Decidim
|
|
40
40
|
|
41
41
|
def setup_election(election_data)
|
42
42
|
message_id = "#{election_data[:election_id]}.create_election+a.#{authority_slug}"
|
43
|
-
Decidim::BulletinBoard::CreateElection.call(election_data, message_id)
|
43
|
+
Decidim::BulletinBoard::Authority::CreateElection.call(election_data, message_id)
|
44
44
|
end
|
45
45
|
|
46
46
|
def cast_vote(election_data, voter_data, encrypted_vote)
|
@@ -0,0 +1,86 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module BulletinBoard
|
5
|
+
class MessageIdentifier
|
6
|
+
AUTHOR_TYPE = {
|
7
|
+
a: :authority,
|
8
|
+
b: :bulletin_board,
|
9
|
+
t: :trustee,
|
10
|
+
v: :voter
|
11
|
+
}.freeze
|
12
|
+
|
13
|
+
INVERTED_AUTHOR_TYPE = AUTHOR_TYPE.invert.freeze
|
14
|
+
|
15
|
+
def initialize(message_id)
|
16
|
+
@message_id = message_id
|
17
|
+
end
|
18
|
+
|
19
|
+
def from_authority?
|
20
|
+
author_type == :authority
|
21
|
+
end
|
22
|
+
|
23
|
+
def from_trustee?
|
24
|
+
author_type == :trustee
|
25
|
+
end
|
26
|
+
|
27
|
+
def from_voter?
|
28
|
+
author_type == :voter
|
29
|
+
end
|
30
|
+
|
31
|
+
def author_type
|
32
|
+
@author_type ||= AUTHOR_TYPE[author.first.to_sym]
|
33
|
+
end
|
34
|
+
|
35
|
+
def author_id
|
36
|
+
@author_id ||= author.last
|
37
|
+
end
|
38
|
+
|
39
|
+
def authority_id
|
40
|
+
@authority_id ||= elements[0]
|
41
|
+
end
|
42
|
+
|
43
|
+
def election_id
|
44
|
+
@election_id = elements[0..1].join(".")
|
45
|
+
end
|
46
|
+
|
47
|
+
def type
|
48
|
+
@type = elements[2]
|
49
|
+
end
|
50
|
+
|
51
|
+
def subtype
|
52
|
+
@subtype = elements[3]
|
53
|
+
end
|
54
|
+
|
55
|
+
def to_s
|
56
|
+
@message_id
|
57
|
+
end
|
58
|
+
|
59
|
+
class << self
|
60
|
+
def format(unique_election_id, type_subtype, author_type, author_id)
|
61
|
+
"#{unique_election_id}.#{type_subtype}+#{INVERTED_AUTHOR_TYPE[author_type]}.#{author_id}"
|
62
|
+
end
|
63
|
+
|
64
|
+
def unique_election_id(authority_slug, election_id)
|
65
|
+
"#{authority_slug}.#{election_id}"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
private
|
70
|
+
|
71
|
+
attr_accessor :message_id
|
72
|
+
|
73
|
+
def elements
|
74
|
+
@elements ||= parts.first.split(".", 4)
|
75
|
+
end
|
76
|
+
|
77
|
+
def author
|
78
|
+
@author ||= parts.last.split(".", 2)
|
79
|
+
end
|
80
|
+
|
81
|
+
def parts
|
82
|
+
@parts ||= message_id.split("+")
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
metadata
CHANGED
@@ -1,56 +1,44 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: decidim-bulletin_board
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Morcillo
|
8
8
|
- Svenja Schäfer
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2020-12-
|
12
|
+
date: 2020-12-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activemodel
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- - "~>"
|
19
|
-
- !ruby/object:Gem::Version
|
20
|
-
version: '5.0'
|
21
18
|
- - ">="
|
22
19
|
- !ruby/object:Gem::Version
|
23
|
-
version: 5.0.0
|
20
|
+
version: 5.0.0
|
24
21
|
type: :runtime
|
25
22
|
prerelease: false
|
26
23
|
version_requirements: !ruby/object:Gem::Requirement
|
27
24
|
requirements:
|
28
|
-
- - "~>"
|
29
|
-
- !ruby/object:Gem::Version
|
30
|
-
version: '5.0'
|
31
25
|
- - ">="
|
32
26
|
- !ruby/object:Gem::Version
|
33
|
-
version: 5.0.0
|
27
|
+
version: 5.0.0
|
34
28
|
- !ruby/object:Gem::Dependency
|
35
29
|
name: activesupport
|
36
30
|
requirement: !ruby/object:Gem::Requirement
|
37
31
|
requirements:
|
38
|
-
- - "~>"
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '5.0'
|
41
32
|
- - ">="
|
42
33
|
- !ruby/object:Gem::Version
|
43
|
-
version: 5.0.0
|
34
|
+
version: 5.0.0
|
44
35
|
type: :runtime
|
45
36
|
prerelease: false
|
46
37
|
version_requirements: !ruby/object:Gem::Requirement
|
47
38
|
requirements:
|
48
|
-
- - "~>"
|
49
|
-
- !ruby/object:Gem::Version
|
50
|
-
version: '5.0'
|
51
39
|
- - ">="
|
52
40
|
- !ruby/object:Gem::Version
|
53
|
-
version: 5.0.0
|
41
|
+
version: 5.0.0
|
54
42
|
- !ruby/object:Gem::Dependency
|
55
43
|
name: byebug
|
56
44
|
requirement: !ruby/object:Gem::Requirement
|
@@ -83,16 +71,16 @@ dependencies:
|
|
83
71
|
name: jwt
|
84
72
|
requirement: !ruby/object:Gem::Requirement
|
85
73
|
requirements:
|
86
|
-
- - "
|
74
|
+
- - "~>"
|
87
75
|
- !ruby/object:Gem::Version
|
88
|
-
version:
|
76
|
+
version: 2.2.2
|
89
77
|
type: :runtime
|
90
78
|
prerelease: false
|
91
79
|
version_requirements: !ruby/object:Gem::Requirement
|
92
80
|
requirements:
|
93
|
-
- - "
|
81
|
+
- - "~>"
|
94
82
|
- !ruby/object:Gem::Version
|
95
|
-
version:
|
83
|
+
version: 2.2.2
|
96
84
|
- !ruby/object:Gem::Dependency
|
97
85
|
name: wisper
|
98
86
|
requirement: !ruby/object:Gem::Requirement
|
@@ -186,11 +174,13 @@ files:
|
|
186
174
|
- bin/setup
|
187
175
|
- decidim-bulletin_board.gemspec
|
188
176
|
- lib/decidim/bulletin_board.rb
|
177
|
+
- lib/decidim/bulletin_board/authority.rb
|
178
|
+
- lib/decidim/bulletin_board/authority/create_election.rb
|
189
179
|
- lib/decidim/bulletin_board/authority/get_election_status.rb
|
190
180
|
- lib/decidim/bulletin_board/client.rb
|
191
|
-
- lib/decidim/bulletin_board/create_election.rb
|
192
181
|
- lib/decidim/bulletin_board/graphql/client.rb
|
193
182
|
- lib/decidim/bulletin_board/jwk_utils.rb
|
183
|
+
- lib/decidim/bulletin_board/message_identifier.rb
|
194
184
|
- lib/decidim/bulletin_board/version.rb
|
195
185
|
- lib/decidim/bulletin_board/voter.rb
|
196
186
|
- lib/decidim/bulletin_board/voter/cast_vote.rb
|
@@ -199,7 +189,7 @@ homepage: https://github.com
|
|
199
189
|
licenses:
|
200
190
|
- AGPL-3.0
|
201
191
|
metadata: {}
|
202
|
-
post_install_message:
|
192
|
+
post_install_message:
|
203
193
|
rdoc_options: []
|
204
194
|
require_paths:
|
205
195
|
- lib
|
@@ -215,7 +205,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
215
205
|
version: '0'
|
216
206
|
requirements: []
|
217
207
|
rubygems_version: 3.0.3
|
218
|
-
signing_key:
|
208
|
+
signing_key:
|
219
209
|
specification_version: 4
|
220
210
|
summary: ''
|
221
211
|
test_files: []
|
@@ -1,51 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Decidim
|
4
|
-
module BulletinBoard
|
5
|
-
# This class handles the creation of an election.
|
6
|
-
class CreateElection
|
7
|
-
def initialize(election_data, message_id)
|
8
|
-
@client = BulletinBoard::Graphql::Client.client
|
9
|
-
@election_data = election_data
|
10
|
-
@message_id = message_id
|
11
|
-
@private_key = private_key
|
12
|
-
end
|
13
|
-
|
14
|
-
def self.call(election_data, message_id)
|
15
|
-
new(election_data, message_id).call
|
16
|
-
end
|
17
|
-
|
18
|
-
def call
|
19
|
-
args = {
|
20
|
-
message_id: message_id,
|
21
|
-
signed_data: encode_data(election_data)
|
22
|
-
}
|
23
|
-
|
24
|
-
response = client.query do
|
25
|
-
mutation do
|
26
|
-
createElection(messageId: args[:message_id], signedData: args[:signed_data]) do
|
27
|
-
election do
|
28
|
-
status
|
29
|
-
end
|
30
|
-
error
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
response.data.create_election
|
36
|
-
end
|
37
|
-
|
38
|
-
private
|
39
|
-
|
40
|
-
attr_reader :client, :election_data, :message_id
|
41
|
-
|
42
|
-
def private_key
|
43
|
-
@private_key ||= JwkUtils.import_private_key(BulletinBoard.identification_private_key)
|
44
|
-
end
|
45
|
-
|
46
|
-
def encode_data(election_data)
|
47
|
-
JWT.encode(election_data, private_key.keypair, "RS256")
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|