decidim-bulletin_board 0.3.1 → 0.4.0

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: 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