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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 834f029e86c9fad845c573cc2c72e6294767de95193f985e7d6d79997e616b30
4
- data.tar.gz: 44c6711314e297ca4b876b6ef535f0443acfe66e1c5dfda93bc7307a1529dc69
3
+ metadata.gz: 6a143d34d670d822c82a6f08abaa0f90faf4e9312875cba0a9117faa09679e5f
4
+ data.tar.gz: 27b4d187001dd0aa3ed497bb6c4d21138b794075e91faace0eae5fa8c2738d50
5
5
  SHA512:
6
- metadata.gz: 2ac8ef1bee39287b22c036c4f2abfd69c7e7922884295b44a87696be2be68e56e9392646774bcfe8f6ccf5b3c7fdcf0164a2f95499bdb7165598316b6b46d4cf
7
- data.tar.gz: ff16f63812d6cb53fbb2126ce2bbd9debf5aec15f8f5728d0ed74a7f715d1f657401a21011b198646c4e02e7988af22e56f61b3cc50d69fc6aa810661a145036
6
+ metadata.gz: aebd18c91bc774fc539fc87940fb5da309217e3850770e3b0e4f751d35222295e43eca3f1f0d8702730ffed582f2676f192e4142d2f092b9185f162ff12b9644
7
+ data.tar.gz: a458ac71cc856888dff79c2c5e2504e14cd2ef9191a74025fca344e9598ee691740cb29481932ddb9bc71467e6504a1457349ca4c47bc11f5f96d41027b10c33
@@ -100,6 +100,7 @@ GEM
100
100
 
101
101
  PLATFORMS
102
102
  ruby
103
+ x86_64-linux
103
104
 
104
105
  DEPENDENCIES
105
106
  decidim-bulletin_board!
@@ -112,4 +113,4 @@ DEPENDENCIES
112
113
  wisper-rspec (~> 1.1.0)
113
114
 
114
115
  BUNDLED WITH
115
- 2.1.4
116
+ 2.2.0
@@ -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", "~> 5.0", ">= 5.0.0.1"
27
- s.add_dependency "activesupport", "~> 5.0", ">= 5.0.0.1"
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/get_election_status"
12
+ require "decidim/bulletin_board/authority"
13
13
  require "active_support/configurable"
14
14
  require "jwt"
15
15
 
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "decidim/bulletin_board/authority/create_election"
4
+ require "decidim/bulletin_board/authority/get_election_status"
@@ -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
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Decidim
4
4
  module BulletinBoard
5
- VERSION = "0.3.1"
5
+ VERSION = "0.4.0"
6
6
  end
7
7
  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.3.1
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-10 00:00:00.000000000 Z
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.1
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.1
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.1
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.1
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: '0'
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: '0'
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