Skip to content

Commit 0e24e59

Browse files
committed
WIP
1 parent 2867ab9 commit 0e24e59

File tree

4 files changed

+100
-1
lines changed

4 files changed

+100
-1
lines changed

api/Gemfile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,14 @@ gem "rails", "~> 7.2.0"
66

77
gem "aws-sdk-s3"
88
gem "base62-rb"
9+
gem "bcrypt_pbkdf"
910
gem "bootsnap", require: false
11+
gem "ed25519"
1012
gem "faraday"
1113
gem "faraday-multipart"
1214
gem "jb"
1315
gem "metabobank_tools", github: "ddbj/metabobank_tools"
16+
gem "net-ssh"
1417
gem "noodles_gff", path: "../noodles_gff-rb"
1518
gem "openid_connect"
1619
gem "pagy"

api/Gemfile.lock

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,8 @@ GEM
120120
aws-eventstream (~> 1, >= 1.0.2)
121121
base62-rb (0.3.1)
122122
base64 (0.2.0)
123+
bcrypt_pbkdf (1.1.1)
124+
bcrypt_pbkdf (1.1.1-arm64-darwin)
123125
bigdecimal (3.1.8)
124126
bindata (2.5.0)
125127
bootsnap (1.18.4)
@@ -141,6 +143,7 @@ GEM
141143
reline (>= 0.3.8)
142144
diff-lcs (1.5.1)
143145
drb (2.2.1)
146+
ed25519 (1.3.0)
144147
email_validator (2.2.4)
145148
activemodel
146149
erubi (1.13.0)
@@ -214,6 +217,7 @@ GEM
214217
timeout
215218
net-smtp (0.5.0)
216219
net-protocol
220+
net-ssh (7.2.3)
217221
nio4r (2.7.3)
218222
nokogiri (1.16.7-aarch64-linux)
219223
racc (~> 1.4)
@@ -424,15 +428,18 @@ PLATFORMS
424428
DEPENDENCIES
425429
aws-sdk-s3
426430
base62-rb
431+
bcrypt_pbkdf
427432
bootsnap
428433
brakeman
429434
climate_control
430435
debug
436+
ed25519
431437
factory_bot_rails
432438
faraday
433439
faraday-multipart
434440
jb
435441
metabobank_tools!
442+
net-ssh
436443
noodles_gff!
437444
openid_connect
438445
pagy

api/app/models/database/dra.rb

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,51 @@ def validate(validation)
5656

5757
class Submitter
5858
def submit(submission)
59-
# do nothing
59+
submitter_id = submission.validation.user.uid
60+
user_id = Dray.submitterdb[:login].where(submitter_id:).get(:usr_id)
61+
62+
Dway.drmdb.transaction isolation: :serializable do
63+
serial = (Dway.drmdb[:submission].where(submitter_id:).max(:serial) || 0) + 1
64+
65+
sub_id = Dway.drmdb[:submission].insert(
66+
usr_id: user_id,
67+
submitter_id:,
68+
serial:,
69+
create_date: Date.current
70+
)
71+
72+
submission_id = "#{submitter_id}-#{serial.to_s.rjust(4, '0')}"
73+
74+
Dway.drmdb[:status_history].insert(
75+
sub_id:,
76+
status: 100 # SubmissionStatus.NEW
77+
)
78+
79+
Dway.drmdb[:operation_history].insert(
80+
type: 3, # LogLevel.INFO
81+
summary: "Status update to new",
82+
usr_id: user_id,
83+
serial:,
84+
submitter_id:
85+
)
86+
87+
ext_id = Dway.drmdb[:ext_entity].insert(
88+
acc_type: "DRA",
89+
ref_name: submission_id,
90+
status: 0 # ExtStatus.INPUTTING
91+
)
92+
93+
Dway.drmdb[:ext_permit].insert(
94+
ext_id:,
95+
submitter_id:
96+
)
97+
98+
host, user, key_data = ENV.values_at("DRA_SSH_HOST", "DRA_SSH_USER", "DRA_SSH_KEY_DATA")
99+
100+
Net::SSH.start host, user, key_data: [ key_data ] do |ssh|
101+
ssh.exec! "sudo /usr/local/sbin/chroot-createdir.sh #{submitter_id} #{submission_id}"
102+
end
103+
end
60104
end
61105
end
62106
end
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
require 'rails_helper'
2+
3+
RSpec.describe Database::DRA::Submitter, type: :model do
4+
example do
5+
submission = create(:submission, {
6+
validation: build(:validation, :valid, {
7+
user: build(:user, uid: 'alice')
8+
})
9+
})
10+
11+
user_id = Dway.submitterdb[:login].insert(
12+
submitter_id: 'alice',
13+
password: 'password',
14+
)
15+
16+
expect(Net::SSH).to receive(:start)
17+
18+
Database::DRA::Submitter.new.submit submission
19+
20+
expect(Dway.drmdb[:submission].count).to eq(1)
21+
22+
dway_submission = Dway.drmdb[:submission].first
23+
expect(dway_submission).to include(usr_id: user_id, submitter_id: 'alice', serial: 1)
24+
25+
expect(Dway.drmdb[:status_history].count).to eq(1)
26+
27+
status_history = Dway.drmdb[:status_history].first
28+
expect(status_history).to include(sub_id: dway_submission[:sub_id], status: 100)
29+
30+
expect(Dway.drmdb[:operation_history].count).to eq(1)
31+
32+
operation_history = Dway.drmdb[:operation_history].first
33+
expect(operation_history).to include(type: 3, summary: 'Status update to new', usr_id: user_id, serial: 1, submitter_id: 'alice')
34+
35+
expect(Dway.drmdb[:ext_entity].count).to eq(1)
36+
37+
ext_entity = Dway.drmdb[:ext_entity].first
38+
expect(ext_entity).to include(acc_type: 'DRA', ref_name: 'alice-0001', status: 0)
39+
40+
expect(Dway.drmdb[:ext_permit].count).to eq(1)
41+
42+
ext_permit = Dway.drmdb[:ext_permit].first
43+
expect(ext_permit).to include(ext_id: ext_entity[:ext_id], submitter_id: 'alice')
44+
end
45+
end

0 commit comments

Comments
 (0)