From de1d57a67b9cf946643ec671e751315097aa7ba9 Mon Sep 17 00:00:00 2001 From: Yaser Date: Thu, 13 Aug 2026 19:56:46 +0330 Subject: [PATCH] Initial commit --- .codeclimate.yml | 73 + .dockerignore | 10 + .drone.yml | 408 +++ .gitattributes | 1 + .gitignore | 36 + .rspec | 1 + .ruby-version | 1 + CHANGELOG.md | 2056 +++++++++++++ Dockerfile | 35 + Dockerfile.deps | 35 + Gemfile | 125 + Gemfile.lock | 541 ++++ LICENSE.md | 202 ++ README.md | 113 + Rakefile | 7 + VERSION | 1 + app/api/base.rb | 9 + app/api/v2/admin/abilities.rb | 17 + app/api/v2/admin/activities.rb | 61 + app/api/v2/admin/api_keys.rb | 41 + app/api/v2/admin/base.rb | 62 + .../v2/admin/entities/activity_with_user.rb | 49 + app/api/v2/admin/entities/admin_activity.rb | 50 + app/api/v2/admin/entities/document.rb | 15 + app/api/v2/admin/entities/phone.rb | 13 + app/api/v2/admin/entities/profile.rb | 32 + app/api/v2/admin/entities/user_with_kyc.rb | 11 + .../v2/admin/entities/user_with_profile.rb | 9 + app/api/v2/admin/levels.rb | 52 + app/api/v2/admin/metrics.rb | 50 + app/api/v2/admin/named_params.rb | 35 + app/api/v2/admin/permissions.rb | 146 + app/api/v2/admin/profiles.rb | 148 + app/api/v2/admin/restrictions.rb | 177 ++ app/api/v2/admin/users.rb | 699 +++++ app/api/v2/base.rb | 73 + app/api/v2/entities/activity.rb | 53 + app/api/v2/entities/admin_label_view.rb | 36 + app/api/v2/entities/api_key.rb | 43 + app/api/v2/entities/base.rb | 12 + app/api/v2/entities/comment.rb | 39 + app/api/v2/entities/data_storage.rb | 27 + app/api/v2/entities/document.rb | 55 + app/api/v2/entities/label.rb | 30 + app/api/v2/entities/level.rb | 27 + app/api/v2/entities/permission.rb | 50 + app/api/v2/entities/phone.rb | 30 + app/api/v2/entities/profile.rb | 85 + app/api/v2/entities/restriction.rb | 48 + app/api/v2/entities/service_accounts.rb | 44 + app/api/v2/entities/treasury.rb | 44 + app/api/v2/entities/user.rb | 60 + app/api/v2/entities/user_with_full_info.rb | 80 + app/api/v2/entities/user_with_kyc.rb | 74 + app/api/v2/entities/user_with_profile.rb | 64 + app/api/v2/exception_handlers.rb | 45 + app/api/v2/identity/base.rb | 18 + app/api/v2/identity/general.rb | 48 + app/api/v2/identity/sessions.rb | 176 ++ app/api/v2/identity/users.rb | 405 +++ app/api/v2/identity/utils.rb | 161 + app/api/v2/management/api_keys.rb | 110 + app/api/v2/management/base.rb | 58 + app/api/v2/management/documents.rb | 70 + app/api/v2/management/entities/document.rb | 12 + app/api/v2/management/entities/phone.rb | 13 + app/api/v2/management/entities/profile.rb | 19 + .../v2/management/entities/user_with_kyc.rb | 11 + .../management/entities/user_with_profile.rb | 9 + .../management/exceptions/authentication.rb | 13 + app/api/v2/management/exceptions/base.rb | 22 + .../jwt_authentication_middleware.rb | 93 + app/api/v2/management/labels.rb | 132 + app/api/v2/management/otp.rb | 40 + app/api/v2/management/phones.rb | 74 + app/api/v2/management/profiles.rb | 47 + app/api/v2/management/service_accounts.rb | 113 + app/api/v2/management/tools.rb | 15 + app/api/v2/management/users.rb | 168 + app/api/v2/named_params.rb | 33 + app/api/v2/public/base.rb | 15 + app/api/v2/public/general.rb | 63 + app/api/v2/queries/activity_filter.rb | 66 + app/api/v2/queries/user_filter.rb | 64 + app/api/v2/queries/user_with_label_filter.rb | 47 + app/api/v2/resource/addresses.rb | 50 + app/api/v2/resource/api_keys.rb | 159 + app/api/v2/resource/base.rb | 36 + app/api/v2/resource/data_storage.rb | 39 + app/api/v2/resource/documents.rb | 78 + app/api/v2/resource/labels.rb | 127 + app/api/v2/resource/otp.rb | 220 ++ app/api/v2/resource/phones.rb | 267 ++ app/api/v2/resource/profiles.rb | 255 ++ app/api/v2/resource/service_accounts.rb | 186 ++ app/api/v2/resource/users.rb | 210 ++ app/api/v2/resource/utils.rb | 64 + app/api/v2/utils.rb | 38 + app/api/v2/validations.rb | 77 + app/assets/config/manifest.js | 3 + app/assets/images/.keep | 0 app/assets/javascripts/application.js | 15 + app/assets/javascripts/cable.js | 13 + app/assets/javascripts/channels/.keep | 0 app/assets/stylesheets/application.css | 15 + app/channels/application_cable/channel.rb | 4 + app/channels/application_cable/connection.rb | 4 + app/controllers/application_controller.rb | 2 + app/controllers/authorize_controller.rb | 100 + app/controllers/concerns/.keep | 0 app/helpers/application_helper.rb | 2 + app/helpers/salted_crc32.rb | 7 + app/jobs/application_job.rb | 2 + app/mailers/application_mailer.rb | 4 + app/mailers/postmaster.rb | 23 + app/models/ability.rb | 18 + app/models/activity.rb | 52 + app/models/admin_ability.rb | 17 + app/models/api_key.rb | 90 + app/models/application_record.rb | 6 + app/models/city.rb | 32 + app/models/comment.rb | 24 + app/models/concerns/.keep | 0 app/models/concerns/data_is_json_validator.rb | 21 + app/models/concerns/encryptable.rb | 25 + app/models/concerns/iso8601_time_format.rb | 11 + app/models/concerns/model_caching.rb | 23 + app/models/concerns/trusty_agent_validator.rb | 13 + app/models/data_storage.rb | 41 + app/models/document.rb | 100 + app/models/label.rb | 142 + app/models/level.rb | 43 + app/models/permission.rb | 35 + app/models/phone.rb | 142 + app/models/profile.rb | 182 ++ app/models/province.rb | 21 + app/models/restriction.rb | 56 + app/models/service_account.rb | 93 + app/models/treasury.rb | 129 + app/models/user.rb | 287 ++ app/services/api_keys_verifier.rb | 17 + app/services/captcha_service.rb | 66 + app/services/encryption_service.rb | 75 + app/services/event_mailer.rb | 219 ++ app/services/jibit_service.rb | 110 + app/services/kave_negar_sms_service.rb | 43 + app/services/kyc_service.rb | 65 + app/services/mock_phone_verify_service.rb | 24 + app/services/password_strength_checker.rb | 23 + app/services/secret_storage.rb | 57 + app/services/totp_service.rb | 96 + app/services/totp_service_action.rb | 104 + app/services/twilio_sms_send_service.rb | 28 + app/services/twilio_verify_service.rb | 35 + app/services/uid_generator.rb | 10 + app/uploaders/ali_uploader.rb | 21 + app/uploaders/upload_uploader.rb | 39 + app/views/layouts/application.html.erb | 15 + app/views/layouts/mailer.html.erb | 127 + app/views/layouts/mailer.text.erb | 1 + .../postmaster/deposit_accepted.en.html.erb | 55 + .../postmaster/email_confirmation.en.html.erb | 73 + .../postmaster/email_confirmation.ru.html.erb | 73 + .../email_confirmation_code.en.html.erb | 97 + ..._otp_disable_confirmation_code.en.html.erb | 73 + ...l_otp_enable_confirmation_code.en.html.erb | 73 + app/views/postmaster/label.en.html.erb | 76 + .../postmaster/new_beneficiary.en.html.erb | 55 + .../otp_confirmation_code.en.html.erb | 73 + .../password_confirmation_code.en.html.erb | 73 + .../postmaster/password_reset.en.html.erb | 97 + .../postmaster/password_reset.ru.html.erb | 73 + .../postmaster/session_create.en.html.erb | 61 + .../postmaster/session_failed.en.html.erb | 61 + .../withdraw_confirmation_code.en.html.erb | 73 + .../postmaster/withdraw_succeed.en.html.erb | 55 + app/workers/kyc/local/owner_mobile_worker.rb | 18 + app/workers/kyc/local/treasury_worker.rb | 22 + bin/bundle | 3 + bin/cloudflare | 26 + bin/gendocs | 57 + bin/init_config | 15 + bin/init_vault | 7 + bin/install_plugins | 18 + bin/link_config | 15 + bin/mailer | 28 + bin/rails | 9 + bin/rake | 9 + bin/setup | 36 + bin/update | 31 + config.ru | 19 + config/abilities.yml | 49 + config/amqp.yml | 111 + config/application.rb | 40 + config/authz_rules.yml | 18 + config/backend.yml | 76 + config/barong.yml | 53 + config/boot.rb | 4 + config/cable.yml | 10 + config/credentials.yml.enc | 1 + config/database.yml | 20 + config/environment.rb | 5 + config/environments/development.rb | 63 + config/environments/production.rb | 106 + config/environments/test.rb | 46 + config/initializers/api_pagination.rb | 27 + .../application_controller_renderer.rb | 8 + config/initializers/assets.rb | 14 + config/initializers/backtrace_silencers.rb | 7 + config/initializers/barong.rb | 157 + config/initializers/barong_config.rb | 17 + config/initializers/carrierwave.rb | 60 + .../initializers/content_security_policy.rb | 25 + config/initializers/cookies_serializer.rb | 7 + config/initializers/document_types.rb | 14 + config/initializers/event_api.rb | 7 + config/initializers/exception_reporting.rb | 25 + .../initializers/filter_parameter_logging.rb | 4 + config/initializers/inflections.rb | 16 + config/initializers/jwt.rb | 26 + .../kavenegar-ruby_initializer.rb | 18 + config/initializers/mime_types.rb | 4 + config/initializers/open_uri.rb | 4 + config/initializers/phone.rb | 50 + config/initializers/redis.rb | 12 + config/initializers/redis_store.rb | 27 + config/initializers/sessions_store.rb | 4 + config/initializers/sidekiq.rb | 9 + config/initializers/trusted_proxies.rb | 8 + config/initializers/user_storage_titles.rb | 10 + config/initializers/vault.rb | 42 + config/initializers/versioning.rb | 12 + config/initializers/wrap_parameters.rb | 14 + config/locales/en.yml | 33 + config/management_api_v1.yml | 54 + config/plugins.yml | 22 + config/puma.rb | 37 + config/routes.rb | 4 + config/spring.rb | 6 + config/storage.yml | 34 + config/templates/management_api_v1.yml.erb | 54 + config/templates/plugins.yml.erb | 22 + .../20181101143041_create_all_tables.rb | 81 + .../20181115100105_create_activities.rb | 15 + ...08115333_add_referral_id_to_users_table.rb | 8 + .../20190318133453_create_permissions.rb | 13 + ...90529114214_changes_in_activities_table.rb | 10 + .../20190813112503_create_restrictions.rb | 12 + ...827080317_add_data_field_to_users_table.rb | 5 + .../20190902032709_add_state_profiles.rb | 5 + .../20191122151630_create_data_storages.rb | 12 + ...0191210090006_add_description_to_labels.rb | 5 + ...130_add_default_state_to_profiles_table.rb | 5 + ...add_code_and_type_in_restrictions_table.rb | 6 + .../20200507104423_add_encrypted_secret.rb | 5 + ...08_add_identificator_to_documents_table.rb | 7 + .../20200602075906_add_author_to_profiles.rb | 5 + db/migrate/20200609144734_create_comments.rb | 13 + ...701115721_add_doc_category_to_documents.rb | 5 + .../20200902125225_make_api_key_kid_unique.rb | 18 + ...dd_service_accounts_and_related_changes.rb | 50 + ...ted_values_to_phones_profiles_documents.rb | 57 + ...1112814_change_document_fields_position.rb | 11 + ...10218135634_change_owner_id_requirement.rb | 9 + ...413065736_add_national_code_to_profiles.rb | 5 + .../20210418085508_create_treasuries.rb | 21 + db/migrate/20210420111532_create_provinces.rb | 12 + db/migrate/20210420111629_create_cities.rb | 14 + .../20210420113539_change_city_in_profile.rb | 5 + .../20210425062048_add_step_to_phone.rb | 13 + .../20210714111301_add_state_to_documents.rb | 9 + ...64241_remove_index_data_from_treasuries.rb | 7 + db/schema.rb | 213 ++ db/seeds.rb | 14 + db/structure.sql | 266 ++ docs/api/barong_admin_api_v2.md | 976 ++++++ docs/api/barong_management_api_v2.md | 678 ++++ docs/api/barong_user_api_v2.md | 1317 ++++++++ docs/api/swagger/admin_api.json | 2731 +++++++++++++++++ docs/api/swagger/management_api.json | 1685 ++++++++++ docs/api/swagger/user_api.json | 1 + docs/configuration.md | 194 ++ docs/development/mailer.md | 39 + docs/general/2fa.md | 70 + docs/general/activities.md | 35 + docs/general/api-keys.md | 142 + docs/general/auth0.md | 48 + docs/general/captcha.md | 32 + docs/general/encryption.md | 46 + docs/general/errors.md | 179 ++ docs/general/event_api.md | 593 ++++ docs/general/password_hashing.md | 71 + docs/general/profiles.md | 45 + docs/images/amqp-mailer-schema.jpg | Bin 0 -> 57159 bytes docs/images/api-keys-1.jpeg | Bin 0 -> 40734 bytes docs/images/api-keys-2.jpeg | Bin 0 -> 71144 bytes docs/images/auth0_dashboard.png | Bin 0 -> 192279 bytes docs/images/auth0_pkce.png | Bin 0 -> 228065 bytes docs/images/auth0_settings.png | Bin 0 -> 211416 bytes docs/images/mailer-retry.jpg | Bin 0 -> 30023 bytes docs/kycaid.md | 47 + docs/mailer.md | 239 ++ docs/migrations/2_6_migration.md | 64 + docs/migrations/postgresql.md | 9 + docs/releases/2.1.0.md | 85 + docs/releases/2.3.0.md | 114 + docs/restrictions.md | 51 + docs/roadmap.md | 32 + docs/security.md | 55 + docs/service_accounts.md | 13 + docs/tasks/import.md | 23 + docs/troubleshooting.md | 24 + docs/vault.md | 135 + docs/zagros/2fa/2fa.md | 104 + docs/zagros/Dalan-document.pdf | Bin 0 -> 20127 bytes .../KYC-steps/level-one/access-mobile.md | 95 + .../KYC-steps/level-one/bank-information.md | 45 + .../KYC-steps/level-one/personal-info.md | 38 + docs/zagros/KYC-steps/level-two/landline.md | 91 + .../KYC-steps/level-two/mobile-ownership.md | 42 + docs/zagros/KYC-steps/level-two/residence.md | 72 + docs/zagros/KYC-steps/level-two/selfie.md | 38 + docs/zagros/KYC-steps/leveling.md | 78 + docs/zagros/admin/KYC-confirm.md | 38 + docs/zagros/admin/treasury-list.md | 28 + .../zagros/change-password/change-password.md | 63 + docs/zagros/reset-password/reset-password.md | 53 + docs/zagros/sign-up/sign-up.md | 56 + docs/zagros/uploader/uploader.md | 31 + geolite/COPYRIGHT.txt | 1 + geolite/GeoLite2-Country.mmdb | Bin 0 -> 4220684 bytes geolite/LICENSE.txt | 3 + lib/assets/.keep | 0 lib/barong/activity_logger.rb | 81 + lib/barong/amqp/config.rb | 61 + lib/barong/amqp/queue.rb | 45 + lib/barong/app.rb | 91 + lib/barong/auth0/jwt.rb | 34 + lib/barong/authorize.rb | 259 ++ lib/barong/cors/validations.rb | 35 + lib/barong/event_api.rb | 235 ++ lib/barong/geo_ip.rb | 29 + lib/barong/json_log_formatter.rb | 8 + lib/barong/jwt.rb | 50 + lib/barong/keystore.rb | 49 + lib/barong/middleware.rb | 8 + lib/barong/middleware/jwt_authenticator.rb | 46 + lib/barong/mock_sms.rb | 19 + lib/barong/seed.rb | 191 ++ lib/barong/string.rb | 49 + lib/tasks/activities.rake | 27 + lib/tasks/auto_annotate_models.rake | 53 + lib/tasks/docker.rake | 8 + lib/tasks/export.rake | 29 + lib/tasks/generate.rake | 42 + lib/tasks/import.rake | 71 + lib/tasks/mailer.rake | 23 + lib/tasks/migrate.rake | 46 + lib/tasks/permissions.rake | 15 + lib/tasks/rotate.rake | 24 + lib/tasks/superadmin.rake | 52 + log/.keep | 0 public/404.html | 67 + public/422.html | 67 + public/500.html | 66 + public/apple-touch-icon-precomposed.png | 0 public/apple-touch-icon.png | 0 public/favicon.ico | 0 public/logo.png | Bin 0 -> 2482 bytes public/robots.txt | 1 + scripts/benchmark/phones.rb | 49 + scripts/benchmark/profiles.rb | 55 + scripts/verify-security-pins.sh | 74 + spec/api/base_spec.rb | 11 + spec/api/v2/admin/abilities_spec.rb | 39 + spec/api/v2/admin/activities_spec.rb | 145 + spec/api/v2/admin/api_keys_spec.rb | 105 + spec/api/v2/admin/levels_spec.rb | 39 + spec/api/v2/admin/metrics_spec.rb | 49 + spec/api/v2/admin/permissions_spec.rb | 144 + spec/api/v2/admin/profiles_spec.rb | 211 ++ spec/api/v2/admin/restrictions_spec.rb | 202 ++ spec/api/v2/admin/users_spec.rb | 1176 +++++++ spec/api/v2/auth/audit_spec.rb | 307 ++ spec/api/v2/auth/auth_spec.rb | 366 +++ spec/api/v2/auth/csrf_spec.rb | 138 + spec/api/v2/auth/rbac_spec.rb | 144 + spec/api/v2/auth/restriction_spec.rb | 196 ++ spec/api/v2/auth/sessions_spec.rb | 158 + spec/api/v2/cors/cors_spec.rb | 141 + spec/api/v2/cors/validations_spec.rb | 82 + spec/api/v2/entities/activities_spec.rb | 20 + spec/api/v2/entities/labels_spec.rb | 17 + spec/api/v2/entities/user_with_full_spec.rb | 27 + spec/api/v2/identity/general_spec.rb | 41 + spec/api/v2/identity/sessions_spec.rb | 462 +++ spec/api/v2/identity/users_spec.rb | 717 +++++ spec/api/v2/management/api_keys_spec.rb | 374 +++ spec/api/v2/management/documents_spec.rb | 101 + .../jwt_authentication_middleware_spec.rb | 115 + spec/api/v2/management/labels_spec.rb | 304 ++ spec/api/v2/management/otp_spec.rb | 96 + spec/api/v2/management/phones_spec.rb | 319 ++ spec/api/v2/management/profiles_spec.rb | 134 + .../v2/management/service_accounts_spec.rb | 373 +++ spec/api/v2/management/users_spec.rb | 556 ++++ spec/api/v2/public/general_spec.rb | 41 + spec/api/v2/queries/activity_filter_spec.rb | 22 + spec/api/v2/resource/addresses_spec.rb | 135 + spec/api/v2/resource/api_keys_spec.rb | 263 ++ spec/api/v2/resource/data_storage_spec.rb | 58 + spec/api/v2/resource/documents_spec.rb | 288 ++ spec/api/v2/resource/labels_spec.rb | 88 + spec/api/v2/resource/otp_spec.rb | 129 + spec/api/v2/resource/phones_spec.rb | 469 +++ spec/api/v2/resource/profiles_spec.rb | 572 ++++ spec/api/v2/resource/service_accounts_spec.rb | 297 ++ spec/api/v2/resource/users_spec.rb | 270 ++ spec/factories/activity.rb | 14 + spec/factories/api_keys.rb | 18 + spec/factories/document.rb | 15 + spec/factories/label.rb | 10 + spec/factories/level.rb | 9 + spec/factories/permission.rb | 10 + spec/factories/phones.rb | 8 + spec/factories/profile.rb | 15 + spec/factories/restriction.rb | 8 + spec/factories/service_account.rb | 13 + spec/factories/user.rb | 36 + spec/fixtures/files/documents_test.jpg | Bin 0 -> 128519 bytes spec/initializers/data_storage_titles_spec.rb | 21 + spec/initializers/document_types.spec.rb | 26 + spec/lib/barong/jwt_spec.rb | 16 + spec/lib/barong/seed_spec.rb | 404 +++ spec/mailers/postmaster_spec.rb | 40 + spec/mailers/previews/mailer_preview.rb | 6 + spec/models/ability_spec.rb | 70 + spec/models/activity_spec.rb | 65 + spec/models/api_key_spec.rb | 124 + spec/models/document_spec.rb | 108 + spec/models/label_spec.rb | 252 ++ spec/models/level_spec.rb | 7 + spec/models/phone_spec.rb | 41 + spec/models/profile_spec.rb | 385 +++ spec/models/restrictions_spec.rb | 86 + spec/models/user_spec.rb | 409 +++ spec/rails_helper.rb | 74 + spec/services/encryption_service_spec.rb | 154 + spec/services/event_mailer_spec.rb | 97 + spec/services/vault_totp_spec.rb | 148 + spec/spec_helper.rb | 161 + spec/support/api_helpers.rb | 105 + spec/support/bearer_context.rb | 14 + spec/support/factory_bot.rb | 5 + spec/support/geoip_context.rb | 31 + spec/support/helper.rb | 10 + spec/workers/address_worker_spec.rb | 93 + spec/workers/applicant_worker_spec.rb | 90 + spec/workers/document_worker_spec.rb | 93 + spec/workers/verification_worker_spec.rb | 87 + storage/.keep | 0 test.rb | 24 + test/application_system_test_case.rb | 5 + test/controllers/.keep | 0 test/fixtures/.keep | 0 test/fixtures/files/.keep | 0 test/helpers/.keep | 0 test/integration/.keep | 0 test/mailers/.keep | 0 test/models/.keep | 0 test/system/.keep | 0 test/test_helper.rb | 10 + tmp/.keep | 0 vendor/.keep | 0 474 files changed, 43185 insertions(+) create mode 100644 .codeclimate.yml create mode 100644 .dockerignore create mode 100644 .drone.yml create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 .rspec create mode 100644 .ruby-version create mode 100644 CHANGELOG.md create mode 100644 Dockerfile create mode 100644 Dockerfile.deps create mode 100644 Gemfile create mode 100644 Gemfile.lock create mode 100644 LICENSE.md create mode 100644 README.md create mode 100644 Rakefile create mode 100644 VERSION create mode 100644 app/api/base.rb create mode 100644 app/api/v2/admin/abilities.rb create mode 100644 app/api/v2/admin/activities.rb create mode 100644 app/api/v2/admin/api_keys.rb create mode 100644 app/api/v2/admin/base.rb create mode 100644 app/api/v2/admin/entities/activity_with_user.rb create mode 100644 app/api/v2/admin/entities/admin_activity.rb create mode 100644 app/api/v2/admin/entities/document.rb create mode 100644 app/api/v2/admin/entities/phone.rb create mode 100644 app/api/v2/admin/entities/profile.rb create mode 100644 app/api/v2/admin/entities/user_with_kyc.rb create mode 100644 app/api/v2/admin/entities/user_with_profile.rb create mode 100644 app/api/v2/admin/levels.rb create mode 100644 app/api/v2/admin/metrics.rb create mode 100644 app/api/v2/admin/named_params.rb create mode 100644 app/api/v2/admin/permissions.rb create mode 100644 app/api/v2/admin/profiles.rb create mode 100644 app/api/v2/admin/restrictions.rb create mode 100644 app/api/v2/admin/users.rb create mode 100644 app/api/v2/base.rb create mode 100644 app/api/v2/entities/activity.rb create mode 100644 app/api/v2/entities/admin_label_view.rb create mode 100644 app/api/v2/entities/api_key.rb create mode 100644 app/api/v2/entities/base.rb create mode 100644 app/api/v2/entities/comment.rb create mode 100644 app/api/v2/entities/data_storage.rb create mode 100644 app/api/v2/entities/document.rb create mode 100644 app/api/v2/entities/label.rb create mode 100644 app/api/v2/entities/level.rb create mode 100644 app/api/v2/entities/permission.rb create mode 100644 app/api/v2/entities/phone.rb create mode 100644 app/api/v2/entities/profile.rb create mode 100644 app/api/v2/entities/restriction.rb create mode 100644 app/api/v2/entities/service_accounts.rb create mode 100644 app/api/v2/entities/treasury.rb create mode 100644 app/api/v2/entities/user.rb create mode 100644 app/api/v2/entities/user_with_full_info.rb create mode 100644 app/api/v2/entities/user_with_kyc.rb create mode 100644 app/api/v2/entities/user_with_profile.rb create mode 100644 app/api/v2/exception_handlers.rb create mode 100644 app/api/v2/identity/base.rb create mode 100644 app/api/v2/identity/general.rb create mode 100644 app/api/v2/identity/sessions.rb create mode 100644 app/api/v2/identity/users.rb create mode 100644 app/api/v2/identity/utils.rb create mode 100644 app/api/v2/management/api_keys.rb create mode 100644 app/api/v2/management/base.rb create mode 100644 app/api/v2/management/documents.rb create mode 100644 app/api/v2/management/entities/document.rb create mode 100644 app/api/v2/management/entities/phone.rb create mode 100644 app/api/v2/management/entities/profile.rb create mode 100644 app/api/v2/management/entities/user_with_kyc.rb create mode 100644 app/api/v2/management/entities/user_with_profile.rb create mode 100644 app/api/v2/management/exceptions/authentication.rb create mode 100644 app/api/v2/management/exceptions/base.rb create mode 100644 app/api/v2/management/jwt_authentication_middleware.rb create mode 100644 app/api/v2/management/labels.rb create mode 100644 app/api/v2/management/otp.rb create mode 100644 app/api/v2/management/phones.rb create mode 100644 app/api/v2/management/profiles.rb create mode 100644 app/api/v2/management/service_accounts.rb create mode 100644 app/api/v2/management/tools.rb create mode 100644 app/api/v2/management/users.rb create mode 100644 app/api/v2/named_params.rb create mode 100644 app/api/v2/public/base.rb create mode 100644 app/api/v2/public/general.rb create mode 100644 app/api/v2/queries/activity_filter.rb create mode 100644 app/api/v2/queries/user_filter.rb create mode 100644 app/api/v2/queries/user_with_label_filter.rb create mode 100644 app/api/v2/resource/addresses.rb create mode 100644 app/api/v2/resource/api_keys.rb create mode 100644 app/api/v2/resource/base.rb create mode 100644 app/api/v2/resource/data_storage.rb create mode 100644 app/api/v2/resource/documents.rb create mode 100644 app/api/v2/resource/labels.rb create mode 100644 app/api/v2/resource/otp.rb create mode 100644 app/api/v2/resource/phones.rb create mode 100644 app/api/v2/resource/profiles.rb create mode 100644 app/api/v2/resource/service_accounts.rb create mode 100644 app/api/v2/resource/users.rb create mode 100644 app/api/v2/resource/utils.rb create mode 100644 app/api/v2/utils.rb create mode 100644 app/api/v2/validations.rb create mode 100644 app/assets/config/manifest.js create mode 100644 app/assets/images/.keep create mode 100644 app/assets/javascripts/application.js create mode 100644 app/assets/javascripts/cable.js create mode 100644 app/assets/javascripts/channels/.keep create mode 100644 app/assets/stylesheets/application.css create mode 100644 app/channels/application_cable/channel.rb create mode 100644 app/channels/application_cable/connection.rb create mode 100644 app/controllers/application_controller.rb create mode 100644 app/controllers/authorize_controller.rb create mode 100644 app/controllers/concerns/.keep create mode 100644 app/helpers/application_helper.rb create mode 100644 app/helpers/salted_crc32.rb create mode 100644 app/jobs/application_job.rb create mode 100644 app/mailers/application_mailer.rb create mode 100644 app/mailers/postmaster.rb create mode 100644 app/models/ability.rb create mode 100644 app/models/activity.rb create mode 100644 app/models/admin_ability.rb create mode 100644 app/models/api_key.rb create mode 100644 app/models/application_record.rb create mode 100644 app/models/city.rb create mode 100644 app/models/comment.rb create mode 100644 app/models/concerns/.keep create mode 100644 app/models/concerns/data_is_json_validator.rb create mode 100644 app/models/concerns/encryptable.rb create mode 100644 app/models/concerns/iso8601_time_format.rb create mode 100644 app/models/concerns/model_caching.rb create mode 100644 app/models/concerns/trusty_agent_validator.rb create mode 100644 app/models/data_storage.rb create mode 100644 app/models/document.rb create mode 100644 app/models/label.rb create mode 100644 app/models/level.rb create mode 100644 app/models/permission.rb create mode 100644 app/models/phone.rb create mode 100644 app/models/profile.rb create mode 100644 app/models/province.rb create mode 100644 app/models/restriction.rb create mode 100644 app/models/service_account.rb create mode 100644 app/models/treasury.rb create mode 100644 app/models/user.rb create mode 100644 app/services/api_keys_verifier.rb create mode 100644 app/services/captcha_service.rb create mode 100644 app/services/encryption_service.rb create mode 100644 app/services/event_mailer.rb create mode 100644 app/services/jibit_service.rb create mode 100644 app/services/kave_negar_sms_service.rb create mode 100644 app/services/kyc_service.rb create mode 100644 app/services/mock_phone_verify_service.rb create mode 100644 app/services/password_strength_checker.rb create mode 100644 app/services/secret_storage.rb create mode 100644 app/services/totp_service.rb create mode 100644 app/services/totp_service_action.rb create mode 100644 app/services/twilio_sms_send_service.rb create mode 100644 app/services/twilio_verify_service.rb create mode 100644 app/services/uid_generator.rb create mode 100644 app/uploaders/ali_uploader.rb create mode 100644 app/uploaders/upload_uploader.rb create mode 100644 app/views/layouts/application.html.erb create mode 100644 app/views/layouts/mailer.html.erb create mode 100644 app/views/layouts/mailer.text.erb create mode 100644 app/views/postmaster/deposit_accepted.en.html.erb create mode 100644 app/views/postmaster/email_confirmation.en.html.erb create mode 100644 app/views/postmaster/email_confirmation.ru.html.erb create mode 100644 app/views/postmaster/email_confirmation_code.en.html.erb create mode 100644 app/views/postmaster/email_otp_disable_confirmation_code.en.html.erb create mode 100644 app/views/postmaster/email_otp_enable_confirmation_code.en.html.erb create mode 100644 app/views/postmaster/label.en.html.erb create mode 100644 app/views/postmaster/new_beneficiary.en.html.erb create mode 100644 app/views/postmaster/otp_confirmation_code.en.html.erb create mode 100644 app/views/postmaster/password_confirmation_code.en.html.erb create mode 100644 app/views/postmaster/password_reset.en.html.erb create mode 100644 app/views/postmaster/password_reset.ru.html.erb create mode 100644 app/views/postmaster/session_create.en.html.erb create mode 100644 app/views/postmaster/session_failed.en.html.erb create mode 100644 app/views/postmaster/withdraw_confirmation_code.en.html.erb create mode 100644 app/views/postmaster/withdraw_succeed.en.html.erb create mode 100644 app/workers/kyc/local/owner_mobile_worker.rb create mode 100644 app/workers/kyc/local/treasury_worker.rb create mode 100644 bin/bundle create mode 100644 bin/cloudflare create mode 100644 bin/gendocs create mode 100644 bin/init_config create mode 100644 bin/init_vault create mode 100644 bin/install_plugins create mode 100644 bin/link_config create mode 100644 bin/mailer create mode 100644 bin/rails create mode 100644 bin/rake create mode 100644 bin/setup create mode 100644 bin/update create mode 100644 config.ru create mode 100644 config/abilities.yml create mode 100644 config/amqp.yml create mode 100644 config/application.rb create mode 100644 config/authz_rules.yml create mode 100644 config/backend.yml create mode 100644 config/barong.yml create mode 100644 config/boot.rb create mode 100644 config/cable.yml create mode 100644 config/credentials.yml.enc create mode 100644 config/database.yml create mode 100644 config/environment.rb create mode 100644 config/environments/development.rb create mode 100644 config/environments/production.rb create mode 100644 config/environments/test.rb create mode 100644 config/initializers/api_pagination.rb create mode 100644 config/initializers/application_controller_renderer.rb create mode 100644 config/initializers/assets.rb create mode 100644 config/initializers/backtrace_silencers.rb create mode 100644 config/initializers/barong.rb create mode 100644 config/initializers/barong_config.rb create mode 100644 config/initializers/carrierwave.rb create mode 100644 config/initializers/content_security_policy.rb create mode 100644 config/initializers/cookies_serializer.rb create mode 100644 config/initializers/document_types.rb create mode 100644 config/initializers/event_api.rb create mode 100644 config/initializers/exception_reporting.rb create mode 100644 config/initializers/filter_parameter_logging.rb create mode 100644 config/initializers/inflections.rb create mode 100644 config/initializers/jwt.rb create mode 100644 config/initializers/kavenegar-ruby_initializer.rb create mode 100644 config/initializers/mime_types.rb create mode 100644 config/initializers/open_uri.rb create mode 100644 config/initializers/phone.rb create mode 100644 config/initializers/redis.rb create mode 100644 config/initializers/redis_store.rb create mode 100644 config/initializers/sessions_store.rb create mode 100644 config/initializers/sidekiq.rb create mode 100644 config/initializers/trusted_proxies.rb create mode 100644 config/initializers/user_storage_titles.rb create mode 100644 config/initializers/vault.rb create mode 100644 config/initializers/versioning.rb create mode 100644 config/initializers/wrap_parameters.rb create mode 100644 config/locales/en.yml create mode 100644 config/management_api_v1.yml create mode 100644 config/plugins.yml create mode 100644 config/puma.rb create mode 100644 config/routes.rb create mode 100644 config/spring.rb create mode 100644 config/storage.yml create mode 100644 config/templates/management_api_v1.yml.erb create mode 100644 config/templates/plugins.yml.erb create mode 100644 db/migrate/20181101143041_create_all_tables.rb create mode 100644 db/migrate/20181115100105_create_activities.rb create mode 100644 db/migrate/20190108115333_add_referral_id_to_users_table.rb create mode 100644 db/migrate/20190318133453_create_permissions.rb create mode 100644 db/migrate/20190529114214_changes_in_activities_table.rb create mode 100644 db/migrate/20190813112503_create_restrictions.rb create mode 100644 db/migrate/20190827080317_add_data_field_to_users_table.rb create mode 100644 db/migrate/20190902032709_add_state_profiles.rb create mode 100644 db/migrate/20191122151630_create_data_storages.rb create mode 100644 db/migrate/20191210090006_add_description_to_labels.rb create mode 100644 db/migrate/20200318152130_add_default_state_to_profiles_table.rb create mode 100644 db/migrate/20200429082843_add_code_and_type_in_restrictions_table.rb create mode 100644 db/migrate/20200507104423_add_encrypted_secret.rb create mode 100644 db/migrate/20200514123908_add_identificator_to_documents_table.rb create mode 100644 db/migrate/20200602075906_add_author_to_profiles.rb create mode 100644 db/migrate/20200609144734_create_comments.rb create mode 100644 db/migrate/20200701115721_add_doc_category_to_documents.rb create mode 100644 db/migrate/20200902125225_make_api_key_kid_unique.rb create mode 100644 db/migrate/20200904153034_add_service_accounts_and_related_changes.rb create mode 100644 db/migrate/20200929143711_add_encrypted_values_to_phones_profiles_documents.rb create mode 100644 db/migrate/20201001112814_change_document_fields_position.rb create mode 100644 db/migrate/20210218135634_change_owner_id_requirement.rb create mode 100644 db/migrate/20210413065736_add_national_code_to_profiles.rb create mode 100644 db/migrate/20210418085508_create_treasuries.rb create mode 100644 db/migrate/20210420111532_create_provinces.rb create mode 100644 db/migrate/20210420111629_create_cities.rb create mode 100644 db/migrate/20210420113539_change_city_in_profile.rb create mode 100644 db/migrate/20210425062048_add_step_to_phone.rb create mode 100644 db/migrate/20210714111301_add_state_to_documents.rb create mode 100644 db/migrate/20210811064241_remove_index_data_from_treasuries.rb create mode 100644 db/schema.rb create mode 100644 db/seeds.rb create mode 100644 db/structure.sql create mode 100644 docs/api/barong_admin_api_v2.md create mode 100644 docs/api/barong_management_api_v2.md create mode 100644 docs/api/barong_user_api_v2.md create mode 100644 docs/api/swagger/admin_api.json create mode 100644 docs/api/swagger/management_api.json create mode 100644 docs/api/swagger/user_api.json create mode 100644 docs/configuration.md create mode 100644 docs/development/mailer.md create mode 100644 docs/general/2fa.md create mode 100644 docs/general/activities.md create mode 100644 docs/general/api-keys.md create mode 100644 docs/general/auth0.md create mode 100644 docs/general/captcha.md create mode 100644 docs/general/encryption.md create mode 100644 docs/general/errors.md create mode 100644 docs/general/event_api.md create mode 100644 docs/general/password_hashing.md create mode 100644 docs/general/profiles.md create mode 100644 docs/images/amqp-mailer-schema.jpg create mode 100644 docs/images/api-keys-1.jpeg create mode 100644 docs/images/api-keys-2.jpeg create mode 100644 docs/images/auth0_dashboard.png create mode 100644 docs/images/auth0_pkce.png create mode 100644 docs/images/auth0_settings.png create mode 100644 docs/images/mailer-retry.jpg create mode 100644 docs/kycaid.md create mode 100644 docs/mailer.md create mode 100644 docs/migrations/2_6_migration.md create mode 100644 docs/migrations/postgresql.md create mode 100644 docs/releases/2.1.0.md create mode 100644 docs/releases/2.3.0.md create mode 100644 docs/restrictions.md create mode 100644 docs/roadmap.md create mode 100644 docs/security.md create mode 100644 docs/service_accounts.md create mode 100644 docs/tasks/import.md create mode 100644 docs/troubleshooting.md create mode 100644 docs/vault.md create mode 100644 docs/zagros/2fa/2fa.md create mode 100644 docs/zagros/Dalan-document.pdf create mode 100644 docs/zagros/KYC-steps/level-one/access-mobile.md create mode 100644 docs/zagros/KYC-steps/level-one/bank-information.md create mode 100644 docs/zagros/KYC-steps/level-one/personal-info.md create mode 100644 docs/zagros/KYC-steps/level-two/landline.md create mode 100644 docs/zagros/KYC-steps/level-two/mobile-ownership.md create mode 100644 docs/zagros/KYC-steps/level-two/residence.md create mode 100644 docs/zagros/KYC-steps/level-two/selfie.md create mode 100644 docs/zagros/KYC-steps/leveling.md create mode 100644 docs/zagros/admin/KYC-confirm.md create mode 100644 docs/zagros/admin/treasury-list.md create mode 100644 docs/zagros/change-password/change-password.md create mode 100644 docs/zagros/reset-password/reset-password.md create mode 100644 docs/zagros/sign-up/sign-up.md create mode 100644 docs/zagros/uploader/uploader.md create mode 100644 geolite/COPYRIGHT.txt create mode 100644 geolite/GeoLite2-Country.mmdb create mode 100644 geolite/LICENSE.txt create mode 100644 lib/assets/.keep create mode 100644 lib/barong/activity_logger.rb create mode 100644 lib/barong/amqp/config.rb create mode 100644 lib/barong/amqp/queue.rb create mode 100644 lib/barong/app.rb create mode 100644 lib/barong/auth0/jwt.rb create mode 100644 lib/barong/authorize.rb create mode 100644 lib/barong/cors/validations.rb create mode 100644 lib/barong/event_api.rb create mode 100644 lib/barong/geo_ip.rb create mode 100644 lib/barong/json_log_formatter.rb create mode 100644 lib/barong/jwt.rb create mode 100644 lib/barong/keystore.rb create mode 100644 lib/barong/middleware.rb create mode 100644 lib/barong/middleware/jwt_authenticator.rb create mode 100644 lib/barong/mock_sms.rb create mode 100644 lib/barong/seed.rb create mode 100644 lib/barong/string.rb create mode 100644 lib/tasks/activities.rake create mode 100644 lib/tasks/auto_annotate_models.rake create mode 100644 lib/tasks/docker.rake create mode 100644 lib/tasks/export.rake create mode 100644 lib/tasks/generate.rake create mode 100644 lib/tasks/import.rake create mode 100644 lib/tasks/mailer.rake create mode 100644 lib/tasks/migrate.rake create mode 100644 lib/tasks/permissions.rake create mode 100644 lib/tasks/rotate.rake create mode 100644 lib/tasks/superadmin.rake create mode 100644 log/.keep create mode 100644 public/404.html create mode 100644 public/422.html create mode 100644 public/500.html create mode 100644 public/apple-touch-icon-precomposed.png create mode 100644 public/apple-touch-icon.png create mode 100644 public/favicon.ico create mode 100644 public/logo.png create mode 100644 public/robots.txt create mode 100644 scripts/benchmark/phones.rb create mode 100644 scripts/benchmark/profiles.rb create mode 100644 scripts/verify-security-pins.sh create mode 100644 spec/api/base_spec.rb create mode 100644 spec/api/v2/admin/abilities_spec.rb create mode 100644 spec/api/v2/admin/activities_spec.rb create mode 100644 spec/api/v2/admin/api_keys_spec.rb create mode 100644 spec/api/v2/admin/levels_spec.rb create mode 100644 spec/api/v2/admin/metrics_spec.rb create mode 100644 spec/api/v2/admin/permissions_spec.rb create mode 100644 spec/api/v2/admin/profiles_spec.rb create mode 100644 spec/api/v2/admin/restrictions_spec.rb create mode 100644 spec/api/v2/admin/users_spec.rb create mode 100644 spec/api/v2/auth/audit_spec.rb create mode 100644 spec/api/v2/auth/auth_spec.rb create mode 100644 spec/api/v2/auth/csrf_spec.rb create mode 100644 spec/api/v2/auth/rbac_spec.rb create mode 100644 spec/api/v2/auth/restriction_spec.rb create mode 100644 spec/api/v2/auth/sessions_spec.rb create mode 100644 spec/api/v2/cors/cors_spec.rb create mode 100644 spec/api/v2/cors/validations_spec.rb create mode 100644 spec/api/v2/entities/activities_spec.rb create mode 100644 spec/api/v2/entities/labels_spec.rb create mode 100644 spec/api/v2/entities/user_with_full_spec.rb create mode 100644 spec/api/v2/identity/general_spec.rb create mode 100644 spec/api/v2/identity/sessions_spec.rb create mode 100644 spec/api/v2/identity/users_spec.rb create mode 100644 spec/api/v2/management/api_keys_spec.rb create mode 100644 spec/api/v2/management/documents_spec.rb create mode 100644 spec/api/v2/management/jwt_authentication_middleware_spec.rb create mode 100644 spec/api/v2/management/labels_spec.rb create mode 100644 spec/api/v2/management/otp_spec.rb create mode 100644 spec/api/v2/management/phones_spec.rb create mode 100644 spec/api/v2/management/profiles_spec.rb create mode 100644 spec/api/v2/management/service_accounts_spec.rb create mode 100644 spec/api/v2/management/users_spec.rb create mode 100644 spec/api/v2/public/general_spec.rb create mode 100644 spec/api/v2/queries/activity_filter_spec.rb create mode 100644 spec/api/v2/resource/addresses_spec.rb create mode 100644 spec/api/v2/resource/api_keys_spec.rb create mode 100644 spec/api/v2/resource/data_storage_spec.rb create mode 100644 spec/api/v2/resource/documents_spec.rb create mode 100644 spec/api/v2/resource/labels_spec.rb create mode 100644 spec/api/v2/resource/otp_spec.rb create mode 100644 spec/api/v2/resource/phones_spec.rb create mode 100644 spec/api/v2/resource/profiles_spec.rb create mode 100644 spec/api/v2/resource/service_accounts_spec.rb create mode 100644 spec/api/v2/resource/users_spec.rb create mode 100644 spec/factories/activity.rb create mode 100644 spec/factories/api_keys.rb create mode 100644 spec/factories/document.rb create mode 100644 spec/factories/label.rb create mode 100644 spec/factories/level.rb create mode 100644 spec/factories/permission.rb create mode 100644 spec/factories/phones.rb create mode 100644 spec/factories/profile.rb create mode 100644 spec/factories/restriction.rb create mode 100644 spec/factories/service_account.rb create mode 100644 spec/factories/user.rb create mode 100644 spec/fixtures/files/documents_test.jpg create mode 100644 spec/initializers/data_storage_titles_spec.rb create mode 100644 spec/initializers/document_types.spec.rb create mode 100644 spec/lib/barong/jwt_spec.rb create mode 100644 spec/lib/barong/seed_spec.rb create mode 100644 spec/mailers/postmaster_spec.rb create mode 100644 spec/mailers/previews/mailer_preview.rb create mode 100644 spec/models/ability_spec.rb create mode 100644 spec/models/activity_spec.rb create mode 100644 spec/models/api_key_spec.rb create mode 100644 spec/models/document_spec.rb create mode 100644 spec/models/label_spec.rb create mode 100644 spec/models/level_spec.rb create mode 100644 spec/models/phone_spec.rb create mode 100644 spec/models/profile_spec.rb create mode 100644 spec/models/restrictions_spec.rb create mode 100644 spec/models/user_spec.rb create mode 100644 spec/rails_helper.rb create mode 100644 spec/services/encryption_service_spec.rb create mode 100644 spec/services/event_mailer_spec.rb create mode 100644 spec/services/vault_totp_spec.rb create mode 100644 spec/spec_helper.rb create mode 100644 spec/support/api_helpers.rb create mode 100644 spec/support/bearer_context.rb create mode 100644 spec/support/factory_bot.rb create mode 100644 spec/support/geoip_context.rb create mode 100644 spec/support/helper.rb create mode 100644 spec/workers/address_worker_spec.rb create mode 100644 spec/workers/applicant_worker_spec.rb create mode 100644 spec/workers/document_worker_spec.rb create mode 100644 spec/workers/verification_worker_spec.rb create mode 100644 storage/.keep create mode 100644 test.rb create mode 100644 test/application_system_test_case.rb create mode 100644 test/controllers/.keep create mode 100644 test/fixtures/.keep create mode 100644 test/fixtures/files/.keep create mode 100644 test/helpers/.keep create mode 100644 test/integration/.keep create mode 100644 test/mailers/.keep create mode 100644 test/models/.keep create mode 100644 test/system/.keep create mode 100644 test/test_helper.rb create mode 100644 tmp/.keep create mode 100644 vendor/.keep diff --git a/.codeclimate.yml b/.codeclimate.yml new file mode 100644 index 0000000..970b114 --- /dev/null +++ b/.codeclimate.yml @@ -0,0 +1,73 @@ +#TODO enable codeclimate in spec files and fix issues + +version: '2' +checks: + method-complexity: + config: + threshold: 10 + file-lines: + config: + threshold: 400 +plugins: + brakeman: + enabled: true + rubocop: + enabled: false + checks: + Rubocop/Metrics/ClassLength: + enabled: false + Rubocop/Metrics/BlockLength: + enabled: false + Rubocop/Style/RedundantSelf: + enabled: false + Rubocop/Metrics/AbcSize: + enabled: false + Rubocop/Layout/AlignHash: + enabled: false + Rubocop/Metrics/LineLength: + enabled: false + reek: + enabled: false + checks: + FeatureEnvy: + enabled: false + RepeatedConditional: + enabled: false + NilCheck: + enabled: false + InstanceVariableAssumption: + enabled: false + IrresponsibleModule: + enabled: false + UncommunicativeModuleName: + enabled: false + exclude_patterns: + - spec/ + bundler-audit: + enabled: true + todo: + enabled: false + fixme: + enabled: false + duplication: + enabled: true + exclude_patterns: + - spec/ + - app/api/ + config: + languages: + - ruby +exclude_patterns: + - db/ + - ci/bump.rb + - node_modules/ + - vendor/ + - config/initializers/* + - config/plugins.rb + - config/ + - test/ + - config.ru + - db/ + - dist/ + - script/ + - spec/ \ No newline at end of file diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..03fa602 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,10 @@ +Dockerfile +.dockerignore +.git +.gitignore +LICENSE.md +Makefile +README.md +.travis.yml +VERSION +config/charts diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000..d14764a --- /dev/null +++ b/.drone.yml @@ -0,0 +1,408 @@ +--- +kind: pipeline +name: "Mysql 5.7" + +services: +- name: database + image: mysql:5.7 + ports: + - 3306 + environment: + MYSQL_ALLOW_EMPTY_PASSWORD: 'yes' + +- name: rabbitmq + image: rabbitmq:3.8.9 + ports: + - 5672 + +- name: vault + image: vault:0.11.4 + ports: + - 8200 + environment: + SKIP_SETCAP: 1 + BARONG_VAULT_TOKEN: changeme + VAULT_DEV_ROOT_TOKEN_ID: changeme + BARONG_VAULT_ADDRESS: http://vault:8200 + +- name: redis + image: redis:4.0 + ports: + - 6379 + +steps: +- name: Configure Vault + image: vault:0.11.4 + commands: + - vault secrets disable secret + - vault secrets enable -path=secret -version=1 kv + - vault secrets enable totp + environment: + VAULT_TOKEN: changeme + VAULT_DEV_ROOT_TOKEN_ID: changeme + VAULT_ADDR: http://vault:8200 + +- name: Run rspec + image: ruby:2.6.6 + environment: + DATABASE_HOST: database + BARONG_EVENT_API_RABBITMQ_HOST: rabbitmq + BARONG_VAULT_ADDRESS: http://vault:8200 + BARONG_VAULT_TOKEN: changeme + RAILS_ENV: test + REDIS_URL: redis://redis:6379 + BARONG_REDIS_URL: redis://redis:6379 + RAILS_MASTER_KEY: + from_secret: rails_master_key + commands: + - gem update bundler + - bundle install --system + - ./bin/init_config + - rake db:create db:migrate + - bundle exec rspec + +- name: Bump and tag + image: quay.io/openware/sdk-citools:2.6.7 + environment: + BOT_USERNAME: kite-bot + BOT_NAME: Kite Bot + BOT_EMAIL: kite-bot@heliostech.fr + BRANCH_NAME: ${DRONE_BRANCH} + REPO_NAME: ${DRONE_REPO} + GITHUB_API_KEY: + from_secret: kite_bot_key + commands: + - BUNDLE_GEMFILE=/sdk/Gemfile bundle exec rake --rakefile=/sdk/Rakefile ci:prebuild + when: + branch: + - "*-stable" + +- name: Tag snapshot + image: quay.io/openware/sdk-citools:2.6.7 + environment: + BOT_USERNAME: kite-bot + BOT_NAME: Kite Bot + BOT_EMAIL: kite-bot@heliostech.fr + BRANCH_NAME: master + REPO_NAME: ${DRONE_REPO} + GITHUB_API_KEY: + from_secret: kite_bot_key + commands: + - BUNDLE_GEMFILE=/sdk/Gemfile bundle exec rake --rakefile=/sdk/Rakefile ci:prebuild + when: + branch: + - master + - "fix/*" + - "integration/*" + +- name: Generate docs + image: quay.io/openware/ruby-node:2.6.5 + environment: + DATABASE_HOST: database + BARONG_EVENT_API_RABBITMQ_HOST: rabbitmq + BARONG_VAULT_ADDRESS: http://vault:8200 + RAILS_MASTER_KEY: + from_secret: rails_master_key + commands: + - gem update bundler + - bundle install + - bundle exec bin/gendocs + when: + branch: + - master + - "*-stable" + +- name: Docker build and push + image: plugins/docker + environment: + MAXMIND_LICENSE_KEY: + from_secret: maxmind_license_key + settings: + username: + from_secret: quay_username + password: + from_secret: quay_password + repo: quay.io/openware/barong + registry: quay.io + build_args_from_env: + - MAXMIND_LICENSE_KEY + when: + branch: + - master + - "*-stable" + - "fix/*" + - "integration/*" + +- name: Redeploy on master.devkube.com + image: rubykube/microkube:0.2.0 + environment: + WEBHOOK_JWT_SECRET: + from_secret: devkube_webhook_secret + commands: + - export latest_image=quay.io/openware/barong:$(cat .tags) + - cd /home/app + - bundle exec rake payload:send[barong,$latest_image,http://master.devkube.com:1337] + when: + branch: + - master + +- name: Push and Notify + image: quay.io/openware/sdk-citools:2.6.7 + environment: + BOT_USERNAME: kite-bot + BOT_NAME: Kite Bot + BOT_EMAIL: kite-bot@heliostech.fr + BRANCH_NAME: ${DRONE_BRANCH} + SDK_BRANCH: ${DRONE_BRANCH} + REPO_NAME: ${DRONE_REPO} + TELEGRAM_BOT_TOKEN: + from_secret: telegram_bot_token + TELEGRAM_CHAT_ID: + from_secret: telegram_chat_id + SLACK_TOKEN: + from_secret: slack_token + SLACK_CHANNEL: + from_secret: slack_channel + GITHUB_API_KEY: + from_secret: kite_bot_key + commands: + - BUNDLE_GEMFILE=/sdk/Gemfile bundle exec rake --rakefile=/sdk/Rakefile ci:postbuild[/drone/src] + when: + branch: + - master + - "*-stable" + +- name: "Update global OpenDAX version" + image: quay.io/openware/goci:0.0.7 + environment: + GIT_TOKEN: + from_secret: kite_bot_key + commands: + - /app/goci versions + when: + branch: + - "*-stable" + +trigger: + event: + - push + +image_pull_secrets: +- dockerconfigjson + + +--- +kind: pipeline +name: "MariaDB 10.3" + +services: +- name: database + image: mariadb:10.3 + ports: + - 3306 + environment: + MYSQL_ALLOW_EMPTY_PASSWORD: 'yes' + +- name: rabbitmq + image: rabbitmq:3.8.9 + ports: + - 5672 + +- name: vault + image: vault:0.11.4 + ports: + - 8200 + environment: + SKIP_SETCAP: 1 + BARONG_VAULT_TOKEN: changeme + VAULT_DEV_ROOT_TOKEN_ID: changeme + BARONG_VAULT_ADDRESS: http://vault:8200 + +- name: redis + image: redis:4.0 + ports: + - 6379 + +steps: +- name: Configure Vault + image: vault:0.11.4 + commands: + - vault secrets disable secret + - vault secrets enable -path=secret -version=1 kv + - vault secrets enable totp + environment: + VAULT_TOKEN: changeme + VAULT_DEV_ROOT_TOKEN_ID: changeme + VAULT_ADDR: http://vault:8200 + +- name: Run rspec + image: ruby:2.6.6 + environment: + DATABASE_HOST: database + BARONG_EVENT_API_RABBITMQ_HOST: rabbitmq + BARONG_VAULT_ADDRESS: http://vault:8200 + BARONG_VAULT_TOKEN: changeme + RAILS_ENV: test + REDIS_URL: redis://redis:6379 + BARONG_REDIS_URL: redis://redis:6379 + RAILS_MASTER_KEY: + from_secret: rails_master_key + commands: + - gem update bundler + - bundle install --system + - ./bin/init_config + - rake db:create db:migrate + - bundle exec rspec + +trigger: + event: + - push + branch: + - "compatibility/*" + - "*-stable" + +--- +kind: pipeline +name: "MySQL 8.0" + +services: +- name: database + image: mysql:8.0 + commands: + - /entrypoint.sh --default-authentication-plugin=mysql_native_password + ports: + - 3306 + environment: + MYSQL_ALLOW_EMPTY_PASSWORD: 'yes' + +- name: rabbitmq + image: rabbitmq:3.8.9 + ports: + - 5672 + +- name: vault + image: vault:0.11.4 + ports: + - 8200 + environment: + SKIP_SETCAP: 1 + BARONG_VAULT_TOKEN: changeme + VAULT_DEV_ROOT_TOKEN_ID: changeme + BARONG_VAULT_ADDRESS: http://vault:8200 + +- name: redis + image: redis:4.0 + ports: + - 6379 + +steps: +- name: Configure Vault + image: vault:0.11.4 + commands: + - vault secrets disable secret + - vault secrets enable -path=secret -version=1 kv + - vault secrets enable totp + environment: + VAULT_TOKEN: changeme + VAULT_DEV_ROOT_TOKEN_ID: changeme + VAULT_ADDR: http://vault:8200 + +- name: Run rspec + image: ruby:2.6.6 + environment: + DATABASE_HOST: database + BARONG_EVENT_API_RABBITMQ_HOST: rabbitmq + BARONG_VAULT_ADDRESS: http://vault:8200 + BARONG_VAULT_TOKEN: changeme + RAILS_ENV: test + REDIS_URL: redis://redis:6379 + BARONG_REDIS_URL: redis://redis:6379 + RAILS_MASTER_KEY: + from_secret: rails_master_key + commands: + - gem update bundler + - bundle install --system + - ./bin/init_config + - rake db:create db:migrate + - bundle exec rspec + +trigger: + event: + - push + branch: + - "compatibility/*" + - "*-stable" + +--- +kind: pipeline +name: "PostgreSQL 13.0" + +services: +- name: database + image: postgres:13.0 + ports: + - 5432 + environment: + POSTGRES_PASSWORD: changeme + +- name: rabbitmq + image: rabbitmq:3.8.9 + ports: + - 5672 + +- name: vault + image: vault:0.11.4 + ports: + - 8200 + environment: + SKIP_SETCAP: 1 + BARONG_VAULT_TOKEN: changeme + VAULT_DEV_ROOT_TOKEN_ID: changeme + BARONG_VAULT_ADDRESS: http://vault:8200 + +- name: redis + image: redis:4.0 + ports: + - 6379 + +steps: +- name: Configure Vault + image: vault:0.11.4 + commands: + - vault secrets disable secret + - vault secrets enable -path=secret -version=1 kv + - vault secrets enable totp + environment: + VAULT_TOKEN: changeme + VAULT_DEV_ROOT_TOKEN_ID: changeme + VAULT_ADDR: http://vault:8200 + +- name: Run rspec + image: ruby:2.6.6 + environment: + DATABASE_HOST: database + DATABASE_ADAPTER: postgresql + DATABASE_PORT: "5432" + DATABASE_PASS: changeme + DATABASE_USER: postgres + BARONG_EVENT_API_RABBITMQ_HOST: rabbitmq + BARONG_VAULT_ADDRESS: http://vault:8200 + BARONG_VAULT_TOKEN: changeme + RAILS_ENV: test + REDIS_URL: redis://redis:6379 + BARONG_REDIS_URL: redis://redis:6379 + RAILS_MASTER_KEY: + from_secret: rails_master_key + commands: + - gem update bundler + - bundle install --system + - ./bin/init_config + - rake db:create db:migrate + - bundle exec rspec + +trigger: + event: + - push + branch: + - "compatibility/*" + - "*-stable" diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..dfdb8b7 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.sh text eol=lf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e719089 --- /dev/null +++ b/.gitignore @@ -0,0 +1,36 @@ +# See https://help.github.com/articles/ignoring-files for more about ignoring files. +# +# If you find yourself ignoring temporary files generated by your text editor +# or operating system, you probably want to add a global ignore instead: +# git config --global core.excludesfile '~/.gitignore_global' + +# Ignore bundler config. +/.bundle + +# Ignore all logfiles and tempfiles. +/log/* +/tmp/* +!/log/.keep +!/tmp/.keep + +# Ignore uploaded files in development +/storage/* +!/storage/.keep + +/node_modules +/yarn-error.log + +/public/uploads +/public/assets +.byebug_history + +# Ignore master key for decrypting credentials and more. +/config/master.key +/config/rsa-key.pub +/config/rsa-key +/config/mailer.yml +/config/cloudflare_ips.yml +/config/management_api.yml +/config/seeds.yml +barong.env +.idea/ \ No newline at end of file diff --git a/.rspec b/.rspec new file mode 100644 index 0000000..c99d2e7 --- /dev/null +++ b/.rspec @@ -0,0 +1 @@ +--require spec_helper diff --git a/.ruby-version b/.ruby-version new file mode 100644 index 0000000..f6ab44e --- /dev/null +++ b/.ruby-version @@ -0,0 +1 @@ +ruby-2.6.6 diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..36cb21a --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,2056 @@ +# Change Log + +## [2.3.39](https://github.com/rubykube/barong/tree/2.3.39) (2019-10-15) +[Full Changelog](https://github.com/rubykube/barong/compare/2.3.38...2.3.39) + +**Merged pull requests:** + +- Update storage-related gems [\#957](https://github.com/rubykube/barong/pull/957) ([ec](https://github.com/ec)) +- Protect superadmin against changes from non-superadmin users [\#955](https://github.com/rubykube/barong/pull/955) ([ec](https://github.com/ec)) + +## [2.3.38](https://github.com/rubykube/barong/tree/2.3.38) (2019-10-15) +[Full Changelog](https://github.com/rubykube/barong/compare/2.3.37...2.3.38) + +## [2.3.37](https://github.com/rubykube/barong/tree/2.3.37) (2019-10-11) +[Full Changelog](https://github.com/rubykube/barong/compare/2.3.36...2.3.37) + +**Merged pull requests:** + +- Server side sessions implementation \(cache store\) [\#949](https://github.com/rubykube/barong/pull/949) ([ec](https://github.com/ec)) + +## [2.3.36](https://github.com/rubykube/barong/tree/2.3.36) (2019-10-10) +[Full Changelog](https://github.com/rubykube/barong/compare/2.3.35...2.3.36) + +**Merged pull requests:** + +- Feature: allow \# \ \(\) & ' : " in profile residental address field [\#950](https://github.com/rubykube/barong/pull/950) ([ymasiuk](https://github.com/ymasiuk)) + +## [2.3.35](https://github.com/rubykube/barong/tree/2.3.35) (2019-10-07) +[Full Changelog](https://github.com/rubykube/barong/compare/2.3.34...2.3.35) + +**Merged pull requests:** + +- Add ability to configure aws\_signature\_version && endpoint [\#947](https://github.com/rubykube/barong/pull/947) ([ec](https://github.com/ec)) + +## [2.3.34](https://github.com/rubykube/barong/tree/2.3.34) (2019-10-02) +[Full Changelog](https://github.com/rubykube/barong/compare/2.3.33...2.3.34) + +**Merged pull requests:** + +- Update ruby to 2.6.5 for security reasons [\#946](https://github.com/rubykube/barong/pull/946) ([ec](https://github.com/ec)) +- Profile act as eventable on update [\#945](https://github.com/rubykube/barong/pull/945) ([ec](https://github.com/ec)) + +## [2.3.33](https://github.com/rubykube/barong/tree/2.3.33) (2019-09-26) +[Full Changelog](https://github.com/rubykube/barong/compare/2.3.32...2.3.33) + +**Merged pull requests:** + +- Use uid instead of id on profile update && delete api [\#943](https://github.com/rubykube/barong/pull/943) ([ec](https://github.com/ec)) + +## [2.3.32](https://github.com/rubykube/barong/tree/2.3.32) (2019-09-23) +[Full Changelog](https://github.com/rubykube/barong/compare/2.3.31...2.3.32) + +**Merged pull requests:** + +- Use CGI::escape instead of pure url in documents event api [\#942](https://github.com/rubykube/barong/pull/942) ([ec](https://github.com/ec)) + +## [2.3.31](https://github.com/rubykube/barong/tree/2.3.31) (2019-09-23) +[Full Changelog](https://github.com/rubykube/barong/compare/2.3.30...2.3.31) + +**Closed issues:** + +- Missing model.user.updated event description [\#931](https://github.com/rubykube/barong/issues/931) +- Expose levels configuration [\#929](https://github.com/rubykube/barong/issues/929) +- Update Label\#create and Label\#update in admin and management API [\#896](https://github.com/rubykube/barong/issues/896) + +**Merged pull requests:** + +- Introduce MockPhoneVerifyService [\#941](https://github.com/rubykube/barong/pull/941) ([ec](https://github.com/ec)) + +## [2.3.30](https://github.com/rubykube/barong/tree/2.3.30) (2019-09-20) +[Full Changelog](https://github.com/rubykube/barong/compare/2.3.29...2.3.30) + +**Merged pull requests:** + +- Change twilio API [\#928](https://github.com/rubykube/barong/pull/928) ([chumaknadya](https://github.com/chumaknadya)) + +## [2.3.29](https://github.com/rubykube/barong/tree/2.3.29) (2019-09-20) +[Full Changelog](https://github.com/rubykube/barong/compare/2.3.28...2.3.29) + +**Merged pull requests:** + +- Add missing labels event api documentation [\#937](https://github.com/rubykube/barong/pull/937) ([ec](https://github.com/ec)) + +## [2.3.28](https://github.com/rubykube/barong/tree/2.3.28) (2019-09-18) +[Full Changelog](https://github.com/rubykube/barong/compare/2.3.27...2.3.28) + +**Merged pull requests:** + +- Make labels acts\_as\_eventable on: \[create update\] [\#936](https://github.com/rubykube/barong/pull/936) ([ec](https://github.com/ec)) + +## [2.3.27](https://github.com/rubykube/barong/tree/2.3.27) (2019-09-18) +[Full Changelog](https://github.com/rubykube/barong/compare/2.3.26...2.3.27) + +**Merged pull requests:** + +- Define DocumentTypes class for flexible doc type configuration [\#935](https://github.com/rubykube/barong/pull/935) ([ec](https://github.com/ec)) + +## [2.3.26](https://github.com/rubykube/barong/tree/2.3.26) (2019-09-17) +[Full Changelog](https://github.com/rubykube/barong/compare/2.3.25...2.3.26) + +**Merged pull requests:** + +- Update seeds.yml [\#934](https://github.com/rubykube/barong/pull/934) ([ec](https://github.com/ec)) +- Event API changes: remove blocking check for on\_update events [\#933](https://github.com/rubykube/barong/pull/933) ([ec](https://github.com/ec)) +- Simple GET levels requirements endpoint for admin [\#932](https://github.com/rubykube/barong/pull/932) ([ec](https://github.com/ec)) +- Get rid of serialize: JSON, accept metadata as json instead of pure hash [\#930](https://github.com/rubykube/barong/pull/930) ([ec](https://github.com/ec)) + +## [2.3.25](https://github.com/rubykube/barong/tree/2.3.25) (2019-09-17) +[Full Changelog](https://github.com/rubykube/barong/compare/2.3.24...2.3.25) + +**Closed issues:** + +- Missing enable of OTP in rake task [\#890](https://github.com/rubykube/barong/issues/890) +- Missing storage\_region env config for carrierwave [\#880](https://github.com/rubykube/barong/issues/880) +- Missing check on vault connection while creating api\_key [\#879](https://github.com/rubykube/barong/issues/879) + +**Merged pull requests:** + +- Add system.session.create event with user and request\_ip data [\#916](https://github.com/rubykube/barong/pull/916) ([chumaknadya](https://github.com/chumaknadya)) + +## [2.3.24](https://github.com/rubykube/barong/tree/2.3.24) (2019-09-12) +[Full Changelog](https://github.com/rubykube/barong/compare/2.3.23...2.3.24) + +**Merged pull requests:** + +- Allow blank doc\_expire for documents controllers [\#927](https://github.com/rubykube/barong/pull/927) ([dnfd](https://github.com/dnfd)) +- Add AliCloud Uploader [\#926](https://github.com/rubykube/barong/pull/926) ([dnfd](https://github.com/dnfd)) + +## [2.3.23](https://github.com/rubykube/barong/tree/2.3.23) (2019-09-07) +[Full Changelog](https://github.com/rubykube/barong/compare/2.3.21...2.3.23) + +**Merged pull requests:** + +- Add ability to disable 2fa [\#925](https://github.com/rubykube/barong/pull/925) ([dnfd](https://github.com/dnfd)) +- Use Barong::App.config.barong\_uid\_prefix in referral validation [\#923](https://github.com/rubykube/barong/pull/923) ([ec](https://github.com/ec)) +- Add ability to skip label creation on doc save [\#922](https://github.com/rubykube/barong/pull/922) ([dnfd](https://github.com/dnfd)) +- Avoid no method error UTC for nil entities [\#921](https://github.com/rubykube/barong/pull/921) ([ec](https://github.com/ec)) + +## [2.3.21](https://github.com/rubykube/barong/tree/2.3.21) (2019-09-05) +[Full Changelog](https://github.com/rubykube/barong/compare/2.3.20...2.3.21) + +**Merged pull requests:** + +- Add ability to restrict by geoip [\#920](https://github.com/rubykube/barong/pull/920) ([dnfd](https://github.com/dnfd)) + +## [2.3.20](https://github.com/rubykube/barong/tree/2.3.20) (2019-09-05) +[Full Changelog](https://github.com/rubykube/barong/compare/2.3.19...2.3.20) + +**Merged pull requests:** + +- Handle Vault errors on POST /api/v2/resource/api\_keys [\#918](https://github.com/rubykube/barong/pull/918) ([dnfd](https://github.com/dnfd)) + +## [2.3.19](https://github.com/rubykube/barong/tree/2.3.19) (2019-09-05) +[Full Changelog](https://github.com/rubykube/barong/compare/2.3.18...2.3.19) + +**Merged pull requests:** + +- Fix structure of event API messages [\#912](https://github.com/rubykube/barong/pull/912) ([shal](https://github.com/shal)) + +## [2.3.18](https://github.com/rubykube/barong/tree/2.3.18) (2019-09-05) +[Full Changelog](https://github.com/rubykube/barong/compare/2.3.17...2.3.18) + +**Merged pull requests:** + +- Add :upload in list of params to be filtered [\#919](https://github.com/rubykube/barong/pull/919) ([ec](https://github.com/ec)) + +## [2.3.17](https://github.com/rubykube/barong/tree/2.3.17) (2019-09-04) +[Full Changelog](https://github.com/rubykube/barong/compare/2.3.16...2.3.17) + +**Merged pull requests:** + +- UPDATES: sessions delete, permissions update, log error on 500 [\#917](https://github.com/rubykube/barong/pull/917) ([chumaknadya](https://github.com/chumaknadya)) + +## [2.3.16](https://github.com/rubykube/barong/tree/2.3.16) (2019-09-04) +[Full Changelog](https://github.com/rubykube/barong/compare/2.3.15...2.3.16) + +**Merged pull requests:** + +- Support 'if not exist - create' logic on labels update [\#915](https://github.com/rubykube/barong/pull/915) ([ec](https://github.com/ec)) +- Fix rollback to pending state, add missing :data in entities [\#914](https://github.com/rubykube/barong/pull/914) ([ec](https://github.com/ec)) +- Add AliCloud Carrierwave storage provider [\#911](https://github.com/rubykube/barong/pull/911) ([dnfd](https://github.com/dnfd)) + +## [2.3.15](https://github.com/rubykube/barong/tree/2.3.15) (2019-09-03) +[Full Changelog](https://github.com/rubykube/barong/compare/2.3.14...2.3.15) + +**Merged pull requests:** + +- Switch to State - Label dependency [\#907](https://github.com/rubykube/barong/pull/907) ([ec](https://github.com/ec)) + +## [2.3.14](https://github.com/rubykube/barong/tree/2.3.14) (2019-09-03) +[Full Changelog](https://github.com/rubykube/barong/compare/2.3.13...2.3.14) + +**Merged pull requests:** + +- Ability to update and delete users profiles [\#913](https://github.com/rubykube/barong/pull/913) ([ec](https://github.com/ec)) + +## [2.3.13](https://github.com/rubykube/barong/tree/2.3.13) (2019-09-02) +[Full Changelog](https://github.com/rubykube/barong/compare/2.3.12...2.3.13) + +**Merged pull requests:** + +- Ability create Profile with empty fields. Add state to Profile model. [\#910](https://github.com/rubykube/barong/pull/910) ([mnaichuk](https://github.com/mnaichuk)) + +## [2.3.12](https://github.com/rubykube/barong/tree/2.3.12) (2019-09-02) +[Full Changelog](https://github.com/rubykube/barong/compare/2.3.11...2.3.12) + +**Merged pull requests:** + +- Update Barong::App validations [\#904](https://github.com/rubykube/barong/pull/904) ([dnfd](https://github.com/dnfd)) + +## [2.3.11](https://github.com/rubykube/barong/tree/2.3.11) (2019-08-26) +[Full Changelog](https://github.com/rubykube/barong/compare/2.3.10...2.3.11) + +**Merged pull requests:** + +- Update nokogiri version \(Command injection\) [\#906](https://github.com/rubykube/barong/pull/906) ([dnfd](https://github.com/dnfd)) + +## [2.3.10](https://github.com/rubykube/barong/tree/2.3.10) (2019-08-22) +[Full Changelog](https://github.com/rubykube/barong/compare/2.3.9...2.3.10) + +**Closed issues:** + +- How to configure session expire time? [\#900](https://github.com/rubykube/barong/issues/900) + +**Merged pull requests:** + +- Add session autorenew [\#903](https://github.com/rubykube/barong/pull/903) ([dnfd](https://github.com/dnfd)) +- Add endpoint for delete restriction [\#902](https://github.com/rubykube/barong/pull/902) ([chumaknadya](https://github.com/chumaknadya)) + +## [2.3.9](https://github.com/rubykube/barong/tree/2.3.9) (2019-08-19) +[Full Changelog](https://github.com/rubykube/barong/compare/2.3.8...2.3.9) + +**Merged pull requests:** + +- Small fixes in document and profile model \(\#887\) [\#901](https://github.com/rubykube/barong/pull/901) ([ec](https://github.com/ec)) + +## [2.3.8](https://github.com/rubykube/barong/tree/2.3.8) (2019-08-19) +[Full Changelog](https://github.com/rubykube/barong/compare/2.3.7...2.3.8) + +**Merged pull requests:** + +- Update models' annotations [\#895](https://github.com/rubykube/barong/pull/895) ([dnfd](https://github.com/dnfd)) + +## [2.3.7](https://github.com/rubykube/barong/tree/2.3.7) (2019-08-19) +[Full Changelog](https://github.com/rubykube/barong/compare/2.3.6...2.3.7) + +**Merged pull requests:** + +- Updating to ruby 2.6.3 and rails 5.2.3 [\#867](https://github.com/rubykube/barong/pull/867) ([mod](https://github.com/mod)) + +## [2.3.6](https://github.com/rubykube/barong/tree/2.3.6) (2019-08-15) +[Full Changelog](https://github.com/rubykube/barong/compare/2.3.5...2.3.6) + +**Merged pull requests:** + +- Management API to push documents for user [\#894](https://github.com/rubykube/barong/pull/894) ([ec](https://github.com/ec)) +- Add ability to configure uid prefix [\#893](https://github.com/rubykube/barong/pull/893) ([ec](https://github.com/ec)) + +## [2.3.5](https://github.com/rubykube/barong/tree/2.3.5) (2019-08-15) +[Full Changelog](https://github.com/rubykube/barong/compare/2.3.4...2.3.5) + +**Merged pull requests:** + +- Add Restrictions [\#891](https://github.com/rubykube/barong/pull/891) ([dnfd](https://github.com/dnfd)) + +## [2.3.4](https://github.com/rubykube/barong/tree/2.3.4) (2019-08-09) +[Full Changelog](https://github.com/rubykube/barong/compare/2.3.3...2.3.4) + +**Closed issues:** + +- Permissions are not checked [\#889](https://github.com/rubykube/barong/issues/889) +- event\_api\_jwt\_private\_key Error [\#888](https://github.com/rubykube/barong/issues/888) + +**Merged pull requests:** + +- Simple rake task to create users and api keys [\#816](https://github.com/rubykube/barong/pull/816) ([ec](https://github.com/ec)) + +## [2.3.3](https://github.com/rubykube/barong/tree/2.3.3) (2019-08-02) +[Full Changelog](https://github.com/rubykube/barong/compare/2.2.25...2.3.3) + +## [2.2.25](https://github.com/rubykube/barong/tree/2.2.25) (2019-08-02) +[Full Changelog](https://github.com/rubykube/barong/compare/2.2.24...2.2.25) + +**Merged pull requests:** + +- Allow additional symbols ' / , : in residential address && Switch to string in required\_docs\_expire config [\#887](https://github.com/rubykube/barong/pull/887) ([ec](https://github.com/ec)) +- Add rake task for load users and referrals [\#885](https://github.com/rubykube/barong/pull/885) ([mnaichuk](https://github.com/mnaichuk)) + +## [2.2.24](https://github.com/rubykube/barong/tree/2.2.24) (2019-07-31) +[Full Changelog](https://github.com/rubykube/barong/compare/2.2.23...2.2.24) + +**Merged pull requests:** + +- Extend doc\_type inclusion list, make validation case insensitive [\#884](https://github.com/rubykube/barong/pull/884) ([ec](https://github.com/ec)) + +## [2.2.23](https://github.com/rubykube/barong/tree/2.2.23) (2019-07-31) +[Full Changelog](https://github.com/rubykube/barong/compare/2.3.2...2.2.23) + +**Closed issues:** + +- Make phone code message configurable [\#876](https://github.com/rubykube/barong/issues/876) +- Add verb PATCH to available verbs for admin audit [\#868](https://github.com/rubykube/barong/issues/868) + +**Merged pull requests:** + +- Add ability to get referral uid && Expose referral\_uid in user, user\_with\_profile, user\_with\_full\_info entities [\#882](https://github.com/rubykube/barong/pull/882) ([chumaknadya](https://github.com/chumaknadya)) + +## [2.3.2](https://github.com/rubykube/barong/tree/2.3.2) (2019-07-26) +[Full Changelog](https://github.com/rubykube/barong/compare/2.3.1...2.3.2) + +**Merged pull requests:** + +- Allow pending user to open session [\#881](https://github.com/rubykube/barong/pull/881) ([ec](https://github.com/ec)) +- Add ability to configure phone verification sms content [\#877](https://github.com/rubykube/barong/pull/877) ([ec](https://github.com/ec)) + +## [2.3.1](https://github.com/rubykube/barong/tree/2.3.1) (2019-07-25) +[Full Changelog](https://github.com/rubykube/barong/compare/2.2.22...2.3.1) + +**Closed issues:** + +- An error occurred while installing mysql2 \(0.5.2\), and Bundler cannot continue. Make sure that `gem install mysql2 -v '0.5.2' --source 'https://rubygems.org/'` succeeds before bundling. [\#873](https://github.com/rubykube/barong/issues/873) + +**Merged pull requests:** + +- Feature: Add redeploy on devkube step to drone [\#874](https://github.com/rubykube/barong/pull/874) ([alinetskyi](https://github.com/alinetskyi)) +- \[ci skip\] Release 2.2.0 [\#836](https://github.com/rubykube/barong/pull/836) ([ec](https://github.com/ec)) + +## [2.2.22](https://github.com/rubykube/barong/tree/2.2.22) (2019-07-17) +[Full Changelog](https://github.com/rubykube/barong/compare/2.2.21...2.2.22) + +**Merged pull requests:** + +- Add optional :extended UserWithFullInfo entity in post /get management [\#872](https://github.com/rubykube/barong/pull/872) ([ec](https://github.com/ec)) +- Make documents act\_as\_eventable on create [\#871](https://github.com/rubykube/barong/pull/871) ([ec](https://github.com/ec)) + +## [2.2.21](https://github.com/rubykube/barong/tree/2.2.21) (2019-07-16) +[Full Changelog](https://github.com/rubykube/barong/compare/2.2.20...2.2.21) + +**Closed issues:** + +- \[To Confirm\] Strange admin activity creation behavior on UID filtering requests [\#869](https://github.com/rubykube/barong/issues/869) +- ActionController::InvalidAuthenticityToken in SessionsController\#confirm [\#866](https://github.com/rubykube/barong/issues/866) + +**Merged pull requests:** + +- Add verb PATCH and ALL for admin audit && Update permission seeds [\#870](https://github.com/rubykube/barong/pull/870) ([chumaknadya](https://github.com/chumaknadya)) +- Make profile act\_as\_eventable on create [\#865](https://github.com/rubykube/barong/pull/865) ([ec](https://github.com/ec)) +- Add filter/users in labels management api module [\#864](https://github.com/rubykube/barong/pull/864) ([ec](https://github.com/ec)) +- Update Readme [\#862](https://github.com/rubykube/barong/pull/862) ([liutenko](https://github.com/liutenko)) +- Support pagination & timestamp filtering on post '/list' management API [\#861](https://github.com/rubykube/barong/pull/861) ([ec](https://github.com/ec)) + +## [2.2.20](https://github.com/rubykube/barong/tree/2.2.20) (2019-06-27) +[Full Changelog](https://github.com/rubykube/barong/compare/2.2.19...2.2.20) + +**Merged pull requests:** + +- Move to active storage [\#858](https://github.com/rubykube/barong/pull/858) ([ec](https://github.com/ec)) +- Fix /api/v2/admin/users/update [\#857](https://github.com/rubykube/barong/pull/857) ([dnfd](https://github.com/dnfd)) + +## [2.2.19](https://github.com/rubykube/barong/tree/2.2.19) (2019-06-25) +[Full Changelog](https://github.com/rubykube/barong/compare/2.2.18...2.2.19) + +**Closed issues:** + +- add public api version check [\#848](https://github.com/rubykube/barong/issues/848) +- Split endpoints `admin/users` [\#847](https://github.com/rubykube/barong/issues/847) +- Admin activities duplicated in user activities for admin users [\#845](https://github.com/rubykube/barong/issues/845) + +**Merged pull requests:** + +- Add docs in bump and update redeploy step [\#856](https://github.com/rubykube/barong/pull/856) ([dnfd](https://github.com/dnfd)) +- skip tag [\#855](https://github.com/rubykube/barong/pull/855) ([dnfd](https://github.com/dnfd)) +- Generate docs in CI [\#854](https://github.com/rubykube/barong/pull/854) ([dnfd](https://github.com/dnfd)) +- Use JSON logs in production [\#849](https://github.com/rubykube/barong/pull/849) ([dnfd](https://github.com/dnfd)) + +## [2.2.18](https://github.com/rubykube/barong/tree/2.2.18) (2019-06-24) +[Full Changelog](https://github.com/rubykube/barong/compare/2.2.17...2.2.18) + +## [2.2.17](https://github.com/rubykube/barong/tree/2.2.17) (2019-06-24) +[Full Changelog](https://github.com/rubykube/barong/compare/2.2.16...2.2.17) + +## [2.2.16](https://github.com/rubykube/barong/tree/2.2.16) (2019-06-24) +[Full Changelog](https://github.com/rubykube/barong/compare/2.2.15...2.2.16) + +**Merged pull requests:** + +- Add missing data field in activity logger [\#853](https://github.com/rubykube/barong/pull/853) ([ec](https://github.com/ec)) +- Changes in admin API module [\#850](https://github.com/rubykube/barong/pull/850) ([ec](https://github.com/ec)) + +## [2.2.15](https://github.com/rubykube/barong/tree/2.2.15) (2019-06-23) +[Full Changelog](https://github.com/rubykube/barong/compare/2.2.14...2.2.15) + +**Merged pull requests:** + +- Split and refactor auth spec, add sync auditor for test env [\#852](https://github.com/rubykube/barong/pull/852) ([ec](https://github.com/ec)) +- Add GET /identity/version endpoint [\#851](https://github.com/rubykube/barong/pull/851) ([ec](https://github.com/ec)) + +## [2.2.14](https://github.com/rubykube/barong/tree/2.2.14) (2019-06-14) +[Full Changelog](https://github.com/rubykube/barong/compare/2.2.13...2.2.14) + +**Merged pull requests:** + +- AUDIT: support PATCH, add default topic, action, seeds [\#844](https://github.com/rubykube/barong/pull/844) ([ec](https://github.com/ec)) + +## [2.2.13](https://github.com/rubykube/barong/tree/2.2.13) (2019-06-13) +[Full Changelog](https://github.com/rubykube/barong/compare/2.2.12...2.2.13) + +**Merged pull requests:** + +- Admin Auditor [\#835](https://github.com/rubykube/barong/pull/835) ([ec](https://github.com/ec)) + +## [2.2.12](https://github.com/rubykube/barong/tree/2.2.12) (2019-06-10) +[Full Changelog](https://github.com/rubykube/barong/compare/2.2.11...2.2.12) + +## [2.2.11](https://github.com/rubykube/barong/tree/2.2.11) (2019-06-10) +[Full Changelog](https://github.com/rubykube/barong/compare/2.2.10...2.2.11) + +**Closed issues:** + +- BUG: Barong and Postmaster do not communicate well [\#818](https://github.com/rubykube/barong/issues/818) +- Feature Request: Configurable roles and permissions [\#813](https://github.com/rubykube/barong/issues/813) +- Expose Referral ID in API [\#802](https://github.com/rubykube/barong/issues/802) +- Implement api keys scope logic [\#779](https://github.com/rubykube/barong/issues/779) +- API Keys seed feature [\#778](https://github.com/rubykube/barong/issues/778) +- Add readable logs in AuthZ lib [\#777](https://github.com/rubykube/barong/issues/777) +- Admin feature: delete nil / unverified records from DB [\#758](https://github.com/rubykube/barong/issues/758) +- Assymetric api keys support [\#732](https://github.com/rubykube/barong/issues/732) + +**Merged pull requests:** + +- Disable APIKeys when user state or otp changes [\#829](https://github.com/rubykube/barong/pull/829) ([dnfd](https://github.com/dnfd)) + +## [2.2.10](https://github.com/rubykube/barong/tree/2.2.10) (2019-06-10) +[Full Changelog](https://github.com/rubykube/barong/compare/2.2.9...2.2.10) + +**Merged pull requests:** + +- Use FullInfo instead of WithProfile to add documents array in response [\#842](https://github.com/rubykube/barong/pull/842) ([ec](https://github.com/ec)) +- Remove activities from full\_info entity [\#841](https://github.com/rubykube/barong/pull/841) ([ec](https://github.com/ec)) +- Fix nil language problem in case of empty string and upcased param [\#840](https://github.com/rubykube/barong/pull/840) ([ec](https://github.com/ec)) +- Return empty array instead of 404 error after filtering [\#839](https://github.com/rubykube/barong/pull/839) ([ec](https://github.com/ec)) + +## [2.2.9](https://github.com/rubykube/barong/tree/2.2.9) (2019-06-05) +[Full Changelog](https://github.com/rubykube/barong/compare/2.2.8...2.2.9) + +## [2.2.8](https://github.com/rubykube/barong/tree/2.2.8) (2019-06-04) +[Full Changelog](https://github.com/rubykube/barong/compare/2.2.7...2.2.8) + +**Merged pull requests:** + +- Add filters feature support on doc pending endpoint [\#837](https://github.com/rubykube/barong/pull/837) ([ec](https://github.com/ec)) + +## [2.2.7](https://github.com/rubykube/barong/tree/2.2.7) (2019-05-28) +[Full Changelog](https://github.com/rubykube/barong/compare/2.2.6...2.2.7) + +**Merged pull requests:** + +- Add ability to filter by multiple fields [\#833](https://github.com/rubykube/barong/pull/833) ([gfedorenko](https://github.com/gfedorenko)) + +## [2.2.6](https://github.com/rubykube/barong/tree/2.2.6) (2019-05-28) +[Full Changelog](https://github.com/rubykube/barong/compare/2.2.5...2.2.6) + +## [2.2.5](https://github.com/rubykube/barong/tree/2.2.5) (2019-05-28) +[Full Changelog](https://github.com/rubykube/barong/compare/2.2.4...2.2.5) + +**Merged pull requests:** + +- Add ability to get list of users with profile [\#830](https://github.com/rubykube/barong/pull/830) ([gfedorenko](https://github.com/gfedorenko)) + +## [2.2.4](https://github.com/rubykube/barong/tree/2.2.4) (2019-05-28) +[Full Changelog](https://github.com/rubykube/barong/compare/2.2.3...2.2.4) + +## [2.2.3](https://github.com/rubykube/barong/tree/2.2.3) (2019-05-27) +[Full Changelog](https://github.com/rubykube/barong/compare/2.2.2...2.2.3) + +**Closed issues:** + +- Barong api session create don't return tokens [\#832](https://github.com/rubykube/barong/issues/832) +- Admin api list users with pending documents [\#799](https://github.com/rubykube/barong/issues/799) +- Automate documentation updating \(v2\) [\#784](https://github.com/rubykube/barong/issues/784) +- Move all envs to config.store [\#736](https://github.com/rubykube/barong/issues/736) +- \[Barong v2; Feature request\] handle document expired date. [\#666](https://github.com/rubykube/barong/issues/666) + +**Merged pull requests:** + +- Update seeds.yml [\#838](https://github.com/rubykube/barong/pull/838) ([pkucherenk0](https://github.com/pkucherenk0)) +- Add metrics namespace in admin module [\#834](https://github.com/rubykube/barong/pull/834) ([ec](https://github.com/ec)) +- Add endpoint to list all user's phones [\#831](https://github.com/rubykube/barong/pull/831) ([dnfd](https://github.com/dnfd)) +- Added admin endpoints to get activities [\#828](https://github.com/rubykube/barong/pull/828) ([gfedorenko](https://github.com/gfedorenko)) +- Add management otp sign endpoint and specs [\#827](https://github.com/rubykube/barong/pull/827) ([ec](https://github.com/ec)) +- Avoid nil language bug on user creation event [\#820](https://github.com/rubykube/barong/pull/820) ([ec](https://github.com/ec)) +- Permissions & roles, seed feature and authz logic [\#819](https://github.com/rubykube/barong/pull/819) ([ec](https://github.com/ec)) + +## [2.2.2](https://github.com/rubykube/barong/tree/2.2.2) (2019-05-13) +[Full Changelog](https://github.com/rubykube/barong/compare/2.2.1...2.2.2) + +**Merged pull requests:** + +- Added API call to get users with pending documents [\#826](https://github.com/rubykube/barong/pull/826) ([gfedorenko](https://github.com/gfedorenko)) + +## [2.2.1](https://github.com/rubykube/barong/tree/2.2.1) (2019-05-09) +[Full Changelog](https://github.com/rubykube/barong/compare/2.1.4...2.2.1) + +**Closed issues:** + +- Internal Error when clicking on email confirmation [\#821](https://github.com/rubykube/barong/issues/821) +- How to generate OTP using barong? [\#817](https://github.com/rubykube/barong/issues/817) +- Allow user to close his account [\#812](https://github.com/rubykube/barong/issues/812) + +**Merged pull requests:** + +- Add GET /labels/list to return key, value, scope of all existing labels [\#824](https://github.com/rubykube/barong/pull/824) ([ec](https://github.com/ec)) +- Make :doc\_expire an optional field [\#823](https://github.com/rubykube/barong/pull/823) ([ec](https://github.com/ec)) +- \[ci skip\] Release 2.1.0 [\#822](https://github.com/rubykube/barong/pull/822) ([ec](https://github.com/ec)) +- Add DELETE /resource/users/me to allow user to block his account [\#811](https://github.com/rubykube/barong/pull/811) ([ec](https://github.com/ec)) + +## [2.1.4](https://github.com/rubykube/barong/tree/2.1.4) (2019-04-09) +[Full Changelog](https://github.com/rubykube/barong/compare/2.1.3...2.1.4) + +**Merged pull requests:** + +- Add opportunity to get list of users by management API [\#815](https://github.com/rubykube/barong/pull/815) ([ymasiuk](https://github.com/ymasiuk)) +- Move event api jwt private key to Barong::App.config store [\#805](https://github.com/rubykube/barong/pull/805) ([ec](https://github.com/ec)) +- Add auto-generating doc support [\#795](https://github.com/rubykube/barong/pull/795) ([ec](https://github.com/ec)) +- Allow to configure multiple CORS at barong [\#790](https://github.com/rubykube/barong/pull/790) ([ec](https://github.com/ec)) + +## [2.1.3](https://github.com/rubykube/barong/tree/2.1.3) (2019-03-19) +[Full Changelog](https://github.com/rubykube/barong/compare/2.1.2...2.1.3) + +**Closed issues:** + +- Update Gemfile.lock to fix github vulnerabilities alert [\#808](https://github.com/rubykube/barong/issues/808) +- Private key is invalid [\#798](https://github.com/rubykube/barong/issues/798) +- Recaptcha not working [\#797](https://github.com/rubykube/barong/issues/797) +- Ask [\#796](https://github.com/rubykube/barong/issues/796) +- limit rows on activity not work [\#793](https://github.com/rubykube/barong/issues/793) +- add domain info inside events [\#792](https://github.com/rubykube/barong/issues/792) +- How to use file Local file storage in production env? [\#764](https://github.com/rubykube/barong/issues/764) +- Routing error [\#752](https://github.com/rubykube/barong/issues/752) +- Fix documentation [\#748](https://github.com/rubykube/barong/issues/748) +- Drop confirm\_password check on change password endpoing [\#744](https://github.com/rubykube/barong/issues/744) +- Configuration mail [\#729](https://github.com/rubykube/barong/issues/729) +- Rework errors to be strict to one standard [\#728](https://github.com/rubykube/barong/issues/728) +- Generate changelog [\#715](https://github.com/rubykube/barong/issues/715) +- Ability to specify multiple cors in 1.8 [\#708](https://github.com/rubykube/barong/issues/708) +- \[Feature Request\] Add the ability to search user by email on barong admin page [\#635](https://github.com/rubykube/barong/issues/635) + +**Merged pull requests:** + +- Update rails-related gems versions in favor of vulnerability alerts [\#809](https://github.com/rubykube/barong/pull/809) ([ec](https://github.com/ec)) +- Allow to list API Keys without providing OTP code [\#807](https://github.com/rubykube/barong/pull/807) ([ec](https://github.com/ec)) +- API user activity sort desc [\#804](https://github.com/rubykube/barong/pull/804) ([mkalenska](https://github.com/mkalenska)) +- Add ability to search users by labels [\#800](https://github.com/rubykube/barong/pull/800) ([mkalenska](https://github.com/mkalenska)) +- Improve language support in event API, add domain info inside event [\#791](https://github.com/rubykube/barong/pull/791) ([ec](https://github.com/ec)) + +## [2.1.2](https://github.com/rubykube/barong/tree/2.1.2) (2019-03-01) +[Full Changelog](https://github.com/rubykube/barong/compare/2.1.1...2.1.2) + +**Merged pull requests:** + +- Use 'paginate' on api/v2/admin/users/search [\#789](https://github.com/rubykube/barong/pull/789) ([ec](https://github.com/ec)) + +## [2.1.1](https://github.com/rubykube/barong/tree/2.1.1) (2019-03-01) +[Full Changelog](https://github.com/rubykube/barong/compare/2.1.0...2.1.1) + +**Closed issues:** + +- withCredentials error [\#788](https://github.com/rubykube/barong/issues/788) +- Include Activity info in response on endpoint: GET admin/users/:uid [\#785](https://github.com/rubykube/barong/issues/785) + +**Merged pull requests:** + +- Add Entities::Activity model, include it Entities::UserWithFullInfo [\#786](https://github.com/rubykube/barong/pull/786) ([ec](https://github.com/ec)) + +## [2.1.0](https://github.com/rubykube/barong/tree/2.1.0) (2019-02-27) +[Full Changelog](https://github.com/rubykube/barong/compare/2.0.51...2.1.0) + +**Merged pull requests:** + +- Start 2.1 development\[ci skip\] [\#787](https://github.com/rubykube/barong/pull/787) ([ec](https://github.com/ec)) +- Update REST API documentation to v2.0.51\[ci skip\] [\#783](https://github.com/rubykube/barong/pull/783) ([ec](https://github.com/ec)) + +## [2.0.51](https://github.com/rubykube/barong/tree/2.0.51) (2019-02-26) +[Full Changelog](https://github.com/rubykube/barong/compare/2.0.50...2.0.51) + +**Merged pull requests:** + +- Feature/validation errors [\#774](https://github.com/rubykube/barong/pull/774) ([ec](https://github.com/ec)) + +## [2.0.50](https://github.com/rubykube/barong/tree/2.0.50) (2019-02-26) +[Full Changelog](https://github.com/rubykube/barong/compare/2.0.49-alpha...2.0.50) + +**Merged pull requests:** + +- Remove "-alpha" from version name [\#782](https://github.com/rubykube/barong/pull/782) ([ec](https://github.com/ec)) +- Account api improvements \(management module\) [\#773](https://github.com/rubykube/barong/pull/773) ([ec](https://github.com/ec)) + +## [2.0.49-alpha](https://github.com/rubykube/barong/tree/2.0.49-alpha) (2019-02-25) +[Full Changelog](https://github.com/rubykube/barong/compare/2.0.48-alpha...2.0.49-alpha) + +**Merged pull requests:** + +- Search implementation \(admin api\) [\#769](https://github.com/rubykube/barong/pull/769) ([ec](https://github.com/ec)) + +## [2.0.48-alpha](https://github.com/rubykube/barong/tree/2.0.48-alpha) (2019-02-25) +[Full Changelog](https://github.com/rubykube/barong/compare/2.0.47-alpha...2.0.48-alpha) + +**Merged pull requests:** + +- Configure api-pagination tool, add api keys pagination [\#780](https://github.com/rubykube/barong/pull/780) ([ec](https://github.com/ec)) + +## [2.0.47-alpha](https://github.com/rubykube/barong/tree/2.0.47-alpha) (2019-02-25) +[Full Changelog](https://github.com/rubykube/barong/compare/2.0.46-alpha...2.0.47-alpha) + +**Closed issues:** + +- \[TO CHECK\] Level is not recalculated on labels delete [\#775](https://github.com/rubykube/barong/issues/775) + +**Merged pull requests:** + +- Use destroy instead of delete to enable missing validations [\#776](https://github.com/rubykube/barong/pull/776) ([ec](https://github.com/ec)) + +## [2.0.46-alpha](https://github.com/rubykube/barong/tree/2.0.46-alpha) (2019-02-20) +[Full Changelog](https://github.com/rubykube/barong/compare/2.0.45-alpha...2.0.46-alpha) + +**Closed issues:** + +- Split activity error [\#743](https://github.com/rubykube/barong/issues/743) + +**Merged pull requests:** + +- Split activity no records error to wrong\_topic and no\_activity [\#772](https://github.com/rubykube/barong/pull/772) ([ec](https://github.com/ec)) + +## [2.0.45-alpha](https://github.com/rubykube/barong/tree/2.0.45-alpha) (2019-02-20) +[Full Changelog](https://github.com/rubykube/barong/compare/2.0.44-alpha...2.0.45-alpha) + +**Merged pull requests:** + +- Add pagination on /resource/users/activity endpoint [\#771](https://github.com/rubykube/barong/pull/771) ([ec](https://github.com/ec)) + +## [2.0.44-alpha](https://github.com/rubykube/barong/tree/2.0.44-alpha) (2019-02-18) +[Full Changelog](https://github.com/rubykube/barong/compare/2.0.43-alpha...2.0.44-alpha) + +**Closed issues:** + +- authz unexpected behaivor with incorrect api\_key [\#770](https://github.com/rubykube/barong/issues/770) +- Api keys error [\#761](https://github.com/rubykube/barong/issues/761) + +**Merged pull requests:** + +- Add more API Key validations, fix error on creating with invalid algo [\#768](https://github.com/rubykube/barong/pull/768) ([ec](https://github.com/ec)) + +## [2.0.43-alpha](https://github.com/rubykube/barong/tree/2.0.43-alpha) (2019-02-15) +[Full Changelog](https://github.com/rubykube/barong/compare/2.0.42-alpha...2.0.43-alpha) + +**Closed issues:** + +- Allow user get on a base of additional fields \(not only uid\) [\#762](https://github.com/rubykube/barong/issues/762) + +**Merged pull requests:** + +- User controller improvements \(management module\) [\#763](https://github.com/rubykube/barong/pull/763) ([ec](https://github.com/ec)) + +## [2.0.42-alpha](https://github.com/rubykube/barong/tree/2.0.42-alpha) (2019-02-15) +[Full Changelog](https://github.com/rubykube/barong/compare/2.0.41-alpha...2.0.42-alpha) + +**Merged pull requests:** + +- Add language field in reset pass and confirm acc events [\#767](https://github.com/rubykube/barong/pull/767) ([ec](https://github.com/ec)) + +## [2.0.41-alpha](https://github.com/rubykube/barong/tree/2.0.41-alpha) (2019-02-07) +[Full Changelog](https://github.com/rubykube/barong/compare/2.0.40-alpha...2.0.41-alpha) + +**Closed issues:** + +- Return specific error for banned users [\#754](https://github.com/rubykube/barong/issues/754) + +**Merged pull requests:** + +- Add additional error on login in case of banned user [\#760](https://github.com/rubykube/barong/pull/760) ([ec](https://github.com/ec)) + +## [2.0.40-alpha](https://github.com/rubykube/barong/tree/2.0.40-alpha) (2019-02-07) +[Full Changelog](https://github.com/rubykube/barong/compare/2.0.39-alpha...2.0.40-alpha) + +**Closed issues:** + +- Phone api improvement [\#746](https://github.com/rubykube/barong/issues/746) +- Event api doc v2 [\#735](https://github.com/rubykube/barong/issues/735) + +**Merged pull requests:** + +- Phone API improvements [\#747](https://github.com/rubykube/barong/pull/747) ([ec](https://github.com/ec)) +- Added event API documentation with examples [\#745](https://github.com/rubykube/barong/pull/745) ([ec](https://github.com/ec)) +- API errors unifying [\#741](https://github.com/rubykube/barong/pull/741) ([ec](https://github.com/ec)) + +## [2.0.39-alpha](https://github.com/rubykube/barong/tree/2.0.39-alpha) (2019-02-06) +[Full Changelog](https://github.com/rubykube/barong/compare/2.0.38-alpha...2.0.39-alpha) + +**Closed issues:** + +- Vault secret is an object and not assignable to string. [\#756](https://github.com/rubykube/barong/issues/756) +- Remove unnecessary call merge func [\#755](https://github.com/rubykube/barong/issues/755) + +**Merged pull requests:** + +- Take only data from Vault::Secret object && minor refactoring [\#757](https://github.com/rubykube/barong/pull/757) ([ec](https://github.com/ec)) + +## [2.0.38-alpha](https://github.com/rubykube/barong/tree/2.0.38-alpha) (2019-02-05) +[Full Changelog](https://github.com/rubykube/barong/compare/2.0.37-alpha...2.0.38-alpha) + +**Merged pull requests:** + +- Change default set-cookie header policy on authz to :skip [\#753](https://github.com/rubykube/barong/pull/753) ([ec](https://github.com/ec)) + +## [2.0.37-alpha](https://github.com/rubykube/barong/tree/2.0.37-alpha) (2019-01-31) +[Full Changelog](https://github.com/rubykube/barong/compare/2.0.36-alpha...2.0.37-alpha) + +**Closed issues:** + +- Session\_id doesnt have any influence on session authorizer [\#751](https://github.com/rubykube/barong/issues/751) +- Session\_id doesnt have any influence on session. [\#750](https://github.com/rubykube/barong/issues/750) +- Missing 'present user, with: API::V2::Entities::User' in response on 2fa login [\#740](https://github.com/rubykube/barong/issues/740) + +**Merged pull requests:** + +- Fix session\_id check & add bypass session lazy load [\#749](https://github.com/rubykube/barong/pull/749) ([ec](https://github.com/ec)) + +## [2.0.36-alpha](https://github.com/rubykube/barong/tree/2.0.36-alpha) (2019-01-25) +[Full Changelog](https://github.com/rubykube/barong/compare/2.0.35-alpha...2.0.36-alpha) + +**Merged pull requests:** + +- Add missing user details in 2fa login response [\#742](https://github.com/rubykube/barong/pull/742) ([ec](https://github.com/ec)) + +## [2.0.35-alpha](https://github.com/rubykube/barong/tree/2.0.35-alpha) (2019-01-22) +[Full Changelog](https://github.com/rubykube/barong/compare/2.0.34-alpha...2.0.35-alpha) + +**Closed issues:** + +- CORS problem in production environment [\#738](https://github.com/rubykube/barong/issues/738) + +**Merged pull requests:** + +- Fix Barong::CORS load problem in production env [\#739](https://github.com/rubykube/barong/pull/739) ([ec](https://github.com/ec)) + +## [2.0.34-alpha](https://github.com/rubykube/barong/tree/2.0.34-alpha) (2019-01-21) +[Full Changelog](https://github.com/rubykube/barong/compare/2.0.33-alpha...2.0.34-alpha) + +**Merged pull requests:** + +- Configure redis and add JTI blacklisting [\#734](https://github.com/rubykube/barong/pull/734) ([ec](https://github.com/ec)) + +## [2.0.33-alpha](https://github.com/rubykube/barong/tree/2.0.33-alpha) (2019-01-21) +[Full Changelog](https://github.com/rubykube/barong/compare/2.0.32-alpha...2.0.33-alpha) + +**Closed issues:** + +- Invalid session cookies returns on session logout [\#733](https://github.com/rubykube/barong/issues/733) +- Password Reset Token doesn't expire [\#727](https://github.com/rubykube/barong/issues/727) +- logging phone verification code may not be secure [\#647](https://github.com/rubykube/barong/issues/647) + +**Merged pull requests:** + +- Fix change code on phone initialize, remove code from logs [\#730](https://github.com/rubykube/barong/pull/730) ([ec](https://github.com/ec)) + +## [2.0.32-alpha](https://github.com/rubykube/barong/tree/2.0.32-alpha) (2019-01-21) +[Full Changelog](https://github.com/rubykube/barong/compare/2.0.31-alpha...2.0.32-alpha) + +**Closed issues:** + +- Split swagger docs to management and restfull api [\#712](https://github.com/rubykube/barong/issues/712) + +**Merged pull requests:** + +- Add storage envs in config store and update fetch logic [\#737](https://github.com/rubykube/barong/pull/737) ([ec](https://github.com/ec)) + +## [2.0.31-alpha](https://github.com/rubykube/barong/tree/2.0.31-alpha) (2019-01-16) +[Full Changelog](https://github.com/rubykube/barong/compare/2.0.30-alpha...2.0.31-alpha) + +**Closed issues:** + +- Admin api to promote member to admin or decrease [\#719](https://github.com/rubykube/barong/issues/719) +- Admin api to disable users 2fa [\#717](https://github.com/rubykube/barong/issues/717) +- Add Cors middleware to v2 branch [\#711](https://github.com/rubykube/barong/issues/711) +- Make session to be created only in sessions controller [\#710](https://github.com/rubykube/barong/issues/710) + +**Merged pull requests:** + +- Split swagger doc into restful and management [\#713](https://github.com/rubykube/barong/pull/713) ([ec](https://github.com/ec)) + +## [2.0.30-alpha](https://github.com/rubykube/barong/tree/2.0.30-alpha) (2019-01-16) +[Full Changelog](https://github.com/rubykube/barong/compare/2.0.29-alpha...2.0.30-alpha) + +## [2.0.29-alpha](https://github.com/rubykube/barong/tree/2.0.29-alpha) (2019-01-16) +[Full Changelog](https://github.com/rubykube/barong/compare/2.0.28-alpha...2.0.29-alpha) + +## [2.0.28-alpha](https://github.com/rubykube/barong/tree/2.0.28-alpha) (2019-01-16) +[Full Changelog](https://github.com/rubykube/barong/compare/2.0.27-alpha...2.0.28-alpha) + +**Merged pull requests:** + +- Add admin api functionality on user update [\#722](https://github.com/rubykube/barong/pull/722) ([ec](https://github.com/ec)) + +## [2.0.27-alpha](https://github.com/rubykube/barong/tree/2.0.27-alpha) (2019-01-16) +[Full Changelog](https://github.com/rubykube/barong/compare/2.0.26-alpha...2.0.27-alpha) + +**Closed issues:** + +- Change password endpoint action should be `put` instead of `post` [\#723](https://github.com/rubykube/barong/issues/723) + +**Merged pull requests:** + +- Fix change password api action from post to put [\#724](https://github.com/rubykube/barong/pull/724) ([m-an](https://github.com/m-an)) + +## [2.0.26-alpha](https://github.com/rubykube/barong/tree/2.0.26-alpha) (2019-01-16) +[Full Changelog](https://github.com/rubykube/barong/compare/2.0.25-alpha...2.0.26-alpha) + +**Merged pull requests:** + +- Change regex validations to support different language characters [\#726](https://github.com/rubykube/barong/pull/726) ([ec](https://github.com/ec)) +- Add an ability to specify CORS\(multiple\) [\#716](https://github.com/rubykube/barong/pull/716) ([ec](https://github.com/ec)) + +## [2.0.25-alpha](https://github.com/rubykube/barong/tree/2.0.25-alpha) (2019-01-16) +[Full Changelog](https://github.com/rubykube/barong/compare/2.0.24-alpha...2.0.25-alpha) + +**Merged pull requests:** + +- Updating to ruby 2.6.0 [\#707](https://github.com/rubykube/barong/pull/707) ([mod](https://github.com/mod)) +- Add ability to lock account, add filter for state on admin index [\#701](https://github.com/rubykube/barong/pull/701) ([ec](https://github.com/ec)) + +## [2.0.24-alpha](https://github.com/rubykube/barong/tree/2.0.24-alpha) (2019-01-11) +[Full Changelog](https://github.com/rubykube/barong/compare/2.0.23-alpha...2.0.24-alpha) + +**Closed issues:** + +- Documents label bug [\#714](https://github.com/rubykube/barong/issues/714) + +**Merged pull requests:** + +- Add expirable session [\#720](https://github.com/rubykube/barong/pull/720) ([m-an](https://github.com/m-an)) +- Move ActionDispatch::Session::CookieStore to sessions controller [\#718](https://github.com/rubykube/barong/pull/718) ([ec](https://github.com/ec)) + +## [2.0.23-alpha](https://github.com/rubykube/barong/tree/2.0.23-alpha) (2019-01-09) +[Full Changelog](https://github.com/rubykube/barong/compare/2.0.22-alpha...2.0.23-alpha) + +**Closed issues:** + +- Multi-label levels [\#680](https://github.com/rubykube/barong/issues/680) + +**Merged pull requests:** + +- Add referral\_id to users table and as an optional param on signup [\#709](https://github.com/rubykube/barong/pull/709) ([ec](https://github.com/ec)) + +## [2.0.22-alpha](https://github.com/rubykube/barong/tree/2.0.22-alpha) (2019-01-03) +[Full Changelog](https://github.com/rubykube/barong/compare/2.0.21-alpha...2.0.22-alpha) + +**Closed issues:** + +- Event API model.user.updated bug [\#690](https://github.com/rubykube/barong/issues/690) + +**Merged pull requests:** + +- Add users entity on login and /me [\#706](https://github.com/rubykube/barong/pull/706) ([ec](https://github.com/ec)) +- Small fixes of event api and lock feature [\#705](https://github.com/rubykube/barong/pull/705) ([ec](https://github.com/ec)) +- Small fixes of event api and lock feature [\#704](https://github.com/rubykube/barong/pull/704) ([ec](https://github.com/ec)) +- Add ability to lock account, add filter for state on admin index [\#700](https://github.com/rubykube/barong/pull/700) ([ec](https://github.com/ec)) + +## [2.0.21-alpha](https://github.com/rubykube/barong/tree/2.0.21-alpha) (2018-12-26) +[Full Changelog](https://github.com/rubykube/barong/compare/v2.0.20-alpha...2.0.21-alpha) + +**Closed issues:** + +- CarrierWave::Storage::Fog unitialized constant in prod mode [\#698](https://github.com/rubykube/barong/issues/698) + +**Merged pull requests:** + +- Small fixes \(drone ci, event api updated\_at bug\) [\#702](https://github.com/rubykube/barong/pull/702) ([ec](https://github.com/ec)) + +## [v2.0.20-alpha](https://github.com/rubykube/barong/tree/v2.0.20-alpha) (2018-12-25) +[Full Changelog](https://github.com/rubykube/barong/compare/v2.0.19-alpha...v2.0.20-alpha) + +**Closed issues:** + +- Codeclimate [\#691](https://github.com/rubykube/barong/issues/691) + +**Merged pull requests:** + +- Add carrierwave config for production [\#699](https://github.com/rubykube/barong/pull/699) ([alinetskyi](https://github.com/alinetskyi)) + +## [v2.0.19-alpha](https://github.com/rubykube/barong/tree/v2.0.19-alpha) (2018-12-24) +[Full Changelog](https://github.com/rubykube/barong/compare/v2.0.18-alpha...v2.0.19-alpha) + +**Merged pull requests:** + +- Admin update label func and resourse api labels CRUD [\#696](https://github.com/rubykube/barong/pull/696) ([ec](https://github.com/ec)) + +## [v2.0.18-alpha](https://github.com/rubykube/barong/tree/v2.0.18-alpha) (2018-12-24) +[Full Changelog](https://github.com/rubykube/barong/compare/v2.0.17-alpha...v2.0.18-alpha) + +**Merged pull requests:** + +- Add label on profile adding without level increase [\#697](https://github.com/rubykube/barong/pull/697) ([ec](https://github.com/ec)) + +## [v2.0.17-alpha](https://github.com/rubykube/barong/tree/v2.0.17-alpha) (2018-12-24) +[Full Changelog](https://github.com/rubykube/barong/compare/2.0.16-alpha...v2.0.17-alpha) + +**Merged pull requests:** + +- Update the Drone CI to replace Travis and DockerHub [\#695](https://github.com/rubykube/barong/pull/695) ([vshatravenko](https://github.com/vshatravenko)) +- AuthZ move to controller and lib [\#686](https://github.com/rubykube/barong/pull/686) ([ec](https://github.com/ec)) + +## [2.0.16-alpha](https://github.com/rubykube/barong/tree/2.0.16-alpha) (2018-12-20) +[Full Changelog](https://github.com/rubykube/barong/compare/2.0.15-alpha...2.0.16-alpha) + +**Merged pull requests:** + +- Added missing event with confirmation token on signup [\#694](https://github.com/rubykube/barong/pull/694) ([ec](https://github.com/ec)) + +## [2.0.15-alpha](https://github.com/rubykube/barong/tree/2.0.15-alpha) (2018-12-19) +[Full Changelog](https://github.com/rubykube/barong/compare/2.0.14-alpha...2.0.15-alpha) + +**Closed issues:** + +- RuntimeError: No EVENT\_API\_JWT\_PRIVATE\_KEY found in env! [\#692](https://github.com/rubykube/barong/issues/692) +- remove ability to save the same phone numbers for user [\#689](https://github.com/rubykube/barong/issues/689) +- Call for change password [\#687](https://github.com/rubykube/barong/issues/687) +- GeeTest.com captcha integration on Barong v2 [\#659](https://github.com/rubykube/barong/issues/659) +- Ability to fetch my login history from API [\#524](https://github.com/rubykube/barong/issues/524) + +**Merged pull requests:** + +- Change multiple docs uploading logic from object to array [\#693](https://github.com/rubykube/barong/pull/693) ([ec](https://github.com/ec)) + +## [2.0.14-alpha](https://github.com/rubykube/barong/tree/2.0.14-alpha) (2018-12-17) +[Full Changelog](https://github.com/rubykube/barong/compare/2.0.13-alpha...2.0.14-alpha) + +**Closed issues:** + +- \[Barong v2\] Levels update issue [\#676](https://github.com/rubykube/barong/issues/676) + +**Merged pull requests:** + +- Add change password endpoint [\#688](https://github.com/rubykube/barong/pull/688) ([m-an](https://github.com/m-an)) +- Feature/admin api [\#681](https://github.com/rubykube/barong/pull/681) ([ec](https://github.com/ec)) +- GeeTest.com captcha integration on Barong v2 [\#665](https://github.com/rubykube/barong/pull/665) ([bodiasuprun](https://github.com/bodiasuprun)) + +## [2.0.13-alpha](https://github.com/rubykube/barong/tree/2.0.13-alpha) (2018-12-12) +[Full Changelog](https://github.com/rubykube/barong/compare/2.0.12-alpha...2.0.13-alpha) + +**Merged pull requests:** + +- Update the production database configuration with DATABASE\_NAME from env [\#685](https://github.com/rubykube/barong/pull/685) ([vshatravenko](https://github.com/vshatravenko)) + +## [2.0.12-alpha](https://github.com/rubykube/barong/tree/2.0.12-alpha) (2018-12-11) +[Full Changelog](https://github.com/rubykube/barong/compare/2.0.11-alpha...2.0.12-alpha) + +**Merged pull requests:** + +- Add link\_config script [\#684](https://github.com/rubykube/barong/pull/684) ([alinetskyi](https://github.com/alinetskyi)) + +## [2.0.11-alpha](https://github.com/rubykube/barong/tree/2.0.11-alpha) (2018-12-10) +[Full Changelog](https://github.com/rubykube/barong/compare/2.0.10-alpha...2.0.11-alpha) + +**Merged pull requests:** + +- Hotfix for whitelisting public peatio and barong routes [\#683](https://github.com/rubykube/barong/pull/683) ([ec](https://github.com/ec)) +- Hotfix for whitelisting public peatio and barong routes [\#682](https://github.com/rubykube/barong/pull/682) ([ec](https://github.com/ec)) +- Add base swagger configuration and documentation for API [\#669](https://github.com/rubykube/barong/pull/669) ([ec](https://github.com/ec)) + +## [2.0.10-alpha](https://github.com/rubykube/barong/tree/2.0.10-alpha) (2018-12-10) +[Full Changelog](https://github.com/rubykube/barong/compare/2.0.9-alpha...2.0.10-alpha) + +## [2.0.9-alpha](https://github.com/rubykube/barong/tree/2.0.9-alpha) (2018-12-09) +[Full Changelog](https://github.com/rubykube/barong/compare/2.0.8-alpha...2.0.9-alpha) + +**Closed issues:** + +- \[Barong v2\] User activity api endpoint improvments [\#663](https://github.com/rubykube/barong/issues/663) +- \[Barong v2\] Document upload multi pictures feature request [\#661](https://github.com/rubykube/barong/issues/661) +- \[Barong v2\] Document upload limit [\#660](https://github.com/rubykube/barong/issues/660) + +## [2.0.8-alpha](https://github.com/rubykube/barong/tree/2.0.8-alpha) (2018-12-05) +[Full Changelog](https://github.com/rubykube/barong/compare/2.0.7-alpha...2.0.8-alpha) + +**Merged pull requests:** + +- Add ability to upload multiple documents [\#679](https://github.com/rubykube/barong/pull/679) ([alinetskyi](https://github.com/alinetskyi)) +- Improve activities coverage [\#677](https://github.com/rubykube/barong/pull/677) ([ec](https://github.com/ec)) + +## [2.0.7-alpha](https://github.com/rubykube/barong/tree/2.0.7-alpha) (2018-12-05) +[Full Changelog](https://github.com/rubykube/barong/compare/2.0.6-alpha...2.0.7-alpha) + +**Merged pull requests:** + +- Fix unhandled totp errors [\#675](https://github.com/rubykube/barong/pull/675) ([ec](https://github.com/ec)) + +## [2.0.6-alpha](https://github.com/rubykube/barong/tree/2.0.6-alpha) (2018-12-05) +[Full Changelog](https://github.com/rubykube/barong/compare/1.8.42...2.0.6-alpha) + +**Closed issues:** + +- \[Barong v2\] Add possibility to disable captcha in dev environment, for login and sign in. [\#668](https://github.com/rubykube/barong/issues/668) +- \[Barong v2\] Api\_Keys endpoint response with `500 internal server error` [\#662](https://github.com/rubykube/barong/issues/662) + +**Merged pull requests:** + +- Add codeclimate config file [\#678](https://github.com/rubykube/barong/pull/678) ([ec](https://github.com/ec)) + +## [1.8.42](https://github.com/rubykube/barong/tree/1.8.42) (2018-12-04) +[Full Changelog](https://github.com/rubykube/barong/compare/2.0.5-alpha...1.8.42) + +## [2.0.5-alpha](https://github.com/rubykube/barong/tree/2.0.5-alpha) (2018-12-04) +[Full Changelog](https://github.com/rubykube/barong/compare/1.9.1...2.0.5-alpha) + +**Closed issues:** + +- \[Barong v1.9,2\] Hard password, password reset bug. [\#667](https://github.com/rubykube/barong/issues/667) +- User documents are publicly visible by default \(carrierwave / fog\) [\#581](https://github.com/rubykube/barong/issues/581) + +**Merged pull requests:** + +- Unlock account after 1 hour of being locked [\#650](https://github.com/rubykube/barong/pull/650) ([m-an](https://github.com/m-an)) + +## [1.9.1](https://github.com/rubykube/barong/tree/1.9.1) (2018-12-04) +[Full Changelog](https://github.com/rubykube/barong/compare/1.8.41...1.9.1) + +**Merged pull requests:** + +- Make documents invisible publicly by changing fog policy [\#673](https://github.com/rubykube/barong/pull/673) ([ec](https://github.com/ec)) +- Make documents invisible publicly by changing fog policy [\#672](https://github.com/rubykube/barong/pull/672) ([ec](https://github.com/ec)) + +## [1.8.41](https://github.com/rubykube/barong/tree/1.8.41) (2018-12-03) +[Full Changelog](https://github.com/rubykube/barong/compare/2.0.4-alpha...1.8.41) + +**Closed issues:** + +- how to create new account by api? [\#670](https://github.com/rubykube/barong/issues/670) +- \[Bug\] Devise:Lockable:time Not working for User/api/V1 [\#636](https://github.com/rubykube/barong/issues/636) + +**Merged pull requests:** + +- Hotfix for rack\_attack [\#671](https://github.com/rubykube/barong/pull/671) ([alinetskyi](https://github.com/alinetskyi)) + +## [2.0.4-alpha](https://github.com/rubykube/barong/tree/2.0.4-alpha) (2018-11-29) +[Full Changelog](https://github.com/rubykube/barong/compare/1.8.40...2.0.4-alpha) + +**Merged pull requests:** + +- Added missing validations on password update functionality [\#674](https://github.com/rubykube/barong/pull/674) ([ec](https://github.com/ec)) +- Fix activities [\#664](https://github.com/rubykube/barong/pull/664) ([alinetskyi](https://github.com/alinetskyi)) +- Fix share cookies for development, fix Bump [\#658](https://github.com/rubykube/barong/pull/658) ([alinetskyi](https://github.com/alinetskyi)) + +## [1.8.40](https://github.com/rubykube/barong/tree/1.8.40) (2018-11-27) +[Full Changelog](https://github.com/rubykube/barong/compare/2.0.3-alpha...1.8.40) + +**Merged pull requests:** + +- Add filter by lvl [\#657](https://github.com/rubykube/barong/pull/657) ([vpetrusenko](https://github.com/vpetrusenko)) + +## [2.0.3-alpha](https://github.com/rubykube/barong/tree/2.0.3-alpha) (2018-11-26) +[Full Changelog](https://github.com/rubykube/barong/compare/2.0.2-alpha...2.0.3-alpha) + +## [2.0.2-alpha](https://github.com/rubykube/barong/tree/2.0.2-alpha) (2018-11-25) +[Full Changelog](https://github.com/rubykube/barong/compare/2.0.1-alpha...2.0.2-alpha) + +**Merged pull requests:** + +- Feature/seeder [\#655](https://github.com/rubykube/barong/pull/655) ([calj](https://github.com/calj)) + +## [2.0.1-alpha](https://github.com/rubykube/barong/tree/2.0.1-alpha) (2018-11-25) +[Full Changelog](https://github.com/rubykube/barong/compare/1.9.0...2.0.1-alpha) + +**Merged pull requests:** + +- Bump improvements [\#654](https://github.com/rubykube/barong/pull/654) ([alinetskyi](https://github.com/alinetskyi)) + +## [1.9.0](https://github.com/rubykube/barong/tree/1.9.0) (2018-11-24) +[Full Changelog](https://github.com/rubykube/barong/compare/1.8.39...1.9.0) + +## [1.8.39](https://github.com/rubykube/barong/tree/1.8.39) (2018-11-21) +[Full Changelog](https://github.com/rubykube/barong/compare/1.8.38...1.8.39) + +## [1.8.38](https://github.com/rubykube/barong/tree/1.8.38) (2018-11-21) +[Full Changelog](https://github.com/rubykube/barong/compare/1.8.37...1.8.38) + +**Merged pull requests:** + +- Add RabbitMQ middleware for event api [\#653](https://github.com/rubykube/barong/pull/653) ([vpetrusenko](https://github.com/vpetrusenko)) +- Add rack-attack and some API usage limits [\#652](https://github.com/rubykube/barong/pull/652) ([dnfd](https://github.com/dnfd)) +- Fix account unlocking \(account should be unlocked after 1 hour by default\) [\#649](https://github.com/rubykube/barong/pull/649) ([m-an](https://github.com/m-an)) + +## [1.8.37](https://github.com/rubykube/barong/tree/1.8.37) (2018-11-17) +[Full Changelog](https://github.com/rubykube/barong/compare/1.8.36...1.8.37) + +**Closed issues:** + +- wrong customer id or password,please try again [\#631](https://github.com/rubykube/barong/issues/631) +- How to edit devise\_error\_messages? [\#628](https://github.com/rubykube/barong/issues/628) +- mini\_racer can't be installed on Macos10.14 [\#615](https://github.com/rubykube/barong/issues/615) +- Rework Auth API documentation [\#602](https://github.com/rubykube/barong/issues/602) +- Error During Compilation [\#584](https://github.com/rubykube/barong/issues/584) +- \(barong\) Authentication failure! csrf\_detected: OmniAuth::Strategies::OAuth2::CallbackError, csrf\_detected | CSRF detected [\#559](https://github.com/rubykube/barong/issues/559) +- Document Upload - We're sorry, but something went wrong. - ArgumentError \( is not a recognized provider\) [\#555](https://github.com/rubykube/barong/issues/555) +- JWT Tokens [\#546](https://github.com/rubykube/barong/issues/546) +- Barong API Key Scopes not utilised in Peatio [\#540](https://github.com/rubykube/barong/issues/540) +- "Sign In With Barong" button is not shown [\#530](https://github.com/rubykube/barong/issues/530) +- How to get BARONG\_CLIENT\_ID, etc? [\#529](https://github.com/rubykube/barong/issues/529) +- User should be allowed to access their login history and receive email confirmation if they login from an unknown IP. [\#436](https://github.com/rubykube/barong/issues/436) + +**Merged pull requests:** + +- handle SMS\_CONTENT env variable [\#648](https://github.com/rubykube/barong/pull/648) ([vpetrusenko](https://github.com/vpetrusenko)) +- Fix AuthZ controller [\#646](https://github.com/rubykube/barong/pull/646) ([dmk](https://github.com/dmk)) +- Add a stronger validation for passwords [\#645](https://github.com/rubykube/barong/pull/645) ([alinetskyi](https://github.com/alinetskyi)) +- Add rack-attack and some API usage limits [\#643](https://github.com/rubykube/barong/pull/643) ([alinetskyi](https://github.com/alinetskyi)) + +## [1.8.36](https://github.com/rubykube/barong/tree/1.8.36) (2018-10-17) +[Full Changelog](https://github.com/rubykube/barong/compare/1.8.35...1.8.36) + +**Closed issues:** + +- How to custom dns? [\#621](https://github.com/rubykube/barong/issues/621) +- bundle exec rake db:create db:migrate - no implicit conversion of nil into String [\#620](https://github.com/rubykube/barong/issues/620) +- Vault::TOTP\#vaildate NoMethodError \(undefined method `data' for true:TrueClass\) [\#606](https://github.com/rubykube/barong/issues/606) +- Create scopes in api\_key as string instead array [\#585](https://github.com/rubykube/barong/issues/585) +- Remove/clean session API method [\#577](https://github.com/rubykube/barong/issues/577) +- Incorrect work variable SKIP\_EMAILS [\#572](https://github.com/rubykube/barong/issues/572) +- Social Sign In/Up Support [\#547](https://github.com/rubykube/barong/issues/547) +- 404 Error on api /v1/profiles/me when user's profile not found [\#534](https://github.com/rubykube/barong/issues/534) +- Merge login systems into 1 end-point with cookie [\#523](https://github.com/rubykube/barong/issues/523) +- Events API Rabbitmq middleware [\#518](https://github.com/rubykube/barong/issues/518) +- Support latest GDPR requiremts [\#510](https://github.com/rubykube/barong/issues/510) +- File uploaded, but system message is "error" type instead of "success" [\#310](https://github.com/rubykube/barong/issues/310) +- There is no SMS throttling \(possible to send as many SMS I as want\) [\#89](https://github.com/rubykube/barong/issues/89) + +**Merged pull requests:** + +- Add grape logger middleware [\#639](https://github.com/rubykube/barong/pull/639) ([alinetskyi](https://github.com/alinetskyi)) +- update bootstrap gem : 4.1.2 instead 4.0.0 [\#634](https://github.com/rubykube/barong/pull/634) ([Ohill](https://github.com/Ohill)) +- Fix bootstrap vulnerability by upgrading gem to 4.1.2 version [\#633](https://github.com/rubykube/barong/pull/633) ([Ohill](https://github.com/Ohill)) +- Fix issue with jwt in dev mode [\#630](https://github.com/rubykube/barong/pull/630) ([shal](https://github.com/shal)) +- Fix issue with hardcoded JWT\_SHARED\_SECRET\_KEY [\#629](https://github.com/rubykube/barong/pull/629) ([shal](https://github.com/shal)) +- Define minimum password length in ENV [\#626](https://github.com/rubykube/barong/pull/626) ([alinetskyi](https://github.com/alinetskyi)) +- Add grape logger middleware [\#624](https://github.com/rubykube/barong/pull/624) ([rxx](https://github.com/rxx)) +- Set cookies from /api/sessions [\#622](https://github.com/rubykube/barong/pull/622) ([rxx](https://github.com/rxx)) +- Fix: DEPRECATION WARNING [\#619](https://github.com/rubykube/barong/pull/619) ([ronaldoaraujo](https://github.com/ronaldoaraujo)) +- Allow to configure scopes from env [\#618](https://github.com/rubykube/barong/pull/618) ([rxx](https://github.com/rxx)) +- Verify captcha serverside if it's enabled [\#617](https://github.com/rubykube/barong/pull/617) ([chumaknadya](https://github.com/chumaknadya)) +- Allow to configure smtp url address [\#616](https://github.com/rubykube/barong/pull/616) ([rxx](https://github.com/rxx)) +- Save scopes in APIKey as serialized array \(closes \#585\) [\#597](https://github.com/rubykube/barong/pull/597) ([ysv](https://github.com/ysv)) +- Update api\_keys.md [\#592](https://github.com/rubykube/barong/pull/592) ([calj](https://github.com/calj)) +- README.md update steps to get project running [\#578](https://github.com/rubykube/barong/pull/578) ([skatkov](https://github.com/skatkov)) + +## [1.8.35](https://github.com/rubykube/barong/tree/1.8.35) (2018-09-21) +[Full Changelog](https://github.com/rubykube/barong/compare/1.8.34...1.8.35) + +**Merged pull requests:** + +- Add ROOT\_DOMAIN for configure sessions [\#612](https://github.com/rubykube/barong/pull/612) ([rxx](https://github.com/rxx)) +- Add ROOT\_DOMAIN for configure sessions [\#611](https://github.com/rubykube/barong/pull/611) ([rxx](https://github.com/rxx)) +- Dont let not active accounts to sign in [\#600](https://github.com/rubykube/barong/pull/600) ([rxx](https://github.com/rxx)) +- barong fixing security flags in docs [\#596](https://github.com/rubykube/barong/pull/596) ([imarakhovskiy](https://github.com/imarakhovskiy)) + +## [1.8.34](https://github.com/rubykube/barong/tree/1.8.34) (2018-09-21) +[Full Changelog](https://github.com/rubykube/barong/compare/1.8.33...1.8.34) + +**Merged pull requests:** + +- Fix captcha and lockable errors [\#613](https://github.com/rubykube/barong/pull/613) ([rxx](https://github.com/rxx)) +- Fix message error [\#601](https://github.com/rubykube/barong/pull/601) ([mnaichuk](https://github.com/mnaichuk)) + +## [1.8.33](https://github.com/rubykube/barong/tree/1.8.33) (2018-09-21) +[Full Changelog](https://github.com/rubykube/barong/compare/1.8.32...1.8.33) + +**Merged pull requests:** + +- Verify captcha serverside if it's enabled [\#610](https://github.com/rubykube/barong/pull/610) ([rxx](https://github.com/rxx)) + +## [1.8.32](https://github.com/rubykube/barong/tree/1.8.32) (2018-09-20) +[Full Changelog](https://github.com/rubykube/barong/compare/1.8.31...1.8.32) + +**Merged pull requests:** + +- Fix message error [\#609](https://github.com/rubykube/barong/pull/609) ([mnaichuk](https://github.com/mnaichuk)) +- Dont let not active accounts to sign in [\#608](https://github.com/rubykube/barong/pull/608) ([rxx](https://github.com/rxx)) +- \#PPBB-45: Allow to configure multiple CORS at barong [\#607](https://github.com/rubykube/barong/pull/607) ([rxx](https://github.com/rxx)) + +## [1.8.31](https://github.com/rubykube/barong/tree/1.8.31) (2018-09-19) +[Full Changelog](https://github.com/rubykube/barong/compare/1.8.30...1.8.31) + +## [1.8.30](https://github.com/rubykube/barong/tree/1.8.30) (2018-09-15) +[Full Changelog](https://github.com/rubykube/barong/compare/1.8.29...1.8.30) + +**Closed issues:** + +- Update rails gem to 5.2 [\#573](https://github.com/rubykube/barong/issues/573) + +**Merged pull requests:** + +- Create jwt by session [\#599](https://github.com/rubykube/barong/pull/599) ([rxx](https://github.com/rxx)) +- Merge latest changes from 1-8-stable to master [\#598](https://github.com/rubykube/barong/pull/598) ([rxx](https://github.com/rxx)) +- Update gem dependences [\#595](https://github.com/rubykube/barong/pull/595) ([rxx](https://github.com/rxx)) +- Fix doorkeeper CVE-2018-1000211 vulnerability [\#590](https://github.com/rubykube/barong/pull/590) ([rxx](https://github.com/rxx)) +- Fix doorkeeper CVE-2018-1000211 vulnerability [\#589](https://github.com/rubykube/barong/pull/589) ([rxx](https://github.com/rxx)) +- Add endpoint to create and import accounts with managment api [\#587](https://github.com/rubykube/barong/pull/587) ([rxx](https://github.com/rxx)) +- Update api keys docs [\#586](https://github.com/rubykube/barong/pull/586) ([mnaichuk](https://github.com/mnaichuk)) +- Update ruby and rails versions \(closes \#573\) [\#582](https://github.com/rubykube/barong/pull/582) ([shal](https://github.com/shal)) +- Create correct labels when seed accounts [\#579](https://github.com/rubykube/barong/pull/579) ([shal](https://github.com/shal)) + +## [1.8.29](https://github.com/rubykube/barong/tree/1.8.29) (2018-07-23) +[Full Changelog](https://github.com/rubykube/barong/compare/1.8.28...1.8.29) + +**Closed issues:** + +- User session is maintained when signing out from 1 of the 2 apps [\#571](https://github.com/rubykube/barong/issues/571) +- Signed in user gets message from previous user activity [\#570](https://github.com/rubykube/barong/issues/570) + +**Merged pull requests:** + +- Update api\_keys.md [\#575](https://github.com/rubykube/barong/pull/575) ([rxx](https://github.com/rxx)) +- Update api\_keys.md [\#574](https://github.com/rubykube/barong/pull/574) ([rxx](https://github.com/rxx)) + +## [1.8.28](https://github.com/rubykube/barong/tree/1.8.28) (2018-07-18) +[Full Changelog](https://github.com/rubykube/barong/compare/1.8.27...1.8.28) + +**Merged pull requests:** + +- Revert "Generate api on bump stage" [\#569](https://github.com/rubykube/barong/pull/569) ([rxx](https://github.com/rxx)) +- Allow pdf on barong form [\#568](https://github.com/rubykube/barong/pull/568) ([rxx](https://github.com/rxx)) +- Generate api on bump stage [\#567](https://github.com/rubykube/barong/pull/567) ([rxx](https://github.com/rxx)) +- Feature/vault security [\#566](https://github.com/rubykube/barong/pull/566) ([rxx](https://github.com/rxx)) + +## [1.8.27](https://github.com/rubykube/barong/tree/1.8.27) (2018-07-16) +[Full Changelog](https://github.com/rubykube/barong/compare/1.8.26...1.8.27) + +**Closed issues:** + +- Otp sign request unexpected behavior [\#545](https://github.com/rubykube/barong/issues/545) +- Add validation to "Document number" on the new document upload page [\#497](https://github.com/rubykube/barong/issues/497) + +**Merged pull requests:** + +- Add restrictions for expire\_in and number of documents [\#565](https://github.com/rubykube/barong/pull/565) ([rxx](https://github.com/rxx)) +- Get all labels with managment api [\#564](https://github.com/rubykube/barong/pull/564) ([rxx](https://github.com/rxx)) + +## [1.8.26](https://github.com/rubykube/barong/tree/1.8.26) (2018-07-10) +[Full Changelog](https://github.com/rubykube/barong/compare/1.8.25...1.8.26) + +**Closed issues:** + +- The server Barong\(1.8-stable\) doesnot send sms code at all. [\#562](https://github.com/rubykube/barong/issues/562) + +**Merged pull requests:** + +- Countries alpha2 alpha3 [\#563](https://github.com/rubykube/barong/pull/563) ([rxx](https://github.com/rxx)) +- Return understandable vault error, log full message [\#561](https://github.com/rubykube/barong/pull/561) ([rxx](https://github.com/rxx)) + +## [1.8.25](https://github.com/rubykube/barong/tree/1.8.25) (2018-07-06) +[Full Changelog](https://github.com/rubykube/barong/compare/1.8.24...1.8.25) + +**Merged pull requests:** + +- Create correct labels when seed accounts [\#560](https://github.com/rubykube/barong/pull/560) ([rxx](https://github.com/rxx)) +- Fix CVE-2018-3760 bug [\#557](https://github.com/rubykube/barong/pull/557) ([rxx](https://github.com/rxx)) + +## [1.8.24](https://github.com/rubykube/barong/tree/1.8.24) (2018-07-04) +[Full Changelog](https://github.com/rubykube/barong/compare/1.8.23...1.8.24) + +**Merged pull requests:** + +- Fix CVE-2018-3760 bug [\#558](https://github.com/rubykube/barong/pull/558) ([rxx](https://github.com/rxx)) + +## [1.8.23](https://github.com/rubykube/barong/tree/1.8.23) (2018-07-03) +[Full Changelog](https://github.com/rubykube/barong/compare/1.8.22...1.8.23) + +**Closed issues:** + +- Fix issue with lockable on sessions api [\#479](https://github.com/rubykube/barong/issues/479) +- Ability to limit rate on login API [\#440](https://github.com/rubykube/barong/issues/440) + +**Merged pull requests:** + +- Add validations to document [\#551](https://github.com/rubykube/barong/pull/551) ([rxx](https://github.com/rxx)) +- All new patches from 1-8-stable upto 1.8.22 [\#543](https://github.com/rubykube/barong/pull/543) ([rxx](https://github.com/rxx)) + +## [1.8.22](https://github.com/rubykube/barong/tree/1.8.22) (2018-06-26) +[Full Changelog](https://github.com/rubykube/barong/compare/1.8.21...1.8.22) + +**Merged pull requests:** + +- Fix wrong field in accounts/get [\#552](https://github.com/rubykube/barong/pull/552) ([rxx](https://github.com/rxx)) +- Lockable in API [\#544](https://github.com/rubykube/barong/pull/544) ([m-an](https://github.com/m-an)) + +## [1.8.21](https://github.com/rubykube/barong/tree/1.8.21) (2018-06-25) +[Full Changelog](https://github.com/rubykube/barong/compare/1.8.20...1.8.21) + +**Merged pull requests:** + +- Fixes docker image build [\#554](https://github.com/rubykube/barong/pull/554) ([shingonoide](https://github.com/shingonoide)) + +## [1.8.20](https://github.com/rubykube/barong/tree/1.8.20) (2018-06-22) +[Full Changelog](https://github.com/rubykube/barong/compare/1.8.19...1.8.20) + +**Closed issues:** + +- Add ability to run without Vault and show warning [\#346](https://github.com/rubykube/barong/issues/346) + +**Merged pull requests:** + +- Add email for Event API system.account.reset\_password\_token, system.account.unlock\_token events, system.document.verified, system.document.rejected [\#550](https://github.com/rubykube/barong/pull/550) ([mitjok](https://github.com/mitjok)) + +## [1.8.19](https://github.com/rubykube/barong/tree/1.8.19) (2018-06-22) +[Full Changelog](https://github.com/rubykube/barong/compare/1.8.18...1.8.19) + +**Merged pull requests:** + +- Moved documentation files [\#549](https://github.com/rubykube/barong/pull/549) ([calj](https://github.com/calj)) +- Compute code coverage report [\#542](https://github.com/rubykube/barong/pull/542) ([calj](https://github.com/calj)) + +## [1.8.18](https://github.com/rubykube/barong/tree/1.8.18) (2018-06-21) +[Full Changelog](https://github.com/rubykube/barong/compare/1.8.17...1.8.18) + +**Closed issues:** + +- Api endpoints to resend confirmation/unlock instructions [\#541](https://github.com/rubykube/barong/issues/541) +- Bug with extra "0" in phone number [\#499](https://github.com/rubykube/barong/issues/499) + +**Merged pull requests:** + +- Management api config generation from template [\#539](https://github.com/rubykube/barong/pull/539) ([mitjok](https://github.com/mitjok)) + +## [1.8.17](https://github.com/rubykube/barong/tree/1.8.17) (2018-06-15) +[Full Changelog](https://github.com/rubykube/barong/compare/1.8.16...1.8.17) + +**Closed issues:** + +- Reset password link with CUSTOM URL [\#538](https://github.com/rubykube/barong/issues/538) +- A little error in API docs [\#536](https://github.com/rubykube/barong/issues/536) +- API allows Login Without 2FA for a 2FA Enabled Account [\#526](https://github.com/rubykube/barong/issues/526) +- Ability to disable 2FA from admin panel [\#521](https://github.com/rubykube/barong/issues/521) +- Ability to let frontend to know that account has enabled 2FA [\#520](https://github.com/rubykube/barong/issues/520) +- Management API: Add endpoints to fetch user information by uid [\#485](https://github.com/rubykube/barong/issues/485) +- API: Add endpoints to resend confirmation [\#480](https://github.com/rubykube/barong/issues/480) +- As an Admin I can disable / remove 2FA form a user [\#210](https://github.com/rubykube/barong/issues/210) +- 2FA signing service specs [\#151](https://github.com/rubykube/barong/issues/151) + +**Merged pull requests:** + +- Get international number from phonelib directly [\#504](https://github.com/rubykube/barong/pull/504) ([rxx](https://github.com/rxx)) + +## [1.8.16](https://github.com/rubykube/barong/tree/1.8.16) (2018-06-15) +[Full Changelog](https://github.com/rubykube/barong/compare/1.8.15...1.8.16) + +**Merged pull requests:** + +- Add account uid to system.notification.account [\#537](https://github.com/rubykube/barong/pull/537) ([rxx](https://github.com/rxx)) + +## [1.8.15](https://github.com/rubykube/barong/tree/1.8.15) (2018-06-14) +[Full Changelog](https://github.com/rubykube/barong/compare/1.8.14...1.8.15) + +**Merged pull requests:** + +- Check 2FA on Barong session api, stub vault request if vault server is down [\#522](https://github.com/rubykube/barong/pull/522) ([rxx](https://github.com/rxx)) +- Add account get endpoint for managment API [\#486](https://github.com/rubykube/barong/pull/486) ([rxx](https://github.com/rxx)) + +## [1.8.14](https://github.com/rubykube/barong/tree/1.8.14) (2018-06-14) +[Full Changelog](https://github.com/rubykube/barong/compare/1.8.13...1.8.14) + +**Merged pull requests:** + +- Add validations for profile, add datepicker and country select for profile admin panel [\#477](https://github.com/rubykube/barong/pull/477) ([rxx](https://github.com/rxx)) + +## [1.8.13](https://github.com/rubykube/barong/tree/1.8.13) (2018-06-12) +[Full Changelog](https://github.com/rubykube/barong/compare/1.8.12...1.8.13) + +**Closed issues:** + +- Event API has no raw devise token and has no ability to send reset password email [\#525](https://github.com/rubykube/barong/issues/525) +- Level Mapping on admin Panel [\#517](https://github.com/rubykube/barong/issues/517) +- On document varification user Level does not update to 3 [\#503](https://github.com/rubykube/barong/issues/503) +- Optimization application [\#501](https://github.com/rubykube/barong/issues/501) +- Ability to generate API key pair server-side [\#496](https://github.com/rubykube/barong/issues/496) +- Changing already created labels scope from private to public is not changing the level of users account. [\#476](https://github.com/rubykube/barong/issues/476) +- Can get stuck on the Phone verification step [\#466](https://github.com/rubykube/barong/issues/466) +- Check all required ENV in production environment and raise for missing vars [\#457](https://github.com/rubykube/barong/issues/457) +- Label's are supporting upper and lower cases. [\#454](https://github.com/rubykube/barong/issues/454) +- Validation or informative message on Uploaded large jpg for kyc passport [\#444](https://github.com/rubykube/barong/issues/444) +- Review all field types in forms [\#432](https://github.com/rubykube/barong/issues/432) +- Broken automatic tagging [\#361](https://github.com/rubykube/barong/issues/361) +- Captcha support for signup / login [\#356](https://github.com/rubykube/barong/issues/356) +- ActionController::InvalidAuthenticityToken [\#349](https://github.com/rubykube/barong/issues/349) +- Change success message from "created" to "uploaded" [\#334](https://github.com/rubykube/barong/issues/334) +- Ability to define favicon for website [\#331](https://github.com/rubykube/barong/issues/331) +- API to destroy session [\#286](https://github.com/rubykube/barong/issues/286) +- Plugin API specs [\#201](https://github.com/rubykube/barong/issues/201) +- Make a configuration class [\#200](https://github.com/rubykube/barong/issues/200) +- Ability to login with Google Account [\#175](https://github.com/rubykube/barong/issues/175) + +**Merged pull requests:** + +- Fix issues with levels [\#535](https://github.com/rubykube/barong/pull/535) ([rxx](https://github.com/rxx)) +- Feature/admin disable 2fa [\#533](https://github.com/rubykube/barong/pull/533) ([rxx](https://github.com/rxx)) +- Add otp sign endpoint [\#527](https://github.com/rubykube/barong/pull/527) ([rxx](https://github.com/rxx)) + +## [1.8.12](https://github.com/rubykube/barong/tree/1.8.12) (2018-06-11) +[Full Changelog](https://github.com/rubykube/barong/compare/1.8.11...1.8.12) + +**Merged pull requests:** + +- Set events with correct devise tokens [\#528](https://github.com/rubykube/barong/pull/528) ([rxx](https://github.com/rxx)) +- Add localization for grape required fields [\#515](https://github.com/rubykube/barong/pull/515) ([rxx](https://github.com/rxx)) +- Fix labels bug with changing scope [\#481](https://github.com/rubykube/barong/pull/481) ([m-an](https://github.com/m-an)) +- Feature/add favicon to website [\#473](https://github.com/rubykube/barong/pull/473) ([rxx](https://github.com/rxx)) + +## [1.8.11](https://github.com/rubykube/barong/tree/1.8.11) (2018-06-06) +[Full Changelog](https://github.com/rubykube/barong/compare/1.8.10...1.8.11) + +**Closed issues:** + +- Wrong customer ID or password,please try again. [\#509](https://github.com/rubykube/barong/issues/509) + +**Merged pull requests:** + +- Remove rack-cors [\#519](https://github.com/rubykube/barong/pull/519) ([rxx](https://github.com/rxx)) + +## [1.8.10](https://github.com/rubykube/barong/tree/1.8.10) (2018-06-06) +[Full Changelog](https://github.com/rubykube/barong/compare/1.8.9...1.8.10) + +**Closed issues:** + +- Add additional document type for uploading documents \(Utility Bill\) [\#489](https://github.com/rubykube/barong/issues/489) + +**Merged pull requests:** + +- Add CORS middleware [\#516](https://github.com/rubykube/barong/pull/516) ([rxx](https://github.com/rxx)) + +## [1.8.9](https://github.com/rubykube/barong/tree/1.8.9) (2018-06-05) +[Full Changelog](https://github.com/rubykube/barong/compare/1.5.2...1.8.9) + +**Merged pull requests:** + +- Remove identity from default configuration [\#505](https://github.com/rubykube/barong/pull/505) ([rxx](https://github.com/rxx)) + +## [1.5.2](https://github.com/rubykube/barong/tree/1.5.2) (2018-06-04) +[Full Changelog](https://github.com/rubykube/barong/compare/1.8.8...1.5.2) + +## [1.8.8](https://github.com/rubykube/barong/tree/1.8.8) (2018-06-04) +[Full Changelog](https://github.com/rubykube/barong/compare/1.8.7...1.8.8) + +**Merged pull requests:** + +- Change password security error message [\#511](https://github.com/rubykube/barong/pull/511) ([rxx](https://github.com/rxx)) +- Ci bump pagination 1 5 [\#471](https://github.com/rubykube/barong/pull/471) ([rxx](https://github.com/rxx)) + +## [1.8.7](https://github.com/rubykube/barong/tree/1.8.7) (2018-06-04) +[Full Changelog](https://github.com/rubykube/barong/compare/1.7.1...1.8.7) + +**Merged pull requests:** + +- Remove env check. It does not work with docker build [\#514](https://github.com/rubykube/barong/pull/514) ([rxx](https://github.com/rxx)) +- Add vault logging [\#513](https://github.com/rubykube/barong/pull/513) ([rxx](https://github.com/rxx)) + +## [1.7.1](https://github.com/rubykube/barong/tree/1.7.1) (2018-06-04) +[Full Changelog](https://github.com/rubykube/barong/compare/1.8.5...1.7.1) + +## [1.8.5](https://github.com/rubykube/barong/tree/1.8.5) (2018-06-03) +[Full Changelog](https://github.com/rubykube/barong/compare/1.8.6...1.8.5) + +## [1.8.6](https://github.com/rubykube/barong/tree/1.8.6) (2018-06-03) +[Full Changelog](https://github.com/rubykube/barong/compare/1.8.4...1.8.6) + +**Closed issues:** + +- Omission in the passport verification flow [\#500](https://github.com/rubykube/barong/issues/500) + +**Merged pull requests:** + +- Allow travis to build image without envs [\#508](https://github.com/rubykube/barong/pull/508) ([rxx](https://github.com/rxx)) +- Update travis CI and fix version bumping [\#507](https://github.com/rubykube/barong/pull/507) ([shal](https://github.com/shal)) + +## [1.8.4](https://github.com/rubykube/barong/tree/1.8.4) (2018-05-31) +[Full Changelog](https://github.com/rubykube/barong/compare/1.8.3...1.8.4) + +## [1.8.3](https://github.com/rubykube/barong/tree/1.8.3) (2018-05-31) +[Full Changelog](https://github.com/rubykube/barong/compare/1.8.2...1.8.3) + +## [1.8.2](https://github.com/rubykube/barong/tree/1.8.2) (2018-05-30) +[Full Changelog](https://github.com/rubykube/barong/compare/1.8.1...1.8.2) + +**Merged pull requests:** + +- Add new document type [\#502](https://github.com/rubykube/barong/pull/502) ([rxx](https://github.com/rxx)) +- API tuning: Add security definitions and status code, fixed wrong messages [\#488](https://github.com/rubykube/barong/pull/488) ([rxx](https://github.com/rxx)) +- Check required environments on barong starting [\#484](https://github.com/rubykube/barong/pull/484) ([rxx](https://github.com/rxx)) +- Set correct document flash message [\#474](https://github.com/rubykube/barong/pull/474) ([rxx](https://github.com/rxx)) +- Downcase label key and value before save it [\#472](https://github.com/rubykube/barong/pull/472) ([rxx](https://github.com/rxx)) + +## [1.8.1](https://github.com/rubykube/barong/tree/1.8.1) (2018-05-30) +[Full Changelog](https://github.com/rubykube/barong/compare/1.8.0...1.8.1) + +**Closed issues:** + +- error while uploading documents [\#493](https://github.com/rubykube/barong/issues/493) + +**Merged pull requests:** + +- Add endpoint for resend confirmations [\#531](https://github.com/rubykube/barong/pull/531) ([rxx](https://github.com/rxx)) +- Feed existing account with labels corresponding their level \[for migration from 1.7 to 1.8\] [\#498](https://github.com/rubykube/barong/pull/498) ([m-an](https://github.com/m-an)) +- Fix db:seed applications creation [\#495](https://github.com/rubykube/barong/pull/495) ([calj](https://github.com/calj)) +- Fix document types [\#490](https://github.com/rubykube/barong/pull/490) ([rxx](https://github.com/rxx)) +- Fix typo in phone exists message error [\#487](https://github.com/rubykube/barong/pull/487) ([rxx](https://github.com/rxx)) +- \[ci skip\] Start 1.9.0 development [\#475](https://github.com/rubykube/barong/pull/475) ([rxx](https://github.com/rxx)) +- ci/bump pagination patch for 1.7 [\#469](https://github.com/rubykube/barong/pull/469) ([rxx](https://github.com/rxx)) + +## [1.8.0](https://github.com/rubykube/barong/tree/1.8.0) (2018-05-16) +[Full Changelog](https://github.com/rubykube/barong/compare/1.7.0...1.8.0) + +**Closed issues:** + +- Wrong session\[:phone\] == @phone\_number comparison in phones\_controller [\#462](https://github.com/rubykube/barong/issues/462) +- API Key expiration [\#456](https://github.com/rubykube/barong/issues/456) +- Barong Admin Panel: Move all logic from profile show to accounts show [\#449](https://github.com/rubykube/barong/issues/449) +- Logic error connected with changes of critical label Key [\#445](https://github.com/rubykube/barong/issues/445) +- Rewrite mailers due to state removal [\#443](https://github.com/rubykube/barong/issues/443) +- Public labels can prevent creation of private labels with the same key value. [\#442](https://github.com/rubykube/barong/issues/442) +- Deleting an user in Barong did not delete the user's phone or should user deletion be allowed? [\#437](https://github.com/rubykube/barong/issues/437) +- Use jwt for API instead of Doorkeeper Access Token [\#433](https://github.com/rubykube/barong/issues/433) +- Add /api/v1/phones/resend\_code [\#418](https://github.com/rubykube/barong/issues/418) +- Can't edit personal information after account creation [\#417](https://github.com/rubykube/barong/issues/417) +- The server Barong does not send SMS for authorization of a mobile phone. [\#408](https://github.com/rubykube/barong/issues/408) +- API, phone step can be skipped and get level 3 user [\#402](https://github.com/rubykube/barong/issues/402) +- Enforce strong passwords [\#401](https://github.com/rubykube/barong/issues/401) +- Phone verification 404 on a second attempt [\#400](https://github.com/rubykube/barong/issues/400) +- The Gmail address registration issue [\#399](https://github.com/rubykube/barong/issues/399) +- Validate fields, when send doc [\#398](https://github.com/rubykube/barong/issues/398) +- User allowed to re-upload kYC doc and phone even after account is approved [\#397](https://github.com/rubykube/barong/issues/397) +- No Email after KYC verification [\#396](https://github.com/rubykube/barong/issues/396) +- Deleting an user in Barong did not delete the user's phone or should user deletion be allowed? 1.5 [\#395](https://github.com/rubykube/barong/issues/395) +- Error 1.5 when uploading photo [\#394](https://github.com/rubykube/barong/issues/394) +- Post to /api/V1/phones will return 500 when success [\#390](https://github.com/rubykube/barong/issues/390) +- Add field "Nationality" on personal information step [\#387](https://github.com/rubykube/barong/issues/387) +- Implement Event API [\#382](https://github.com/rubykube/barong/issues/382) +- Add Ability to Confirm Email Verification via API [\#369](https://github.com/rubykube/barong/issues/369) +- Re-write phone verification step using the api v1 [\#365](https://github.com/rubykube/barong/issues/365) +- Vault 404 when enabling 2FA [\#355](https://github.com/rubykube/barong/issues/355) +- User should be notified if he was rejected by admin [\#347](https://github.com/rubykube/barong/issues/347) +- Use fog-google 1.3.3 [\#342](https://github.com/rubykube/barong/issues/342) +- Indian number - endless search [\#340](https://github.com/rubykube/barong/issues/340) +- db:seed fails [\#339](https://github.com/rubykube/barong/issues/339) +- Redirection bug after uploading a document [\#333](https://github.com/rubykube/barong/issues/333) +- Redirect user to platform after login [\#332](https://github.com/rubykube/barong/issues/332) +- Error when uploading document [\#324](https://github.com/rubykube/barong/issues/324) +- Unable to receive SMS to +38\(091\)XXX-XX-XX [\#322](https://github.com/rubykube/barong/issues/322) +- Migrate from fog-aws to carrierwave-aws [\#321](https://github.com/rubykube/barong/issues/321) +- Migrate from fog-google to carrierwave-google-storage [\#320](https://github.com/rubykube/barong/issues/320) +- «Confirm» button is crazy [\#319](https://github.com/rubykube/barong/issues/319) +- Logo couldn't be loaded [\#318](https://github.com/rubykube/barong/issues/318) +- Ability to configure level dynamically [\#315](https://github.com/rubykube/barong/issues/315) +- Log-Out issue [\#314](https://github.com/rubykube/barong/issues/314) +- "Phone is invalid" with international code [\#313](https://github.com/rubykube/barong/issues/313) +- After delete an account [\#307](https://github.com/rubykube/barong/issues/307) +- Add first and last names to JWT token [\#292](https://github.com/rubykube/barong/issues/292) +- no implicit conversion of nil into String [\#289](https://github.com/rubykube/barong/issues/289) +- Specify an endpoint GET /account/sign\_out to sign out the user from devise session [\#268](https://github.com/rubykube/barong/issues/268) +- Unable to sign in/sign up [\#266](https://github.com/rubykube/barong/issues/266) +- Specify API endpoint for JWT renewal [\#262](https://github.com/rubykube/barong/issues/262) +- It is possible to set any state for account & profile [\#240](https://github.com/rubykube/barong/issues/240) +- API should not respond with 2XX in case of invalid phone [\#217](https://github.com/rubykube/barong/issues/217) +- Ability to manage trading tokens from barong [\#211](https://github.com/rubykube/barong/issues/211) +- Email notification when user Approved [\#197](https://github.com/rubykube/barong/issues/197) +- Implement new layout for barong emails [\#174](https://github.com/rubykube/barong/issues/174) +- Admin can make himself a member [\#113](https://github.com/rubykube/barong/issues/113) +- Add Sentry [\#76](https://github.com/rubykube/barong/issues/76) + +**Merged pull requests:** + +- Enable devise lockable. [\#467](https://github.com/rubykube/barong/pull/467) ([rxx](https://github.com/rxx)) +- Feature: Add metadata to documents API [\#464](https://github.com/rubykube/barong/pull/464) ([rxx](https://github.com/rxx)) +- Release 1.8.0 [\#463](https://github.com/rubykube/barong/pull/463) ([rxx](https://github.com/rxx)) +- Bugfix/fix phone validation [\#461](https://github.com/rubykube/barong/pull/461) ([rxx](https://github.com/rxx)) +- Move all logic from profile show to accounts show. Show Phones and Account info [\#460](https://github.com/rubykube/barong/pull/460) ([rxx](https://github.com/rxx)) +- Add sentry [\#459](https://github.com/rubykube/barong/pull/459) ([rxx](https://github.com/rxx)) +- Update ci/bump.rb: add pagination for GitHub API \(fixes bumping for older branches\). [\#458](https://github.com/rubykube/barong/pull/458) ([rxx](https://github.com/rxx)) +- Added password strength validation [\#455](https://github.com/rubykube/barong/pull/455) ([gfedorenko](https://github.com/gfedorenko)) +- Fix issue with api datetime format [\#453](https://github.com/rubykube/barong/pull/453) ([rxx](https://github.com/rxx)) +- Remove outdated deployment stuff [\#452](https://github.com/rubykube/barong/pull/452) ([ysv](https://github.com/ysv)) +- Mark account as discarded istead of delete it [\#451](https://github.com/rubykube/barong/pull/451) ([rxx](https://github.com/rxx)) +- Add condition for unconfirmed emails check on session\#create api endpoint [\#448](https://github.com/rubykube/barong/pull/448) ([m-an](https://github.com/m-an)) +- Send emails if they are enabled. Add SKIP\_EMAILS env [\#446](https://github.com/rubykube/barong/pull/446) ([rxx](https://github.com/rxx)) +- Add api\_key resource and generate jwt session [\#441](https://github.com/rubykube/barong/pull/441) ([rxx](https://github.com/rxx)) +- Added link\_config script [\#434](https://github.com/rubykube/barong/pull/434) ([ysv](https://github.com/ysv)) +- Show level and labels on account index page [\#431](https://github.com/rubykube/barong/pull/431) ([rxx](https://github.com/rxx)) +- Migrate application levels logic to use labels [\#430](https://github.com/rubykube/barong/pull/430) ([m-an](https://github.com/m-an)) +- Speed up docker image build [\#429](https://github.com/rubykube/barong/pull/429) ([ysv](https://github.com/ysv)) +- Do not trust public label when calculate level [\#428](https://github.com/rubykube/barong/pull/428) ([rxx](https://github.com/rxx)) +- Fix function call [\#426](https://github.com/rubykube/barong/pull/426) ([vpetrusenko](https://github.com/vpetrusenko)) +- Use SecureRandom in db:seed [\#425](https://github.com/rubykube/barong/pull/425) ([ysv](https://github.com/ysv)) +- Fix domain to host [\#424](https://github.com/rubykube/barong/pull/424) ([rxx](https://github.com/rxx)) +- Implement send code API [\#423](https://github.com/rubykube/barong/pull/423) ([vpetrusenko](https://github.com/vpetrusenko)) +- Changing seeds to users [\#422](https://github.com/rubykube/barong/pull/422) ([mod](https://github.com/mod)) +- Feature/level logic with labels [\#421](https://github.com/rubykube/barong/pull/421) ([m-an](https://github.com/m-an)) +- Fix API error messages [\#416](https://github.com/rubykube/barong/pull/416) ([vpetrusenko](https://github.com/vpetrusenko)) +- Add labels to admin panel with CRUD [\#414](https://github.com/rubykube/barong/pull/414) ([vpetrusenko](https://github.com/vpetrusenko)) +- Allow setting JWT secret key as pem file [\#413](https://github.com/rubykube/barong/pull/413) ([dmk](https://github.com/dmk)) +- Added event\_api specs [\#412](https://github.com/rubykube/barong/pull/412) ([rxx](https://github.com/rxx)) +- Events API, Plugins [\#410](https://github.com/rubykube/barong/pull/410) ([rxx](https://github.com/rxx)) +- Adding level definition [\#409](https://github.com/rubykube/barong/pull/409) ([mod](https://github.com/mod)) +- Feature/managment api [\#407](https://github.com/rubykube/barong/pull/407) ([rxx](https://github.com/rxx)) +- Update 1.7.0 migration steps notes [\#405](https://github.com/rubykube/barong/pull/405) ([rxx](https://github.com/rxx)) +- Make db:seed more flexible [\#404](https://github.com/rubykube/barong/pull/404) ([dmk](https://github.com/dmk)) +- Fix errors in phones api [\#393](https://github.com/rubykube/barong/pull/393) ([rxx](https://github.com/rxx)) +- Feature/account confirm api [\#391](https://github.com/rubykube/barong/pull/391) ([rxx](https://github.com/rxx)) +- Fix missing PhoneUtils bug [\#389](https://github.com/rubykube/barong/pull/389) ([rxx](https://github.com/rxx)) +- Fix/bump eligible [\#381](https://github.com/rubykube/barong/pull/381) ([mod](https://github.com/mod)) +- Start Barong 1.8.0 development! [\#370](https://github.com/rubykube/barong/pull/370) ([rxx](https://github.com/rxx)) + +## [1.7.0](https://github.com/rubykube/barong/tree/1.7.0) (2018-04-20) +[Full Changelog](https://github.com/rubykube/barong/compare/1.6.0...1.7.0) + +**Closed issues:** + +- Make API call with restore password. [\#362](https://github.com/rubykube/barong/issues/362) +- Setup code climate rules [\#344](https://github.com/rubykube/barong/issues/344) +- I am able to confirm my phone without verification code [\#323](https://github.com/rubykube/barong/issues/323) +- API endpoint to reset password [\#301](https://github.com/rubykube/barong/issues/301) +- API endpoint for 2FA [\#300](https://github.com/rubykube/barong/issues/300) +- Issues with verifying the phone number when working in Firefox [\#261](https://github.com/rubykube/barong/issues/261) +- Recovery codes for two factor authentication [\#244](https://github.com/rubykube/barong/issues/244) +- I scanned QR for 2FA. What's next? [\#237](https://github.com/rubykube/barong/issues/237) +- Find a way to use service account instead of GCS secrets [\#185](https://github.com/rubykube/barong/issues/185) + +**Merged pull requests:** + +- Fix missing PhoneUtils bug [\#388](https://github.com/rubykube/barong/pull/388) ([rxx](https://github.com/rxx)) +- \#382: Event API [\#385](https://github.com/rubykube/barong/pull/385) ([rxx](https://github.com/rxx)) +- Release 1.7.0 [\#384](https://github.com/rubykube/barong/pull/384) ([rxx](https://github.com/rxx)) +- Fix phones controller [\#383](https://github.com/rubykube/barong/pull/383) ([dmk](https://github.com/dmk)) +- Fixing bump [\#379](https://github.com/rubykube/barong/pull/379) ([mod](https://github.com/mod)) +- Increase spec coverage [\#378](https://github.com/rubykube/barong/pull/378) ([m-an](https://github.com/m-an)) +- Fix failing profile specs [\#377](https://github.com/rubykube/barong/pull/377) ([m-an](https://github.com/m-an)) +- Fix failing profile specs [\#376](https://github.com/rubykube/barong/pull/376) ([m-an](https://github.com/m-an)) +- Fix failing profile specs [\#375](https://github.com/rubykube/barong/pull/375) ([m-an](https://github.com/m-an)) +- Notify user by email when his state changes [\#374](https://github.com/rubykube/barong/pull/374) ([m-an](https://github.com/m-an)) +- Notify user by email when his state changes [\#373](https://github.com/rubykube/barong/pull/373) ([m-an](https://github.com/m-an)) +- Notify user by email when his state changes [\#372](https://github.com/rubykube/barong/pull/372) ([m-an](https://github.com/m-an)) +- Add reset password api [\#371](https://github.com/rubykube/barong/pull/371) ([rxx](https://github.com/rxx)) +- Restify api endpoints [\#368](https://github.com/rubykube/barong/pull/368) ([rxx](https://github.com/rxx)) +- User level is downgraded to 2 when his profile is rejected [\#367](https://github.com/rubykube/barong/pull/367) ([m-an](https://github.com/m-an)) +- User level is downgraded to 2 when his profile is rejected [\#366](https://github.com/rubykube/barong/pull/366) ([m-an](https://github.com/m-an)) +- User level is downgraded to 2 when his profile is rejected [\#360](https://github.com/rubykube/barong/pull/360) ([m-an](https://github.com/m-an)) +- Fix db:seed [\#359](https://github.com/rubykube/barong/pull/359) ([spavlishak](https://github.com/spavlishak)) +- Add ability to set uid and gid as docker build args [\#358](https://github.com/rubykube/barong/pull/358) ([gfedorenko](https://github.com/gfedorenko)) +- Fix typo in error rescue [\#357](https://github.com/rubykube/barong/pull/357) ([m-an](https://github.com/m-an)) +- Bugfix/phone verification without code\[1.5\] [\#354](https://github.com/rubykube/barong/pull/354) ([rxx](https://github.com/rxx)) +- Fix phone verification issue\[1.6\] [\#353](https://github.com/rubykube/barong/pull/353) ([rxx](https://github.com/rxx)) +- Start Barong 1.7.0 development! [\#352](https://github.com/rubykube/barong/pull/352) ([m-an](https://github.com/m-an)) +- Fix phone verification issue [\#341](https://github.com/rubykube/barong/pull/341) ([rxx](https://github.com/rxx)) +- Feature/profiles api [\#336](https://github.com/rubykube/barong/pull/336) ([m-an](https://github.com/m-an)) +- Feature/2fa api [\#327](https://github.com/rubykube/barong/pull/327) ([rxx](https://github.com/rxx)) + +## [1.6.0](https://github.com/rubykube/barong/tree/1.6.0) (2018-04-12) +[Full Changelog](https://github.com/rubykube/barong/compare/1.3.1...1.6.0) + +**Closed issues:** + +- Swagger docs [\#345](https://github.com/rubykube/barong/issues/345) +- Add API for manage labels [\#306](https://github.com/rubykube/barong/issues/306) +- API endpoint to create and validate phone [\#299](https://github.com/rubykube/barong/issues/299) + +**Merged pull requests:** + +- Configure codeclimate [\#348](https://github.com/rubykube/barong/pull/348) ([rxx](https://github.com/rxx)) +- Release 1.6.0 [\#343](https://github.com/rubykube/barong/pull/343) ([m-an](https://github.com/m-an)) + +## [1.3.1](https://github.com/rubykube/barong/tree/1.3.1) (2018-04-11) +[Full Changelog](https://github.com/rubykube/barong/compare/1.5.1...1.3.1) + +**Closed issues:** + +- API for admin panel [\#280](https://github.com/rubykube/barong/issues/280) +- Cannot upload document to GCP - Excon::Error::Socket \(Broken pipe \(Errno::EPIPE\)\): [\#278](https://github.com/rubykube/barong/issues/278) +- Add API calls to manage user documents [\#275](https://github.com/rubykube/barong/issues/275) +- Add an API call to update password of current user [\#274](https://github.com/rubykube/barong/issues/274) + +**Merged pull requests:** + +- Fix/rubocop [\#337](https://github.com/rubykube/barong/pull/337) ([rxx](https://github.com/rxx)) +- Update .travis.yml [\#335](https://github.com/rubykube/barong/pull/335) ([rxx](https://github.com/rxx)) +- Add '/v1' prefix for API::V1 routes [\#330](https://github.com/rubykube/barong/pull/330) ([m-an](https://github.com/m-an)) +- Feature/phones api [\#309](https://github.com/rubykube/barong/pull/309) ([rxx](https://github.com/rxx)) + +## [1.5.1](https://github.com/rubykube/barong/tree/1.5.1) (2018-04-05) +[Full Changelog](https://github.com/rubykube/barong/compare/1.5.0...1.5.1) + +**Closed issues:** + +- Something went wrong when upload document photo [\#311](https://github.com/rubykube/barong/issues/311) +- old Barong accounts [\#308](https://github.com/rubykube/barong/issues/308) +- Your account has been disabled, contact admin if you have any problem. [\#295](https://github.com/rubykube/barong/issues/295) +- Can’t verify Indian number [\#267](https://github.com/rubykube/barong/issues/267) +- Username input throws exception [\#252](https://github.com/rubykube/barong/issues/252) +- Email input is not focused at page load, after submit password input is not focused too. Low user experience [\#247](https://github.com/rubykube/barong/issues/247) +- It is possible to register the same phone twice [\#239](https://github.com/rubykube/barong/issues/239) +- English error at phone verification [\#238](https://github.com/rubykube/barong/issues/238) +- If I submit second document after approval of first it is not displayed in admin panel [\#236](https://github.com/rubykube/barong/issues/236) +- I can't upload files with UPPERCASE extension [\#235](https://github.com/rubykube/barong/issues/235) +- Markup & CSS issue: page is jumping, very ugly [\#226](https://github.com/rubykube/barong/issues/226) +- Undefined method «request\_uri» at /security [\#219](https://github.com/rubykube/barong/issues/219) +- Phone number is send with double «+» sign when performing verification [\#218](https://github.com/rubykube/barong/issues/218) +- AWS S3 support [\#212](https://github.com/rubykube/barong/issues/212) +- Phone is invalid when it isn't [\#138](https://github.com/rubykube/barong/issues/138) +- 2 Factor Authentication [\#121](https://github.com/rubykube/barong/issues/121) + +**Merged pull requests:** + +- \#306: labels api [\#328](https://github.com/rubykube/barong/pull/328) ([mitjok](https://github.com/mitjok)) +- Downgrade fog-gem version \(fix \#311\) [\#326](https://github.com/rubykube/barong/pull/326) ([shal](https://github.com/shal)) +- Downgrade fog-gem version \(fix \#311\) [\#317](https://github.com/rubykube/barong/pull/317) ([shal](https://github.com/shal)) +- Add documentation for entities [\#312](https://github.com/rubykube/barong/pull/312) ([spavlishak](https://github.com/spavlishak)) +- Fix travis-ci version bump [\#305](https://github.com/rubykube/barong/pull/305) ([dmk](https://github.com/dmk)) +- Update code style checks [\#304](https://github.com/rubykube/barong/pull/304) ([dmk](https://github.com/dmk)) +- Feature/signup api [\#303](https://github.com/rubykube/barong/pull/303) ([rxx](https://github.com/rxx)) +- Ignore yarn files [\#302](https://github.com/rubykube/barong/pull/302) ([rxx](https://github.com/rxx)) +- Documents API [\#297](https://github.com/rubykube/barong/pull/297) ([m-an](https://github.com/m-an)) +- Implemented ability to change password by API for \#274 [\#291](https://github.com/rubykube/barong/pull/291) ([m-an](https://github.com/m-an)) +- Updated loofah to 2.2.2 [\#290](https://github.com/rubykube/barong/pull/290) ([gfedorenko](https://github.com/gfedorenko)) +- Changed devise logout path from delete to get request [\#288](https://github.com/rubykube/barong/pull/288) ([akhlopiachyi](https://github.com/akhlopiachyi)) +- Updated loofah to 2.2.2 [\#287](https://github.com/rubykube/barong/pull/287) ([gfedorenko](https://github.com/gfedorenko)) +- Implemented API JWT renewal [\#264](https://github.com/rubykube/barong/pull/264) ([m-an](https://github.com/m-an)) + +## [1.5.0](https://github.com/rubykube/barong/tree/1.5.0) (2018-03-23) +[Full Changelog](https://github.com/rubykube/barong/compare/1.3.0...1.5.0) + +**Merged pull requests:** + +- Changed devise logout path from delete to get request [\#269](https://github.com/rubykube/barong/pull/269) ([m-an](https://github.com/m-an)) + +## [1.3.0](https://github.com/rubykube/barong/tree/1.3.0) (2018-03-23) +[Full Changelog](https://github.com/rubykube/barong/compare/1.0.14...1.3.0) + +**Closed issues:** + +- Add an api with profile information, like first and last names [\#272](https://github.com/rubykube/barong/issues/272) +- Finish websites [\#178](https://github.com/rubykube/barong/issues/178) + +**Merged pull requests:** + +- Implemented API endpoind for receiving JWT by account and password [\#298](https://github.com/rubykube/barong/pull/298) ([m-an](https://github.com/m-an)) +- Add ability to define title [\#284](https://github.com/rubykube/barong/pull/284) ([vpetrusenko](https://github.com/vpetrusenko)) +- Set account state to 'active' on email confirmation [\#279](https://github.com/rubykube/barong/pull/279) ([gfedorenko](https://github.com/gfedorenko)) +- Refactored phones [\#276](https://github.com/rubykube/barong/pull/276) ([gfedorenko](https://github.com/gfedorenko)) + +## [1.0.14](https://github.com/rubykube/barong/tree/1.0.14) (2018-03-20) +[Full Changelog](https://github.com/rubykube/barong/compare/1.0.13...1.0.14) + +**Merged pull requests:** + +- Changed devise logout path from delete to get request [\#329](https://github.com/rubykube/barong/pull/329) ([m-an](https://github.com/m-an)) +- Added state for GET profile [\#273](https://github.com/rubykube/barong/pull/273) ([gfedorenko](https://github.com/gfedorenko)) +- Added get profile API call [\#271](https://github.com/rubykube/barong/pull/271) ([gfedorenko](https://github.com/gfedorenko)) +- Set account state along with profile state [\#270](https://github.com/rubykube/barong/pull/270) ([dmk](https://github.com/dmk)) +- Update travis CI script as rubykube/peatio\#639 \(closes \#255\) [\#256](https://github.com/rubykube/barong/pull/256) ([shal](https://github.com/shal)) + +## [1.0.13](https://github.com/rubykube/barong/tree/1.0.13) (2018-03-16) +[Full Changelog](https://github.com/rubykube/barong/compare/1.0.12...1.0.13) + +**Closed issues:** + +- Specify API endpoint for JWT revoke [\#263](https://github.com/rubykube/barong/issues/263) +- Otp signing service specs [\#260](https://github.com/rubykube/barong/issues/260) +- Update bump script as in peatio [\#255](https://github.com/rubykube/barong/issues/255) + +**Merged pull requests:** + +- Fix multiple issue with cloud storage configurations [\#259](https://github.com/rubykube/barong/pull/259) ([shal](https://github.com/shal)) + +## [1.0.12](https://github.com/rubykube/barong/tree/1.0.12) (2018-03-13) +[Full Changelog](https://github.com/rubykube/barong/compare/1.0.11...1.0.12) + +**Closed issues:** + +- Extremely difficult to understand UID, use email instead [\#258](https://github.com/rubykube/barong/issues/258) +- Update documentation for Barong interaction with client app [\#177](https://github.com/rubykube/barong/issues/177) +- Implement fully working 2FA [\#146](https://github.com/rubykube/barong/issues/146) + +**Merged pull requests:** + +- Use email as account name in Vault TOTP; allow setting issuer name in env [\#257](https://github.com/rubykube/barong/pull/257) ([gfedorenko](https://github.com/gfedorenko)) +- \#247 Add focus to email input at page load and password input [\#249](https://github.com/rubykube/barong/pull/249) ([amir-budaychiev](https://github.com/amir-budaychiev)) + +## [1.0.11](https://github.com/rubykube/barong/tree/1.0.11) (2018-03-09) +[Full Changelog](https://github.com/rubykube/barong/compare/1.0.10...1.0.11) + +**Merged pull requests:** + +- Update fog and carrierwave & cleanup \(closes \#212\) [\#241](https://github.com/rubykube/barong/pull/241) ([shal](https://github.com/shal)) + +## [1.0.10](https://github.com/rubykube/barong/tree/1.0.10) (2018-03-07) +[Full Changelog](https://github.com/rubykube/barong/compare/1.0.9...1.0.10) + +**Merged pull requests:** + +- Add 2FA docs [\#251](https://github.com/rubykube/barong/pull/251) ([dmk](https://github.com/dmk)) + +## [1.0.9](https://github.com/rubykube/barong/tree/1.0.9) (2018-03-07) +[Full Changelog](https://github.com/rubykube/barong/compare/1.0.8...1.0.9) + +**Closed issues:** + +- Customization seems broken in latest master [\#248](https://github.com/rubykube/barong/issues/248) +- \[WIP\] Update the JWT Session payload [\#245](https://github.com/rubykube/barong/issues/245) +- All entered data is lost when submitting form with invalid data [\#223](https://github.com/rubykube/barong/issues/223) +- It is possible to specify & submit DOB in future [\#220](https://github.com/rubykube/barong/issues/220) +- Tag and bump patch on each master change [\#186](https://github.com/rubykube/barong/issues/186) +- Input Authenticator Page [\#152](https://github.com/rubykube/barong/issues/152) +- Fix issue with unlocking account [\#147](https://github.com/rubykube/barong/issues/147) + +**Merged pull requests:** + +- Update the JWT Session payload [\#250](https://github.com/rubykube/barong/pull/250) ([dmk](https://github.com/dmk)) + +## [1.0.8](https://github.com/rubykube/barong/tree/1.0.8) (2018-03-05) +[Full Changelog](https://github.com/rubykube/barong/compare/1.0.7...1.0.8) + +**Merged pull requests:** + +- Different gem subsets dynamic installation [\#207](https://github.com/rubykube/barong/pull/207) ([mitjok](https://github.com/mitjok)) + +## [1.0.7](https://github.com/rubykube/barong/tree/1.0.7) (2018-03-05) +[Full Changelog](https://github.com/rubykube/barong/compare/1.0.6...1.0.7) + +**Closed issues:** + +- After submitting document I am still at the same page. What's next? [\#225](https://github.com/rubykube/barong/issues/225) + +**Merged pull requests:** + +- Add redirect after document create [\#227](https://github.com/rubykube/barong/pull/227) ([vpetrusenko](https://github.com/vpetrusenko)) + +## [1.0.6](https://github.com/rubykube/barong/tree/1.0.6) (2018-03-05) +[Full Changelog](https://github.com/rubykube/barong/compare/1.0.5...1.0.6) + +**Merged pull requests:** + +- Validate dates [\#228](https://github.com/rubykube/barong/pull/228) ([gfedorenko](https://github.com/gfedorenko)) + +## [1.0.5](https://github.com/rubykube/barong/tree/1.0.5) (2018-03-05) +[Full Changelog](https://github.com/rubykube/barong/compare/1.0.4...1.0.5) + +**Merged pull requests:** + +- Fix all entered data which is lost when submitting form with invalid data [\#231](https://github.com/rubykube/barong/pull/231) ([amir-budaychiev](https://github.com/amir-budaychiev)) + +## [1.0.4](https://github.com/rubykube/barong/tree/1.0.4) (2018-03-05) +[Full Changelog](https://github.com/rubykube/barong/compare/1.0.3...1.0.4) + +**Closed issues:** + +- Document form doesn't work with valid data [\#224](https://github.com/rubykube/barong/issues/224) +- Missing assets at /documents/new [\#221](https://github.com/rubykube/barong/issues/221) + +**Merged pull requests:** + +- Add 2FA [\#205](https://github.com/rubykube/barong/pull/205) ([dmk](https://github.com/dmk)) + +## [1.0.3](https://github.com/rubykube/barong/tree/1.0.3) (2018-03-05) +[Full Changelog](https://github.com/rubykube/barong/compare/1.0.2...1.0.3) + +**Closed issues:** + +- Invalid background color for error message block in case of failed phone verification [\#216](https://github.com/rubykube/barong/issues/216) +- Fix failing chrome-driver in travis [\#213](https://github.com/rubykube/barong/issues/213) +- Fix dropify icon displaying [\#195](https://github.com/rubykube/barong/issues/195) +- ActionView::Template::Error \(couldn't find file 'dropify/src/js/dropify' with type 'application/javascript' [\#189](https://github.com/rubykube/barong/issues/189) +- Add Vault to the stack [\#176](https://github.com/rubykube/barong/issues/176) +- Add field "E-mail" in Profile [\#168](https://github.com/rubykube/barong/issues/168) +- Refresh spec/models tests [\#167](https://github.com/rubykube/barong/issues/167) +- Make admin panel fixes [\#160](https://github.com/rubykube/barong/issues/160) +- Create a role for managing only profiles [\#108](https://github.com/rubykube/barong/issues/108) + +**Merged pull requests:** + +- Final issue in travis configuration [\#233](https://github.com/rubykube/barong/pull/233) ([shal](https://github.com/shal)) +- Add bot envs in travis.yml [\#232](https://github.com/rubykube/barong/pull/232) ([shal](https://github.com/shal)) +- Fix travis bumping version [\#230](https://github.com/rubykube/barong/pull/230) ([shal](https://github.com/shal)) +- Fix phones notification color [\#222](https://github.com/rubykube/barong/pull/222) ([vpetrusenko](https://github.com/vpetrusenko)) +- Add chrome in .travis.yml & update chromedriver-helper \(closes \#213\) [\#215](https://github.com/rubykube/barong/pull/215) ([shal](https://github.com/shal)) +- Handle file size and extension on front-end side with dropify [\#209](https://github.com/rubykube/barong/pull/209) ([vpetrusenko](https://github.com/vpetrusenko)) +- Remove unused docs and invalid concourse pipeline [\#208](https://github.com/rubykube/barong/pull/208) ([shal](https://github.com/shal)) +- Fix issue with resending unlock instructions for \#147 [\#206](https://github.com/rubykube/barong/pull/206) ([m-an](https://github.com/m-an)) +- Rake task to generate swagger-slate docs [\#204](https://github.com/rubykube/barong/pull/204) ([mitjok](https://github.com/mitjok)) +- Removed minimum size limitation for document [\#199](https://github.com/rubykube/barong/pull/199) ([gfedorenko](https://github.com/gfedorenko)) +- Fix icon in dropify input [\#196](https://github.com/rubykube/barong/pull/196) ([amir-budaychiev](https://github.com/amir-budaychiev)) +- Fixed bin/setup to work in correct order [\#194](https://github.com/rubykube/barong/pull/194) ([vshatravenko](https://github.com/vshatravenko)) +- Continue implement features regarding PR \#118 [\#193](https://github.com/rubykube/barong/pull/193) ([amir-budaychiev](https://github.com/amir-budaychiev)) +- Fixed tests [\#192](https://github.com/rubykube/barong/pull/192) ([gfedorenko](https://github.com/gfedorenko)) +- Updated documentation [\#190](https://github.com/rubykube/barong/pull/190) ([gfedorenko](https://github.com/gfedorenko)) +- Automatically bump version from TravisCI [\#188](https://github.com/rubykube/barong/pull/188) ([shal](https://github.com/shal)) + +## [1.0.2](https://github.com/rubykube/barong/tree/1.0.2) (2018-02-26) +[Full Changelog](https://github.com/rubykube/barong/compare/1.0.1...1.0.2) + +**Merged pull requests:** + +- Remove main-logo and useless \s [\#182](https://github.com/rubykube/barong/pull/182) ([spavlishak](https://github.com/spavlishak)) +- Admin panel fixes [\#165](https://github.com/rubykube/barong/pull/165) ([amir-budaychiev](https://github.com/amir-budaychiev)) +- Added autoauthorized application [\#156](https://github.com/rubykube/barong/pull/156) ([gfedorenko](https://github.com/gfedorenko)) +- Creating a role for managing only profiles [\#118](https://github.com/rubykube/barong/pull/118) ([amir-budaychiev](https://github.com/amir-budaychiev)) + +## [1.0.1](https://github.com/rubykube/barong/tree/1.0.1) (2018-02-23) +[Full Changelog](https://github.com/rubykube/barong/compare/1.0.0...1.0.1) + +**Closed issues:** + +- Put links and style pages [\#157](https://github.com/rubykube/barong/issues/157) +- Disable submit phone button and show loader [\#148](https://github.com/rubykube/barong/issues/148) +- Validate Document's size [\#145](https://github.com/rubykube/barong/issues/145) +- Set Devise layout as application [\#144](https://github.com/rubykube/barong/issues/144) +- Barong outputs warning when confirming email [\#137](https://github.com/rubykube/barong/issues/137) +- Make drag and drop for documents work [\#125](https://github.com/rubykube/barong/issues/125) +- Delete merged branchs [\#110](https://github.com/rubykube/barong/issues/110) +- Document number doesn't have max length which results in 500 error when submitting form [\#87](https://github.com/rubykube/barong/issues/87) +- Markup issues [\#84](https://github.com/rubykube/barong/issues/84) + +**Merged pull requests:** + +- Fix for index redirecting [\#180](https://github.com/rubykube/barong/pull/180) ([gfedorenko](https://github.com/gfedorenko)) +- remove some tests/specs [\#173](https://github.com/rubykube/barong/pull/173) ([mitjok](https://github.com/mitjok)) +- Add link for enabling 2FA [\#172](https://github.com/rubykube/barong/pull/172) ([spavlishak](https://github.com/spavlishak)) +- Small fixes [\#171](https://github.com/rubykube/barong/pull/171) ([gfedorenko](https://github.com/gfedorenko)) +- Removed 'utility bill' from 'documents' dropdown options and changed notice for successeful email confirmation [\#170](https://github.com/rubykube/barong/pull/170) ([m-an](https://github.com/m-an)) +- Increase max size of upload [\#162](https://github.com/rubykube/barong/pull/162) ([spavlishak](https://github.com/spavlishak)) +- Create API documentation [\#158](https://github.com/rubykube/barong/pull/158) ([vpetrusenko](https://github.com/vpetrusenko)) +- Set new devise layout as in application \(\#144, \#157\) [\#155](https://github.com/rubykube/barong/pull/155) ([spavlishak](https://github.com/spavlishak)) +- Make drag and drop for documents work [\#154](https://github.com/rubykube/barong/pull/154) ([amir-budaychiev](https://github.com/amir-budaychiev)) +- Switch to grape [\#153](https://github.com/rubykube/barong/pull/153) ([vpetrusenko](https://github.com/vpetrusenko)) +- Minor fixes for phones/new form [\#150](https://github.com/rubykube/barong/pull/150) ([gfedorenko](https://github.com/gfedorenko)) +- Add document validation [\#149](https://github.com/rubykube/barong/pull/149) ([spavlishak](https://github.com/spavlishak)) +- Fixes for workbench [\#142](https://github.com/rubykube/barong/pull/142) ([dmk](https://github.com/dmk)) +- Removed unused views [\#139](https://github.com/rubykube/barong/pull/139) ([gfedorenko](https://github.com/gfedorenko)) + +## [1.0.0](https://github.com/rubykube/barong/tree/1.0.0) (2018-02-19) +**Closed issues:** + +- «Some fields are empty or invalid» when submitting KyC [\#136](https://github.com/rubykube/barong/issues/136) +- Fix tests after redesign [\#126](https://github.com/rubykube/barong/issues/126) +- Create dropdown for countries [\#124](https://github.com/rubykube/barong/issues/124) +- Fix URL in readme [\#116](https://github.com/rubykube/barong/issues/116) +- User has ability to get back to already passed step verification [\#115](https://github.com/rubykube/barong/issues/115) +- Doc type dropdown awful [\#111](https://github.com/rubykube/barong/issues/111) +- Fix role changement in admin panel [\#109](https://github.com/rubykube/barong/issues/109) +- Fix license name in readme [\#94](https://github.com/rubykube/barong/issues/94) +- Phone verification form doesn't check phone for uniqueness [\#88](https://github.com/rubykube/barong/issues/88) +- It is possible to create document leaving all fields blank [\#86](https://github.com/rubykube/barong/issues/86) +- break-word causes mail addresses to display ugly [\#85](https://github.com/rubykube/barong/issues/85) +- Missing sender name for emails [\#83](https://github.com/rubykube/barong/issues/83) +- Handle issue on phone verification step [\#75](https://github.com/rubykube/barong/issues/75) +- Integration of omniauth-barong into barongClientTestApp [\#41](https://github.com/rubykube/barong/issues/41) +- Rake task for creating application [\#40](https://github.com/rubykube/barong/issues/40) +- Rake task for creating an admin user [\#39](https://github.com/rubykube/barong/issues/39) +- Add .level field [\#34](https://github.com/rubykube/barong/issues/34) +- Add ability to customize design [\#29](https://github.com/rubykube/barong/issues/29) +- Adding KYC [\#28](https://github.com/rubykube/barong/issues/28) +- Adding 2FA auth. with Google Auth. [\#25](https://github.com/rubykube/barong/issues/25) +- Adding Phone verification system [\#24](https://github.com/rubykube/barong/issues/24) +- Adding doorkeeper into the stack [\#23](https://github.com/rubykube/barong/issues/23) +- CRUD for accounts [\#19](https://github.com/rubykube/barong/issues/19) +- Prevent accounts from brute-force attack \(devise lockable\) [\#13](https://github.com/rubykube/barong/issues/13) +- Create admin panel boilerplate [\#12](https://github.com/rubykube/barong/issues/12) +- Create a light layout maybe using bootstrap [\#10](https://github.com/rubykube/barong/issues/10) +- Dockerfile and pipeline for Barong [\#3](https://github.com/rubykube/barong/issues/3) +- Ability to register with email and password [\#2](https://github.com/rubykube/barong/issues/2) +- Create Account Migration [\#1](https://github.com/rubykube/barong/issues/1) + +**Merged pull requests:** + +- Fix for login [\#143](https://github.com/rubykube/barong/pull/143) ([gfedorenko](https://github.com/gfedorenko)) +- Minor fixes [\#141](https://github.com/rubykube/barong/pull/141) ([gfedorenko](https://github.com/gfedorenko)) +- Modify email and sender name [\#140](https://github.com/rubykube/barong/pull/140) ([gfedorenko](https://github.com/gfedorenko)) +- Include profile.state in jwt [\#135](https://github.com/rubykube/barong/pull/135) ([ec](https://github.com/ec)) +- Update chart [\#134](https://github.com/rubykube/barong/pull/134) ([shal](https://github.com/shal)) +- Put working links in footer [\#133](https://github.com/rubykube/barong/pull/133) ([gfedorenko](https://github.com/gfedorenko)) +- Add UID for Account [\#132](https://github.com/rubykube/barong/pull/132) ([vpetrusenko](https://github.com/vpetrusenko)) +- Splitted profile-document form [\#131](https://github.com/rubykube/barong/pull/131) ([gfedorenko](https://github.com/gfedorenko)) +- Add dropdown for countries \(closes \#124\) [\#130](https://github.com/rubykube/barong/pull/130) ([spavlishak](https://github.com/spavlishak)) +- Fix tests due to new forms [\#128](https://github.com/rubykube/barong/pull/128) ([spavlishak](https://github.com/spavlishak)) +- Update oauth callback [\#127](https://github.com/rubykube/barong/pull/127) ([vpetrusenko](https://github.com/vpetrusenko)) +- Include name in JWT [\#123](https://github.com/rubykube/barong/pull/123) ([dmk](https://github.com/dmk)) +- Fix url in Readme [\#122](https://github.com/rubykube/barong/pull/122) ([spavlishak](https://github.com/spavlishak)) +- Add JWT support to chart [\#120](https://github.com/rubykube/barong/pull/120) ([shal](https://github.com/shal)) +- Verification process design \(Identity, phone, documents\) [\#107](https://github.com/rubykube/barong/pull/107) ([webmix](https://github.com/webmix)) +- Minor fixes to index page [\#106](https://github.com/rubykube/barong/pull/106) ([vpetrusenko](https://github.com/vpetrusenko)) +- Unifying styles in the admin panel [\#105](https://github.com/rubykube/barong/pull/105) ([amir-budaychiev](https://github.com/amir-budaychiev)) +- Add missing \ [\#104](https://github.com/rubykube/barong/pull/104) ([yivo](https://github.com/yivo)) +- Use JWT token for authentication [\#103](https://github.com/rubykube/barong/pull/103) ([dmk](https://github.com/dmk)) +- Unifying styles in the admin panel [\#102](https://github.com/rubykube/barong/pull/102) ([amir-budaychiev](https://github.com/amir-budaychiev)) +- Fix for phone code button [\#100](https://github.com/rubykube/barong/pull/100) ([vpetrusenko](https://github.com/vpetrusenko)) +- Fix for js [\#98](https://github.com/rubykube/barong/pull/98) ([gfedorenko](https://github.com/gfedorenko)) +- Fix for approving profile [\#97](https://github.com/rubykube/barong/pull/97) ([gfedorenko](https://github.com/gfedorenko)) +- Changed license in README [\#95](https://github.com/rubykube/barong/pull/95) ([gfedorenko](https://github.com/gfedorenko)) +- Added GCS credentials to helm charts [\#93](https://github.com/rubykube/barong/pull/93) ([shal](https://github.com/shal)) +- Added sender's name [\#92](https://github.com/rubykube/barong/pull/92) ([gfedorenko](https://github.com/gfedorenko)) +- Return if phone is already in db [\#91](https://github.com/rubykube/barong/pull/91) ([gfedorenko](https://github.com/gfedorenko)) +- Google cloud upload [\#90](https://github.com/rubykube/barong/pull/90) ([gfedorenko](https://github.com/gfedorenko)) +- Added some validations [\#82](https://github.com/rubykube/barong/pull/82) ([gfedorenko](https://github.com/gfedorenko)) +- Production fixes [\#81](https://github.com/rubykube/barong/pull/81) ([shal](https://github.com/shal)) +- Change license to Apache 2.0 [\#79](https://github.com/rubykube/barong/pull/79) ([calj](https://github.com/calj)) +- Two Factor Auth [\#78](https://github.com/rubykube/barong/pull/78) ([shal](https://github.com/shal)) +- Small improvements [\#74](https://github.com/rubykube/barong/pull/74) ([gfedorenko](https://github.com/gfedorenko)) +- Style improvements on documents, sign in/sign up, profiles, removing header [\#73](https://github.com/rubykube/barong/pull/73) ([spavlishak](https://github.com/spavlishak)) +- Improve some styles [\#71](https://github.com/rubykube/barong/pull/71) ([spavlishak](https://github.com/spavlishak)) +- Rework devise error to be UI benevolent [\#70](https://github.com/rubykube/barong/pull/70) ([ec](https://github.com/ec)) +- Changed datepicker and sms body [\#69](https://github.com/rubykube/barong/pull/69) ([gfedorenko](https://github.com/gfedorenko)) +- Add helm chart to docker ignore files [\#68](https://github.com/rubykube/barong/pull/68) ([shal](https://github.com/shal)) +- Added favicon [\#66](https://github.com/rubykube/barong/pull/66) ([shal](https://github.com/shal)) +- Improvments for levels [\#65](https://github.com/rubykube/barong/pull/65) ([vpetrusenko](https://github.com/vpetrusenko)) +- Provide readme [\#64](https://github.com/rubykube/barong/pull/64) ([shal](https://github.com/shal)) +- Fixed background image [\#63](https://github.com/rubykube/barong/pull/63) ([shal](https://github.com/shal)) +- Added meta tag for mobile view [\#62](https://github.com/rubykube/barong/pull/62) ([gfedorenko](https://github.com/gfedorenko)) +- Fix mail sender email [\#61](https://github.com/rubykube/barong/pull/61) ([shal](https://github.com/shal)) +- Deployment [\#60](https://github.com/rubykube/barong/pull/60) ([shal](https://github.com/shal)) +- Implement levels [\#59](https://github.com/rubykube/barong/pull/59) ([vpetrusenko](https://github.com/vpetrusenko)) +- Work on uploading documents has been continued, fixed the rubocop and rspec tests [\#58](https://github.com/rubykube/barong/pull/58) ([amir-budaychiev](https://github.com/amir-budaychiev)) +- Fixed barong host in chart [\#57](https://github.com/rubykube/barong/pull/57) ([shal](https://github.com/shal)) +- Removed unnecessary views [\#56](https://github.com/rubykube/barong/pull/56) ([gfedorenko](https://github.com/gfedorenko)) +- Custom logo, header, footer support & helm chart fix [\#55](https://github.com/rubykube/barong/pull/55) ([shal](https://github.com/shal)) +- Feature/rake seed [\#54](https://github.com/rubykube/barong/pull/54) ([mod](https://github.com/mod)) +- Adding verification design [\#53](https://github.com/rubykube/barong/pull/53) ([gfedorenko](https://github.com/gfedorenko)) +- custom css helper [\#52](https://github.com/rubykube/barong/pull/52) ([mod](https://github.com/mod)) +- Added profiles section to the admin panel [\#50](https://github.com/rubykube/barong/pull/50) ([amir-budaychiev](https://github.com/amir-budaychiev)) +- Fix production mailer & move to helios-public [\#47](https://github.com/rubykube/barong/pull/47) ([ysv](https://github.com/ysv)) +- Fixing the tests [\#43](https://github.com/rubykube/barong/pull/43) ([amir-budaychiev](https://github.com/amir-budaychiev)) +- fixed the tests [\#42](https://github.com/rubykube/barong/pull/42) ([amir-budaychiev](https://github.com/amir-budaychiev)) +- Adding layout for profiles and documents [\#38](https://github.com/rubykube/barong/pull/38) ([vpetrusenko](https://github.com/vpetrusenko)) +- Deploy [\#37](https://github.com/rubykube/barong/pull/37) ([shal](https://github.com/shal)) +- Add ability to customize design [\#33](https://github.com/rubykube/barong/pull/33) ([spavlishak](https://github.com/spavlishak)) +- Scaffold website table [\#30](https://github.com/rubykube/barong/pull/30) ([mod](https://github.com/mod)) +- Added ability to connect phone number to account [\#27](https://github.com/rubykube/barong/pull/27) ([gfedorenko](https://github.com/gfedorenko)) +- Adding doorkeeper into the stack [\#26](https://github.com/rubykube/barong/pull/26) ([vpetrusenko](https://github.com/vpetrusenko)) +- Added listing of accounts with ability to delete or edit [\#22](https://github.com/rubykube/barong/pull/22) ([gfedorenko](https://github.com/gfedorenko)) +- Provide License [\#21](https://github.com/rubykube/barong/pull/21) ([spavlishak](https://github.com/spavlishak)) +- Front-end: Bootstrap Gem, Devise forms, Skinning [\#18](https://github.com/rubykube/barong/pull/18) ([webmix](https://github.com/webmix)) +- Set devise secret on container build [\#17](https://github.com/rubykube/barong/pull/17) ([ysv](https://github.com/ysv)) +- Add BS4 for admin & navigation. [\#16](https://github.com/rubykube/barong/pull/16) ([yivo](https://github.com/yivo)) +- K8s [\#15](https://github.com/rubykube/barong/pull/15) ([ysv](https://github.com/ysv)) +- Add admin panel boilerplate [\#14](https://github.com/rubykube/barong/pull/14) ([yivo](https://github.com/yivo)) +- Lockable for devise [\#11](https://github.com/rubykube/barong/pull/11) ([gfedorenko](https://github.com/gfedorenko)) +- Initialize Devise missing views and routes [\#9](https://github.com/rubykube/barong/pull/9) ([mod](https://github.com/mod)) +- Add TravisCI configuration & RSpec + Capybara boilerplate. [\#8](https://github.com/rubykube/barong/pull/8) ([yivo](https://github.com/yivo)) +- Add rubocop.yml [\#7](https://github.com/rubykube/barong/pull/7) ([yivo](https://github.com/yivo)) +- Prepare initial configuration and gemset [\#6](https://github.com/rubykube/barong/pull/6) ([yivo](https://github.com/yivo)) +- Development & software operations [\#5](https://github.com/rubykube/barong/pull/5) ([ysv](https://github.com/ysv)) + + + +\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)* \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..0a53f9f --- /dev/null +++ b/Dockerfile @@ -0,0 +1,35 @@ +# syntax=docker/dockerfile:1.4 +# Fast app image — gems come from deps base (custom/dalan-deps:1). +# Rebuild deps when Gemfile.lock changes: docker build -f Dockerfile.deps -t custom/dalan-deps:1 . +ARG DEPS_IMAGE=custom/dalan-deps:1 +FROM ${DEPS_IMAGE} + +ARG MAXMINDDB_LINK +ARG MAXMINDDB_LICENSE_KEY=T6ElPBlyOOuCyjzw +ENV MAXMINDDB_LINK=${MAXMINDDB_LINK:-https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-Country&suffix=tar.gz&license_key=${MAXMINDDB_LICENSE_KEY}} \ + RAILS_ENV=production \ + APP_HOME=/home/app + +USER app +WORKDIR $APP_HOME + +COPY --chown=app:app . . + +RUN mkdir -p ${APP_HOME}/geolite \ + && (wget -qO ${APP_HOME}/geolite.tar.gz "${MAXMINDDB_LINK}" \ + && tar xzf ${APP_HOME}/geolite.tar.gz -C ${APP_HOME}/geolite --strip-components 1 \ + && rm ${APP_HOME}/geolite.tar.gz \ + || echo "GeoLite download skipped — using placeholder") \ + && test -f ${APP_HOME}/geolite/GeoLite2-Country.mmdb || touch ${APP_HOME}/geolite/GeoLite2-Country.mmdb + +ENV BARONG_MAXMINDDB_PATH=${APP_HOME}/geolite/GeoLite2-Country.mmdb + +RUN curl -fsSL https://www.cloudflare.com/ips-v4 >> ${APP_HOME}/config/cloudflare_ips.yml \ + && echo "" >> ${APP_HOME}/config/cloudflare_ips.yml \ + && curl -fsSL https://www.cloudflare.com/ips-v6 >> ${APP_HOME}/config/cloudflare_ips.yml + +RUN ruby ./bin/init_config \ + && bundle exec rake tmp:create + +EXPOSE 8080 +CMD ["bundle", "exec", "puma", "--config", "config/puma.rb"] diff --git a/Dockerfile.deps b/Dockerfile.deps new file mode 100644 index 0000000..a065d2f --- /dev/null +++ b/Dockerfile.deps @@ -0,0 +1,35 @@ +# syntax=docker/dockerfile:1.4 +# Heavy layer: Ruby gems + system packages. Rebuild only when Gemfile.lock changes. +# docker build -f Dockerfile.deps -t custom/dalan-deps:1 . +FROM ruby:2.7.8 + +ARG UID=1000 +ARG GID=1000 + +ENV APP_HOME=/home/app \ + BUNDLE_PATH=/opt/vendor/bundle \ + TZ=UTC + +RUN groupadd -r --gid ${GID} app \ + && useradd --system --create-home --home ${APP_HOME} --shell /sbin/nologin --no-log-init \ + --gid ${GID} --uid ${UID} app + +WORKDIR $APP_HOME + +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ + --mount=type=cache,target=/var/lib/apt,sharing=locked \ + apt-get update \ + && apt-get install -y --no-install-recommends default-libmysqlclient-dev git curl wget \ + && rm -rf /var/lib/apt/lists/* \ + && gem install bundler:2.2.16 + +COPY Gemfile Gemfile.lock ./ + +RUN mkdir -p ${BUNDLE_PATH} \ + && chown -R app:app ${BUNDLE_PATH} ${APP_HOME} \ + && su app -s /bin/bash -c "bundle config set --local path ${BUNDLE_PATH} \ + && bundle config set --local without 'development test' \ + && bundle install --jobs $(nproc)" + +USER app +ENV PATH="${BUNDLE_PATH}/bin:${PATH}" diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..0711f7b --- /dev/null +++ b/Gemfile @@ -0,0 +1,125 @@ +source 'https://rubygems.org' +git_source(:github) { |repo| "https://github.com/#{repo}.git" } + +ruby '~> 2.7' + +gem 'aliyun-sdk', '~> 0.7.0' +gem 'api-pagination', '~> 4.8.2' + +gem 'env-tweaks', '~> 1.0.0' + +gem 'hashie', '~> 3.6.0' + +# storage related gems +gem 'carrierwave', '~> 2.1', '>= 2.1.0' +# fog's core, shared behaviors without API and provider specifics +gem 'fog-core', '~> 2.1.0' +# alicloud support +gem 'fog-aliyun', '~> 0.3.5' +# aws support (amazon) +gem 'fog-aws', '~> 3.5.2' +# gcp support (google) +gem 'fog-google', '~> 1.9.1' + +gem 'kycaid' +gem 'sidekiq', '>= 6.4.0', '< 7' +# GLI +gem 'gli', '~> 2.19.0' +## +## abilities and permissions for admin API module +gem 'cancancan', '~> 2.3.0' + +gem 'hiredis', '~> 0.6.1' +# Bundle edge Rails instead: gem 'rails', github: 'rails/rails' +gem 'rails', '~> 5.2.4', '>= 5.2.4.4' +# Use mysql as the database for Active Record +gem 'mysql2', '>= 0.4.4', '< 0.6.0' +# Use Puma as the app server +gem 'puma', '~> 3.12', '>= 3.12.6' +# Use Uglifier as compressor for JavaScript assets +gem 'uglifier', '>= 1.3.0' +# See https://github.com/rails/execjs#readme for more supported runtimes +gem 'mini_racer', platforms: :ruby + +gem 'maxmind-db', '~> 1.0' + +gem 'kaminari', '>= 1.2.1' +gem 'peatio', '~> 0.4.4' +gem 'rack-cors', '~> 1.0.2' +# REST-like API framework for Ruby +gem 'grape', '~> 1.4' +gem 'grape-entity', '~> 0.8' +gem 'grape-swagger', '~> 1.2' +gem 'grape-swagger-entity', '~> 0.5' +gem 'grape_logging', '~> 1.8' +gem 'memoist', '~> 0.16' +gem 'jwt', '~> 2.2' +gem 'jwt-multisig', '~> 1.0', '>= 1.0.4' +gem 'bunny' +gem 'phonelib', '~> 0.6.45' +gem 'twilio-ruby', '~> 5.25.4' +gem 'vault', '~> 0.1' +gem 'vault-rails', git: 'https://github.com/rubykube/vault-rails' +# Use Redis adapter to run Action Cable in production +gem 'redis', '~> 4.0', :require => ['redis', 'redis/connection/hiredis'] + +gem 'bcrypt', '~> 3.1' +# Email validators. Lock at 1.6.0 to use /strict dependency +gem 'email_validator', '= 1.6.0', require: 'email_validator/strict' + +gem 'countries', require: 'countries/global' +gem 'browser', require: "browser/browser" +gem 'bump' + +# Use gem to verify recatpcha on server side +gem 'recaptcha', '>= 5.2.1' +# Password validators +gem 'strong_password', '~> 0.0.8' +# Use ActiveStorage variant +# gem 'mini_magick', '~> 4.8' + +# Reduces boot times through caching; required in config/boot.rb +gem 'bootsnap', '>= 1.1.0', require: false + +# Add the Sentry Ruby SDK +gem 'sentry-raven', '~> 2.9.0' +gem 'pry-rails' + + +#for kave negar third party +gem 'kavenegar-ruby' + + +group :development, :test do + # Call 'byebug' or 'binding.pry' anywhere in the code to stop execution and get a debugger console + gem 'pry-byebug', platforms: [:mri, :mingw, :x64_mingw] + gem 'factory_bot_rails', '~> 4.11', '>= 4.11.1' + gem 'faker', '~> 2.1' +end + +group :development do + gem 'grape_on_rails_routes', '~> 0.3.2' + gem 'web-console', '>= 3.7.0' + gem 'listen', '>= 3.0.5', '< 3.2' + gem 'annotate', '~> 2.7', '>= 2.7.5' +end + +group :test do + gem 'capybara', '>= 3.29.0' + # gem 'selenium-webdriver' + # gem 'chromedriver-helper' + gem 'rspec-rails', '~> 3.9', '>= 3.9.1' + gem 'shoulda-matchers', '~> 4.0.1.0' + gem 'rails-controller-testing', '>= 1.0.5' + gem 'database_cleaner', '~> 2.0.1' +end + +gem "pg", "~> 1.2" +gem 'dotenv-rails' + +# Security patches — see Docs/10-cve-audit.md (phase 1) +gem 'rack', '~> 2.2.13' +gem 'nokogiri', '~> 1.15.5' +gem 'rexml', '>= 3.3.9' +gem 'tzinfo', '~> 1.2.10' +gem 'rails-html-sanitizer', '>= 1.4.4' diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..3d7b03d --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,541 @@ +GIT + remote: https://github.com/rubykube/vault-rails + revision: b5e6570d1268fe0153b72200bbc58c5254d6c848 + specs: + vault-rails (0.6.0) + rails (>= 4.1) + vault (~> 0.14) + +GEM + remote: https://rubygems.org/ + specs: + actioncable (5.2.4.4) + actionpack (= 5.2.4.4) + nio4r (~> 2.0) + websocket-driver (>= 0.6.1) + actionmailer (5.2.4.4) + actionpack (= 5.2.4.4) + actionview (= 5.2.4.4) + activejob (= 5.2.4.4) + mail (~> 2.5, >= 2.5.4) + rails-dom-testing (~> 2.0) + actionpack (5.2.4.4) + actionview (= 5.2.4.4) + activesupport (= 5.2.4.4) + rack (~> 2.0, >= 2.0.8) + rack-test (>= 0.6.3) + rails-dom-testing (~> 2.0) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + actionview (5.2.4.4) + activesupport (= 5.2.4.4) + builder (~> 3.1) + erubi (~> 1.4) + rails-dom-testing (~> 2.0) + rails-html-sanitizer (~> 1.0, >= 1.0.3) + activejob (5.2.4.4) + activesupport (= 5.2.4.4) + globalid (>= 0.3.6) + activemodel (5.2.4.4) + activesupport (= 5.2.4.4) + activerecord (5.2.4.4) + activemodel (= 5.2.4.4) + activesupport (= 5.2.4.4) + arel (>= 9.0) + activestorage (5.2.4.4) + actionpack (= 5.2.4.4) + activerecord (= 5.2.4.4) + marcel (~> 0.3.1) + activesupport (5.2.4.4) + concurrent-ruby (~> 1.0, >= 1.0.2) + i18n (>= 0.7, < 2) + minitest (~> 5.1) + tzinfo (~> 1.1) + addressable (2.7.0) + public_suffix (>= 2.0.2, < 5.0) + aliyun-sdk (0.7.3) + nokogiri (~> 1.6) + rest-client (~> 2.0) + amq-protocol (2.3.2) + amqp (1.8.0) + amq-protocol (>= 2.2.0) + eventmachine + annotate (2.7.5) + activerecord (>= 3.2, < 7.0) + rake (>= 10.4, < 13.0) + api-pagination (4.8.2) + arel (9.0.0) + aws-eventstream (1.1.0) + aws-sigv4 (1.2.2) + aws-eventstream (~> 1, >= 1.0.2) + bcrypt (3.1.15) + bindex (0.8.1) + bootsnap (1.4.7) + msgpack (~> 1.0) + browser (4.2.0) + builder (3.2.4) + bump (0.9.0) + bunny (2.15.0) + amq-protocol (~> 2.3, >= 2.3.1) + byebug (11.1.3) + cancancan (2.3.0) + capybara (3.33.0) + addressable + mini_mime (>= 0.1.3) + nokogiri (~> 1.8) + rack (>= 1.6.0) + rack-test (>= 0.6.3) + regexp_parser (~> 1.5) + xpath (~> 3.2) + carrierwave (2.1.0) + activemodel (>= 5.0.0) + activesupport (>= 5.0.0) + addressable (~> 2.6) + image_processing (~> 1.1) + mimemagic (>= 0.3.0) + mini_mime (>= 0.1.3) + clamp (1.3.1) + coderay (1.1.3) + concurrent-ruby (1.1.7) + connection_pool (2.5.5) + countries (3.0.1) + i18n_data (~> 0.10.0) + sixarm_ruby_unaccent (~> 1.1) + unicode_utils (~> 1.4) + crass (1.0.7) + database_cleaner (2.0.1) + database_cleaner-active_record (~> 2.0.0) + database_cleaner-active_record (2.0.0) + activerecord (>= 5.a) + database_cleaner-core (~> 2.0.0) + database_cleaner-core (2.0.1) + declarative (0.0.20) + declarative-option (0.1.0) + diff-lcs (1.4.4) + domain_name (0.5.20190701) + unf (>= 0.0.5, < 1.0.0) + dotenv (2.7.6) + dotenv-rails (2.7.6) + dotenv (= 2.7.6) + railties (>= 3.2) + dry-configurable (0.11.6) + concurrent-ruby (~> 1.0) + dry-core (~> 0.4, >= 0.4.7) + dry-equalizer (~> 0.2) + dry-container (0.7.2) + concurrent-ruby (~> 1.0) + dry-configurable (~> 0.1, >= 0.1.3) + dry-core (0.4.9) + concurrent-ruby (~> 1.0) + dry-equalizer (0.3.0) + dry-inflector (0.2.0) + dry-logic (1.0.6) + concurrent-ruby (~> 1.0) + dry-core (~> 0.2) + dry-equalizer (~> 0.2) + dry-types (1.4.0) + concurrent-ruby (~> 1.0) + dry-container (~> 0.3) + dry-core (~> 0.4, >= 0.4.4) + dry-equalizer (~> 0.3) + dry-inflector (~> 0.1, >= 0.1.2) + dry-logic (~> 1.0, >= 1.0.2) + em-websocket (0.5.1) + eventmachine (>= 0.12.9) + http_parser.rb (~> 0.6.0) + email_validator (1.6.0) + activemodel + env-tweaks (1.0.0) + activesupport (>= 3.0, < 6.0) + erubi (1.9.0) + eventmachine (1.2.7) + excon (0.76.0) + execjs (2.7.0) + factory_bot (4.11.1) + activesupport (>= 3.0.0) + factory_bot_rails (4.11.1) + factory_bot (~> 4.11.1) + railties (>= 3.0.0) + faker (2.13.0) + i18n (>= 1.6, < 2) + faraday (0.17.3) + multipart-post (>= 1.2, < 3) + faraday_middleware (0.13.1) + faraday (>= 0.7.4, < 1.0) + feedjira (3.1.2) + loofah (>= 2.3.1) + sax-machine (>= 1.0) + ffi (1.13.1) + fog-aliyun (0.3.18) + aliyun-sdk (~> 0.7.3) + fog-core + fog-json + ipaddress (~> 0.8) + xml-simple (~> 1.1) + fog-aws (3.5.2) + fog-core (~> 2.1) + fog-json (~> 1.1) + fog-xml (~> 0.1) + ipaddress (~> 0.8) + fog-core (2.1.0) + builder + excon (~> 0.58) + formatador (~> 0.2) + mime-types + fog-google (1.9.1) + fog-core (<= 2.1.0) + fog-json (~> 1.2) + fog-xml (~> 0.1.0) + google-api-client (~> 0.23.0) + fog-json (1.2.0) + fog-core + multi_json (~> 1.10) + fog-xml (0.1.3) + fog-core + nokogiri (>= 1.5.11, < 2.0.0) + formatador (0.2.5) + gli (2.19.2) + globalid (0.4.2) + activesupport (>= 4.2.0) + google-api-client (0.23.9) + addressable (~> 2.5, >= 2.5.1) + googleauth (>= 0.5, < 0.7.0) + httpclient (>= 2.8.1, < 3.0) + mime-types (~> 3.0) + representable (~> 3.0) + retriable (>= 2.0, < 4.0) + signet (~> 0.9) + googleauth (0.6.7) + faraday (~> 0.12) + jwt (>= 1.4, < 3.0) + memoist (~> 0.16) + multi_json (~> 1.11) + os (>= 0.9, < 2.0) + signet (~> 0.7) + grape (1.4.0) + activesupport + builder + dry-types (>= 1.1) + mustermann-grape (~> 1.0.0) + rack (>= 1.3.0) + rack-accept + grape-entity (0.8.1) + activesupport (>= 3.0.0) + multi_json (>= 1.3.2) + grape-swagger (1.2.1) + grape (~> 1.3) + grape-swagger-entity (0.5.1) + grape-entity (>= 0.6.0) + grape-swagger (>= 1.2.0) + grape_logging (1.8.3) + grape + rack + grape_on_rails_routes (0.3.2) + rails (>= 3.1.1) + hashie (3.6.0) + hiredis (0.6.3) + http-accept (1.7.0) + http-cookie (1.0.3) + domain_name (~> 0.5) + http_parser.rb (0.6.0) + httpclient (2.8.3) + i18n (1.8.5) + concurrent-ruby (~> 1.0) + i18n_data (0.10.0) + image_processing (1.11.0) + mini_magick (>= 4.9.5, < 5) + ruby-vips (>= 2.0.17, < 3) + ipaddress (0.8.3) + json (2.3.1) + jwt (2.2.2) + jwt-multisig (1.0.4) + activesupport (>= 4.0) + jwt (~> 2.2) + kaminari (1.2.1) + activesupport (>= 4.1.0) + kaminari-actionview (= 1.2.1) + kaminari-activerecord (= 1.2.1) + kaminari-core (= 1.2.1) + kaminari-actionview (1.2.1) + actionview + kaminari-core (= 1.2.1) + kaminari-activerecord (1.2.1) + activerecord + kaminari-core (= 1.2.1) + kaminari-core (1.2.1) + kavenegar-ruby (1.0.0) + faraday + faraday_middleware + feedjira + i18n + json + validatable (~> 1.6) + kycaid (1.0.0) + faraday + json + libv8 (8.4.255.0) + listen (3.1.5) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + ruby_dep (~> 1.2) + loofah (2.25.1) + crass (~> 1.0.2) + nokogiri (>= 1.12.0) + mail (2.7.1) + mini_mime (>= 0.1.1) + marcel (0.3.3) + mimemagic (~> 0.3.2) + maxmind-db (1.1.1) + memoist (0.16.2) + method_source (1.0.0) + mime-types (3.3.1) + mime-types-data (~> 3.2015) + mime-types-data (3.2020.0512) + mimemagic (0.3.10) + nokogiri (~> 1) + rake + mini_magick (4.10.1) + mini_mime (1.0.2) + mini_portile2 (2.8.9) + mini_racer (0.3.1) + libv8 (~> 8.4.255) + minitest (5.14.2) + msgpack (1.3.3) + multi_json (1.15.0) + multipart-post (2.1.1) + mustermann (1.1.1) + ruby2_keywords (~> 0.0.1) + mustermann-grape (1.0.1) + mustermann (>= 1.0.0) + mysql2 (0.5.3) + netrc (0.11.0) + nio4r (2.5.3) + nokogiri (1.15.7) + mini_portile2 (~> 2.8.2) + racc (~> 1.4) + os (1.1.1) + peatio (0.4.5) + amqp + bunny + clamp + em-websocket + eventmachine + jwt + mysql2 + pg (1.2.3) + phonelib (0.6.45) + pry (0.13.1) + coderay (~> 1.1) + method_source (~> 1.0) + pry-byebug (3.9.0) + byebug (~> 11.0) + pry (~> 0.13.0) + pry-rails (0.3.9) + pry (>= 0.10.4) + public_suffix (4.0.5) + puma (3.12.6) + racc (1.8.1) + rack (2.2.23) + rack-accept (0.4.5) + rack (>= 0.4) + rack-cors (1.0.6) + rack (>= 1.6.0) + rack-test (1.1.0) + rack (>= 1.0, < 3) + rails (5.2.4.4) + actioncable (= 5.2.4.4) + actionmailer (= 5.2.4.4) + actionpack (= 5.2.4.4) + actionview (= 5.2.4.4) + activejob (= 5.2.4.4) + activemodel (= 5.2.4.4) + activerecord (= 5.2.4.4) + activestorage (= 5.2.4.4) + activesupport (= 5.2.4.4) + bundler (>= 1.3.0) + railties (= 5.2.4.4) + sprockets-rails (>= 2.0.0) + rails-controller-testing (1.0.5) + actionpack (>= 5.0.1.rc1) + actionview (>= 5.0.1.rc1) + activesupport (>= 5.0.1.rc1) + rails-dom-testing (2.0.3) + activesupport (>= 4.2.0) + nokogiri (>= 1.6) + rails-html-sanitizer (1.5.0) + loofah (~> 2.19, >= 2.19.1) + railties (5.2.4.4) + actionpack (= 5.2.4.4) + activesupport (= 5.2.4.4) + method_source + rake (>= 0.8.7) + thor (>= 0.19.0, < 2.0) + rake (12.3.3) + rb-fsevent (0.10.4) + rb-inotify (0.10.1) + ffi (~> 1.0) + recaptcha (5.5.0) + json + redis (4.8.1) + regexp_parser (1.7.1) + representable (3.0.4) + declarative (< 0.1.0) + declarative-option (< 0.2.0) + uber (< 0.2.0) + rest-client (2.1.0) + http-accept (>= 1.7.0, < 2.0) + http-cookie (>= 1.0.2, < 2.0) + mime-types (>= 1.16, < 4.0) + netrc (~> 0.8) + retriable (3.1.2) + rexml (3.4.4) + rspec-core (3.9.2) + rspec-support (~> 3.9.3) + rspec-expectations (3.9.2) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.9.0) + rspec-mocks (3.9.1) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.9.0) + rspec-rails (3.9.1) + actionpack (>= 3.0) + activesupport (>= 3.0) + railties (>= 3.0) + rspec-core (~> 3.9.0) + rspec-expectations (~> 3.9.0) + rspec-mocks (~> 3.9.0) + rspec-support (~> 3.9.0) + rspec-support (3.9.3) + ruby-vips (2.0.17) + ffi (~> 1.9) + ruby2_keywords (0.0.2) + ruby_dep (1.5.0) + sax-machine (1.3.2) + sentry-raven (2.9.0) + faraday (>= 0.7.6, < 1.0) + shoulda-matchers (4.0.1) + activesupport (>= 4.2.0) + sidekiq (6.5.12) + connection_pool (>= 2.2.5, < 3) + rack (~> 2.0) + redis (>= 4.5.0, < 5) + signet (0.14.0) + addressable (~> 2.3) + faraday (>= 0.17.3, < 2.0) + jwt (>= 1.5, < 3.0) + multi_json (~> 1.10) + sixarm_ruby_unaccent (1.2.0) + sprockets (4.0.2) + concurrent-ruby (~> 1.0) + rack (> 1, < 3) + sprockets-rails (3.2.1) + actionpack (>= 4.0) + activesupport (>= 4.0) + sprockets (>= 3.0.0) + strong_password (0.0.9) + thor (1.0.1) + thread_safe (0.3.6) + twilio-ruby (5.25.4) + faraday (~> 0.9) + jwt (>= 1.5, <= 2.5) + nokogiri (>= 1.6, < 2.0) + tzinfo (1.2.11) + thread_safe (~> 0.1) + uber (0.1.0) + uglifier (4.2.0) + execjs (>= 0.3.0, < 3) + unf (0.1.4) + unf_ext + unf_ext (0.0.7.7) + unicode_utils (1.4.0) + validatable (1.6.7) + vault (0.15.0) + aws-sigv4 + web-console (3.7.0) + actionview (>= 5.0) + activemodel (>= 5.0) + bindex (>= 0.4.0) + railties (>= 5.0) + websocket-driver (0.7.3) + websocket-extensions (>= 0.1.0) + websocket-extensions (0.1.5) + xml-simple (1.1.5) + xpath (3.2.0) + nokogiri (~> 1.8) + +PLATFORMS + ruby + +DEPENDENCIES + aliyun-sdk (~> 0.7.0) + annotate (~> 2.7, >= 2.7.5) + api-pagination (~> 4.8.2) + bcrypt (~> 3.1) + bootsnap (>= 1.1.0) + browser + bump + bunny + cancancan (~> 2.3.0) + capybara (>= 3.29.0) + carrierwave (~> 2.1, >= 2.1.0) + countries + database_cleaner (~> 2.0.1) + dotenv-rails + email_validator (= 1.6.0) + env-tweaks (~> 1.0.0) + factory_bot_rails (~> 4.11, >= 4.11.1) + faker (~> 2.1) + fog-aliyun (~> 0.3.5) + fog-aws (~> 3.5.2) + fog-core (~> 2.1.0) + fog-google (~> 1.9.1) + gli (~> 2.19.0) + grape (~> 1.4) + grape-entity (~> 0.8) + grape-swagger (~> 1.2) + grape-swagger-entity (~> 0.5) + grape_logging (~> 1.8) + grape_on_rails_routes (~> 0.3.2) + hashie (~> 3.6.0) + hiredis (~> 0.6.1) + jwt (~> 2.2) + jwt-multisig (~> 1.0, >= 1.0.4) + kaminari (>= 1.2.1) + kavenegar-ruby + kycaid + listen (>= 3.0.5, < 3.2) + maxmind-db (~> 1.0) + memoist (~> 0.16) + mini_racer + mysql2 (>= 0.4.4, < 0.6.0) + nokogiri (~> 1.15.5) + peatio (~> 0.4.4) + pg (~> 1.2) + phonelib (~> 0.6.45) + pry-byebug + pry-rails + puma (~> 3.12, >= 3.12.6) + rack (~> 2.2.13) + rack-cors (~> 1.0.2) + rails (~> 5.2.4, >= 5.2.4.4) + rails-controller-testing (>= 1.0.5) + rails-html-sanitizer (>= 1.4.4) + recaptcha (>= 5.2.1) + redis (~> 4.0) + rexml (>= 3.3.9) + rspec-rails (~> 3.9, >= 3.9.1) + sentry-raven (~> 2.9.0) + shoulda-matchers (~> 4.0.1.0) + sidekiq (>= 6.4.0, < 7) + strong_password (~> 0.0.8) + twilio-ruby (~> 5.25.4) + tzinfo (~> 1.2.10) + uglifier (>= 1.3.0) + vault (~> 0.1) + vault-rails! + web-console (>= 3.7.0) + +RUBY VERSION + ruby 2.7.8p225 + +BUNDLED WITH + 2.2.16 diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..e72929e --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,202 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..796e72b --- /dev/null +++ b/README.md @@ -0,0 +1,113 @@ +
+ +# Dalan — احراز هویت Fibitex (Barong) + +**Dalan** فورک [Barong](https://github.com/openware/barong) 2.6 برای JWT، KYC، و مدیریت کاربر Fibitex. + +| OpenDAX | Fibitex | +|---------|---------| +| Barong | **Dalan** | +| `/api/v2/barong` | `/api/v2/dalan` | + +## پیش‌نیازها + +Ruby 2.6.6، MySQL، Vault (در stack Alvand-P) + +## راه‌اندازی سریع + +
+ +```bash +cd ../Alvand-P && rake service:all +``` + +
+ +## مستندات + +| سند | موضوع | +|-----|--------| +| [`Docs/03-dalan-microservice.md`](../Docs/03-dalan-microservice.md) | معماری Dalan | +| [`Docs/Fibitex-staging-deploy.md`](../Docs/Fibitex-staging-deploy.md) | Deploy | +| [`Alvand-P/Docs/QA-troubleshooting.md`](../Alvand-P/Docs/QA-troubleshooting.md) | عیب‌یابی | +| [`Docs/README.md`](../Docs/README.md) | فهرست مرکزی | + +
+ +--- + +# Dalan +it is fork project of barong + +### Barong +[![Build Status](https://ci.openware.work/api/badges/openware/barong/status.svg)](https://ci.openware.work/openware/barong) + +Barong is a authentication service for microservice architectures using JWT standard. +It's developped and maintained by [Openware](https://www.openware.com) team. + +# Overview + +It includes the following features: + +- Registration of users +- Role based access control (RBAC) +- Embedded KyC process +- Integrated [KycAID](https://www.openware.com/sdk/docs/barong/kycaid.html) plugin +- Mailing system: event based, support multi-language, secured by cryptographic signatures +- [Service accounts](https://www.openware.com/sdk/docs/barong/service-accounts.html) +- Focused on user privacy: sensitive informations are encrypted in database using vault, masks are applied on fields in user API endpoints + + +# Development + +Prerequisites: +- Ruby version: `2.6.6` +- Bundler preinstalled +- MySQL preinstalled + +1. Install RubyGems dependencies +``` +bundle install +``` + +2. Copy initialisation files +``` +bin/init_config +``` + +3. Create database and run migrations +``` +bundle exec rake db:create db:migrate +``` + +4. Start local server +``` +bundle exec rails server +``` + +# Barong Levels + +In the process of verification Barong assign different levels to accounts + +- Level 0 is default account level +- Level 1 will apply after email verification +- Level 2 will apply after phone verification +- Level 3 will apply after identity & document verification + +# Useful links to documentation +[Barong configuration](https://www.openware.com/sdk/docs/barong/configuration.html) + +[Troubleshooting](https://www.openware.com/sdk/docs/barong/troubleshooting.html) + +[REST API documentation](https://www.openware.com/sdk/docs/barong/rest-api.html) + +[API Keys creation and usage](https://www.openware.com/sdk/docs/barong/general/api-keys.html) + +[Captcha policy overview and configuration](https://www.openware.com/sdk/docs/barong/general/captcha.html) + +[Setting up 2FA](https://www.openware.com/sdk/docs/barong/2fa.html) + +[Barong password hashing](https://www.openware.com/sdk/docs/barong/general/password-hashing.html) + +[Barong data encryption](https://www.openware.com/sdk/docs/barong/general/encryption.html) + diff --git a/Rakefile b/Rakefile new file mode 100644 index 0000000..c39f789 --- /dev/null +++ b/Rakefile @@ -0,0 +1,7 @@ +# Add your own tasks in files placed in lib/tasks ending in .rake, +# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. + +require_relative 'config/application' +require 'bump/tasks' + +Rails.application.load_tasks diff --git a/VERSION b/VERSION new file mode 100644 index 0000000..e70b452 --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +2.6.0 diff --git a/app/api/base.rb b/app/api/base.rb new file mode 100644 index 0000000..050bb7c --- /dev/null +++ b/app/api/base.rb @@ -0,0 +1,9 @@ +module API + class Base < Grape::API + PREFIX = '/api' + + cascade false + + mount API::V2::Base => API::V2::Base::API_VERSION + end +end diff --git a/app/api/v2/admin/abilities.rb b/app/api/v2/admin/abilities.rb new file mode 100644 index 0000000..8ff9ffd --- /dev/null +++ b/app/api/v2/admin/abilities.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +module API + module V2 + module Admin + # Admin functionality over abilities + class Abilities < Grape::API + namespace :abilities do + desc 'Get all roles and admin_permissions of barong cancan.' + get do + Ability.admin_permissions[current_user.role] || {} + end + end + end + end + end +end diff --git a/app/api/v2/admin/activities.rb b/app/api/v2/admin/activities.rb new file mode 100644 index 0000000..e2282a2 --- /dev/null +++ b/app/api/v2/admin/activities.rb @@ -0,0 +1,61 @@ +# frozen_string_literal: true + +module API + module V2 + module Admin + # Admin functionality over activities table + class Activities < Grape::API + resource :activities do + helpers ::API::V2::NamedParams + helpers ::API::V2::Admin::NamedParams + helpers do + def permitted_search_params(params) + params[:range] = 'created' + params.slice(:action, :uid, :email, :topic, :from, :to, :range, :target_uid).merge(with_user: true, ordered: true) + end + end + + desc 'Returns array of activities as paginated collection', + failure: [ + { code: 401, message: 'Invalid bearer token' } + ], + success: API::V2::Admin::Entities::ActivityWithUser + params do + use :activity_attributes + use :timeperiod_filters + use :pagination_filters + end + get do + admin_authorize! :read, Activity + + activities = API::V2::Queries::ActivityFilter.new(Activity.where(category: 'user')).call(permitted_search_params(params)) + present paginate(activities), with: API::V2::Admin::Entities::ActivityWithUser + end + + desc 'Returns array of activities as paginated collection', + failure: [ + { code: 401, message: 'Invalid bearer token' } + ], + success: API::V2::Admin::Entities::AdminActivity + params do + use :activity_attributes + use :timeperiod_filters + use :pagination_filters + optional :target_uid, + type: { value: String, message: 'admin.activity.non_string_target_uid' } + optional :range, + type: String, + values: { value: -> (p){ %w[created].include?(p) }, message: 'admin.activity.invalid_range' }, + default: 'created' + end + get '/admin' do + admin_authorize! :read, Activity + + activities = API::V2::Queries::ActivityFilter.new(Activity.where(category: 'admin')).call(permitted_search_params(params)) + present paginate(activities), with: API::V2::Admin::Entities::AdminActivity + end + end + end + end + end +end diff --git a/app/api/v2/admin/api_keys.rb b/app/api/v2/admin/api_keys.rb new file mode 100644 index 0000000..61b1acf --- /dev/null +++ b/app/api/v2/admin/api_keys.rb @@ -0,0 +1,41 @@ +# frozen_string_literal: true + +module API + module V2 + module Admin + # Admin functionality over user api keys + class APIKeys < Grape::API + resource :api_keys do + helpers ::API::V2::NamedParams + helpers ::API::V2::Admin::NamedParams + + desc 'List all api keys for selected account.', + failure: [ + { code: 401, message: 'Invalid bearer token' } + ], + success: API::V2::Entities::APIKey + params do + requires :uid, type: String, allow_blank: false, desc: 'user uniq id' + optional :ordering, + values: { value: -> (p){ %w[asc desc].include?(p) }, message: 'api_keys.ordering.invalid_ordering' }, + default: 'asc', + desc: 'If set, returned values will be sorted in specific order, defaults to \'asc\'.' + optional :order_by, + values: { value: -> (p){ APIKey.new.attributes.keys.include?(p) }, message: 'api_keys.ordering.invalid_attribute' }, + default: 'id', + desc: 'Name of the field, which result will be ordered by.' + use :pagination_filters + end + get do + admin_authorize! :read, APIKey + + target_user = User.find_by(uid: params[:uid]) + error!({ errors: ['admin.user.doesnt_exist'] }, 404) if target_user.nil? + + target_user.api_keys.order(params[:order_by] => params[:ordering]).tap { |q| present paginate(q), with: API::V2::Entities::APIKey, except: [:secret] } + end + end + end + end + end +end diff --git a/app/api/v2/admin/base.rb b/app/api/v2/admin/base.rb new file mode 100644 index 0000000..1ad7460 --- /dev/null +++ b/app/api/v2/admin/base.rb @@ -0,0 +1,62 @@ +# frozen_string_literal: true + +require_dependency 'barong/middleware/jwt_authenticator' + +module API::V2 + module Admin + class Base < Grape::API + PREFIX = '/admin' + + use Barong::Middleware::JWTAuthenticator, \ + pubkey: Rails.configuration.x.keystore.public_key + + cascade false + + format :json + content_type :json, 'application/json' + default_format :json + + helpers API::V2::Resource::Utils + + do_not_route_options! + + mount Admin::Users + mount Admin::APIKeys + mount Admin::Permissions + mount Admin::Activities + mount Admin::Metrics + mount Admin::Restrictions + mount Admin::Profiles + mount Admin::Levels + mount Admin::Abilities + + add_swagger_documentation base_path: File.join(API::Base::PREFIX, API::V2::Base::API_VERSION, 'barong', PREFIX), + add_base_path: true, + mount_path: '/swagger', + api_version: API::V2::Base::API_VERSION, + doc_version: Barong::Application::GIT_TAG, + info: { + title: 'Barong', + description: 'RESTful AdminAPI for barong OAuth server' + }, + security_definitions: { + 'BearerToken': { + description: 'Bearer Token authentication', + type: 'basic', + name: 'Authorization', + in: 'header' + } + }, + models: [ + API::V2::Admin::Entities::ActivityWithUser, + API::V2::Admin::Entities::AdminActivity, + API::V2::Admin::Entities::Document, + API::V2::Admin::Entities::Phone, + API::V2::Admin::Entities::Profile, + API::V2::Admin::Entities::UserWithKYC, + API::V2::Admin::Entities::UserWithProfile, + API::V2::Entities::APIKey + ] + end + end +end diff --git a/app/api/v2/admin/entities/activity_with_user.rb b/app/api/v2/admin/entities/activity_with_user.rb new file mode 100644 index 0000000..4698533 --- /dev/null +++ b/app/api/v2/admin/entities/activity_with_user.rb @@ -0,0 +1,49 @@ +# frozen_string_literal: true + +module API::V2::Admin + module Entities + class ActivityWithUser < API::V2::Entities::Base + expose :user_ip, + documentation: { + type: 'String', + desc: 'User IP' + } + + expose :user_agent, + documentation: { + type: 'String', + desc: 'User Browser Agent' + } + + expose :topic, + documentation: { + type: 'String', + desc: 'Defined topic (session, adjustments) or general by default' + } + + expose :action, + documentation: { + type: 'String', + desc: "API action: POST => 'create', PUT => 'update', GET => 'read', DELETE => 'delete', PATCH => 'update' or system if there is no match of HTTP method" + } + + expose :result, + documentation: { + type: 'String', + desc: 'Status of API response: succeed, failed, denied' + } + + expose :data, + documentation: { + type: 'String', + desc: 'Parameters which was sent to specific API endpoint' + } + + expose :user, using: API::V2::Entities::User + + with_options(format_with: :iso_timestamp) do + expose :created_at + end + end + end +end diff --git a/app/api/v2/admin/entities/admin_activity.rb b/app/api/v2/admin/entities/admin_activity.rb new file mode 100644 index 0000000..98192f3 --- /dev/null +++ b/app/api/v2/admin/entities/admin_activity.rb @@ -0,0 +1,50 @@ +# frozen_string_literal: true + +module API::V2::Admin + module Entities + class AdminActivity < API::V2::Entities::Base + expose :user_ip, + documentation: { + type: 'String', + desc: 'User IP' + } + + expose :user_agent, + documentation: { + type: 'String', + desc: 'User Browser Agent' + } + + expose :topic, + documentation: { + type: 'String', + desc: 'Defined topic (session, adjustments) or general by default' + } + + expose :action, + documentation: { + type: 'String', + desc: "API action: POST => 'create', PUT => 'update', GET => 'read', DELETE => 'delete', PATCH => 'update' or system if there is no match of HTTP method" + } + + expose :result, + documentation: { + type: 'String', + desc: 'Status of API response: succeed, failed, denied' + } + + expose :data, + documentation: { + type: 'String', + desc: 'Parameters which was sent to specific API endpoint' + } + + expose :user, as: :admin, using: API::V2::Entities::User + expose :target, as: :target, using: API::V2::Entities::User + + with_options(format_with: :iso_timestamp) do + expose :created_at + end + end + end +end diff --git a/app/api/v2/admin/entities/document.rb b/app/api/v2/admin/entities/document.rb new file mode 100644 index 0000000..bcdc38b --- /dev/null +++ b/app/api/v2/admin/entities/document.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +module API::V2 + module Admin + module Entities + class Document < API::V2::Entities::Document + expose :doc_number, + documentation: { + type: 'String', + desc: 'document number: AB123123 type' + } + end + end + end +end diff --git a/app/api/v2/admin/entities/phone.rb b/app/api/v2/admin/entities/phone.rb new file mode 100644 index 0000000..1091b33 --- /dev/null +++ b/app/api/v2/admin/entities/phone.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +module API::V2::Admin + module Entities + class Phone < API::V2::Entities::Phone + expose :number, + documentation: { + type: 'String', + desc: 'Phone number' + } + end + end +end diff --git a/app/api/v2/admin/entities/profile.rb b/app/api/v2/admin/entities/profile.rb new file mode 100644 index 0000000..06935cd --- /dev/null +++ b/app/api/v2/admin/entities/profile.rb @@ -0,0 +1,32 @@ +# frozen_string_literal: true + +module API::V2::Admin + module Entities + class Profile < API::V2::Entities::Profile + expose :first_name, + documentation: { + type: 'String', + desc: 'first name' + } + + expose :last_name, + documentation: { + type: 'String', + desc: 'Last name' + } + + expose :national_code, + documentation: { + type: 'String', + desc: 'National Code' + } + + expose :dob, + documentation: { + type: 'Date', + desc: 'Birth date' + } + + end + end +end diff --git a/app/api/v2/admin/entities/user_with_kyc.rb b/app/api/v2/admin/entities/user_with_kyc.rb new file mode 100644 index 0000000..5f971dc --- /dev/null +++ b/app/api/v2/admin/entities/user_with_kyc.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +module API::V2::Admin + module Entities + class UserWithKYC < API::V2::Entities::UserWithKYC + expose :profiles, using: Entities::Profile + # expose :phones, using: Entities::Phone + expose :documents, using: Entities::Document + end + end +end diff --git a/app/api/v2/admin/entities/user_with_profile.rb b/app/api/v2/admin/entities/user_with_profile.rb new file mode 100644 index 0000000..50db1df --- /dev/null +++ b/app/api/v2/admin/entities/user_with_profile.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +module API::V2::Admin + module Entities + class UserWithProfile < API::V2::Entities::UserWithProfile + expose :profiles, using: Entities::Profile + end + end +end diff --git a/app/api/v2/admin/levels.rb b/app/api/v2/admin/levels.rb new file mode 100644 index 0000000..8025b36 --- /dev/null +++ b/app/api/v2/admin/levels.rb @@ -0,0 +1,52 @@ +# frozen_string_literal: true + +module API + module V2 + module Admin + # Admin functionality over levels table + class Levels < Grape::API + resource :levels do + desc 'Returns array of permissions as paginated collection', + failure: [ + { code: 401, message: 'Invalid bearer token' } + ], + success: API::V2::Entities::Level + get do + admin_authorize! :read, Level + + present ::Level.all, with: API::V2::Entities::Level + end + + desc 'Change vip level', + failure: [ + { code: 400, message: 'Required params are empty' }, + { code: 401, message: 'Invalid bearer token' }, + { code: 422, message: 'Validation errors' } + ], + success: API::V2::Entities::User + params do + requires :uid, type: String + requires :level, + values: { value: -> (p){ %w[2 3].include?(p) }, message: 'user.level.invalid' }, + default: '3', + desc: 'change level from vip' + end + put do + admin_authorize! :update, Profile + + target_user = User.find_by(uid: params[:uid]) + return error!({ errors: ['admin.users.doesnt_exist'] }, 404) if target_user.nil? + + error!({ errors: ['admin.superadmin_change'] }, 422) if target_user.superadmin? && !current_user.superadmin? + + unless target_user.update(declared(params.except(:uid), include_missing: false)) + code_error!(target_user.errors.details, 422) + end + + present user, with: API::V2::Entities::User + end + end + end + end + end +end diff --git a/app/api/v2/admin/metrics.rb b/app/api/v2/admin/metrics.rb new file mode 100644 index 0000000..9b3a764 --- /dev/null +++ b/app/api/v2/admin/metrics.rb @@ -0,0 +1,50 @@ +# frozen_string_literal: true + +module API + module V2 + module Admin + # Metrics functionality + class Metrics < Grape::API + helpers do + def permitted_search_params(params) + params.slice(:created_from, :created_to, :topic, :action, :result).merge(with_user: false) + end + end + + resource :metrics do + desc 'Returns main statistic in the given time period', + failure: [ + { code: 401, message: 'Invalid bearer token' } + ] + params do + optional :created_from + optional :created_to + end + get do + admin_authorize! :read, User + + result = {} + + signup = API::V2::Queries::ActivityFilter.new(Activity.all).call( + permitted_search_params(params.merge(topic: 'account', action: 'signup', result: 'succeed')) + ) + sucessful_login = API::V2::Queries::ActivityFilter.new(Activity.all).call( + permitted_search_params(params.merge(topic: 'session', action: 'login', result: 'succeed')) + ) + failed_login = API::V2::Queries::ActivityFilter.new(Activity.all).call( + permitted_search_params(params.merge(topic: 'session', action: 'login', result: 'failed')) + ) + + result[:signups] = signup.group('date(created_at)').size + result[:sucessful_logins] = sucessful_login.group('date(created_at)').size + result[:failed_logins] = failed_login.group('date(created_at)').size + + result[:pending_applications] = Label.where({ key: 'document', value: 'pending', scope: 'private' }).count + + present result + end + end + end + end + end +end diff --git a/app/api/v2/admin/named_params.rb b/app/api/v2/admin/named_params.rb new file mode 100644 index 0000000..d56588e --- /dev/null +++ b/app/api/v2/admin/named_params.rb @@ -0,0 +1,35 @@ +# frozen_string_literal: true + +module API + module V2 + module Admin + module NamedParams + extend ::Grape::API::Helpers + + params :pagination_filters do + optional :page, + type: { value: Integer, message: 'non_integer_page' }, + values: { value: -> (p){ p.try(:positive?) }, message: 'non_positive_page'}, + default: 1, + desc: 'Page number (defaults to 1).' + optional :limit, + type: { value: Integer, message: 'non_integer_limit' }, + values: { value: 1..100, message: 'invalid_limit' }, + default: 100, + desc: 'Number of users per page (defaults to 100, maximum is 100).' + end + + params :activity_attributes do + optional :topic, + type: { value: String, message: 'admin.activity.non_string_topic' } + optional :action, + type: { value: String, message: 'admin.activity.non_string_action' } + optional :uid, + type: { value: String, message: 'admin.activity.non_string_uid' } + optional :email, + type: { value: String, message: 'admin.activity.non_string_email' } + end + end + end + end +end diff --git a/app/api/v2/admin/permissions.rb b/app/api/v2/admin/permissions.rb new file mode 100644 index 0000000..4c45bf1 --- /dev/null +++ b/app/api/v2/admin/permissions.rb @@ -0,0 +1,146 @@ +# frozen_string_literal: true + +module API + module V2 + module Admin + # Admin functionality over permissions table + class Permissions < Grape::API + resource :permissions do + helpers ::API::V2::NamedParams + helpers do + def validate_params!(params) + unless %w(get post delete put head patch all).include?(params[:verb].downcase) + error!({ errors: ['admin.permissions.invalid_verb'] }, 422) + end + + error!({ errors: ['admin.permissions.invalid_action'] }, 422) unless %w(accept drop audit).include?(params[:action].downcase) + end + end + + desc 'Returns array of permissions as paginated collection', + failure: [ + { code: 401, message: 'Invalid bearer token' } + ], + success: API::V2::Entities::Permission + params do + use :pagination_filters + end + get do + admin_authorize! :read, Permission + + present paginate(Permission.all), with: API::V2::Entities::Permission + end + + desc 'Create permission', + failure: [ + { code: 401, message: 'Invalid bearer token' } + ], + success: { code: 200, message: 'Permission was created' } + params do + requires :role, + type: String, + allow_blank: false + requires :verb, + type: String, + allow_blank: false + requires :path, + type: String, + allow_blank: false + requires :action, + type: String, + allow_blank: false + optional :topic, + type: String, + allow_blank: false + end + post do + admin_authorize! :create, Permission + + validate_params!(params) + + declared_params = declared(params, include_missing: false) + + error!({ errors: ['admin.permission.role_doesnt_exist'] }, 422) if Permission.where(role: params[:role]).empty? + + permission = Permission.new(declared_params) + + code_error!(permission.errors.details, 422) unless permission.save + + # clear cached permissions, so they will be freshly refetched on the next call to /auth + Rails.cache.delete('permissions') + status 200 + end + + desc 'Deletes permission', + failure: [ + { code: 401, message: 'Invalid bearer token' } + ], + success: { code: 200, message: 'Permission was deleted' } + params do + requires :id, + type: Integer, + allow_blank: false, + desc: 'permission id' + end + delete do + admin_authorize! :destroy, Permission + + target_permission = Permission.find_by(id: params[:id]) + + error!({ errors: ['admin.permission.doesnt_exist'] }, 404) if target_permission.nil? + + target_permission.destroy + # clear cached permissions, so they will be freshly refetched on the next call to /auth + Rails.cache.delete('permissions') + + status 200 + end + + desc 'Update Permission', + failure: [ + { code: 401, message: 'Invalid bearer token' } + ], + success: { code: 200, message: 'Permission was updated' } + params do + requires :id, + type: Integer, + allow_blank: false, + desc: 'Permission id' + optional :role, + type: String, + allow_blank: false, + desc: 'permission field - role' + optional :verb, + type: String, + allow_blank: false, + desc: 'permission field - request verb' + optional :path, + type: String, + allow_blank: false, + desc: 'permission field - request path' + optional :action, + type: String, + allow_blank: false + optional :topic, + type: String, + allow_blank: false + end + put do + admin_authorize! :update, Permission + + target_permission = Permission.find_by(id: params[:id]) + error!({ errors: ['admin.permission.doesnt_exist'] }, 404) if target_permission.nil? + + unless target_permission.update(declared(params, include_missing: false)) + code_error!(target_permission.errors.details, 422) + end + # clear cached permissions, so they will be freshly refetched on the next call to /auth + Rails.cache.delete('permissions') + + status 200 + end + end + end + end + end +end diff --git a/app/api/v2/admin/profiles.rb b/app/api/v2/admin/profiles.rb new file mode 100644 index 0000000..e04a83b --- /dev/null +++ b/app/api/v2/admin/profiles.rb @@ -0,0 +1,148 @@ +# frozen_string_literal: true + +module API + module V2 + module Admin + # Admin functionality over profiles table + class Profiles < Grape::API + resource :profiles do + helpers ::API::V2::NamedParams + + desc 'Return all profiles', + failure: [ + { code: 401, message: 'Invalid bearer token' }, + ], + success: API::V2::Admin::Entities::Profile + params do + use :pagination_filters + end + + get do + admin_authorize! :read, Profile + + present paginate(Profile.all), with: API::V2::Admin::Entities::Profile + end + + desc "Verify user's profile", + failure: [ + { code: 400, message: 'Required params are empty' }, + { code: 401, message: 'Invalid bearer token' }, + { code: 422, message: 'Validation errors' } + ], + success: API::V2::Admin::Entities::Profile + params do + requires :uid, type: String + requires :state, type: String + end + + put do + admin_authorize! :update, Profile + + target_profile = User.find_by(uid: params[:uid])&.submitted_profile + return error!({ errors: ['admin.profiles.doesnt_exist_or_not_editable'] }, 404) if target_profile.nil? + + if target_profile.user.superadmin? && !current_user.superadmin? + error!({ errors: ['admin.profiles.superadmin_change'] }, 422) + end + + if Barong::App.config.profile_double_verification && target_profile.author \ + && target_profile.author == current_user.uid && !BarongConfig.list['profile_verification_roles']&.include?(current_user.role) + error!({ errors: ['admin.profiles.second_admin_approval'] }, 422) + end + + unless target_profile.update(declared(params.except(:uid), include_missing: false)) + code_error!(target_profile.errors.details, 422) + end + + present target_profile, with: API::V2::Admin::Entities::Profile + end + + desc 'Create a profile for user', + failure: [ + { code: 400, message: 'Required params are empty' }, + { code: 401, message: 'Invalid bearer token' }, + { code: 422, message: 'Validation errors' } + ], + success: API::V2::Admin::Entities::Profile + params do + requires :uid, type: String + optional :first_name, type: String + optional :last_name, type: String + optional :dob, type: Date + optional :address, type: String + optional :postcode, type: String + optional :city, type: String + optional :country, type: String + optional :metadata, type: String, desc: 'Any additional key: value pairs in json string format' + end + + post do + target_user = User.find_by(uid: params[:uid]) + + declared_params = declared(params.except(:uid), include_missing: false) + declared_params.merge!(state: 'submitted', author: current_user.uid) + + profile = target_user.profiles.create(declared_params) + code_error!(profile.errors.details, 422) if profile.errors.any? + + present profile, with: API::V2::Admin::Entities::Profile + status 201 + end + + + desc 'verifying labels by admin', + failure: [ + { code: 400, message: 'Required params are empty' }, + { code: 401, message: 'Invalid bearer token' }, + { code: 404, message: 'doesnt exist' }, + { code: 422, message: 'Validation errors' } + ], + success: API::V2::Admin::Entities::Profile + params do + requires :user_uid, type: String + requires :label_key, type: String + requires :label_value, type: String + end + + put '/label' do + admin_authorize! :update, Label + + target_user = User.find_by(uid: params[:user_uid]) + error!({ errors: ['admin.label.user_doesnt_exist'] }, 404) unless target_user + + label = target_user.labels.find_by(key: params[:label_key]) + error!({ errors: ['admin.label.label_doesnt_exist'] }, 404) unless label + + label.update(value: params['label_value']) + code_error!(label.errors.details, 422) if label.errors.any? + + # present label, with: API::V2::Admin::Entities::Profile + status 201 + end + + # bank info + resource :treasury do + desc 'Return list of treasuries', + failure: [ + { code: 401, message: 'Invalid bearer token' }, + { code: 404, message: 'User has no treasuries' } + ], + success: API::V2::Entities::Treasury + params do + requires :user_uid, type: String + optional :kind, type: String + end + get '/list' do + target_user = User.find_by(uid: params[:user_uid]) + error!({ errors: ['admin.treasury.user_doesnt_exist'] }, 404) unless target_user + + treasury_list = target_user.treasuries + treasury_list = treasury_list.where(kind: params[:kind]) if params[:kind].present? + present treasury_list, with: API::V2::Entities::Treasury + end + end + end + end + end + end +end diff --git a/app/api/v2/admin/restrictions.rb b/app/api/v2/admin/restrictions.rb new file mode 100644 index 0000000..a629b48 --- /dev/null +++ b/app/api/v2/admin/restrictions.rb @@ -0,0 +1,177 @@ +# frozen_string_literal: true + +module API + module V2 + module Admin + # Admin functionality over restrictions table + class Restrictions < Grape::API + resource :restrictions do + helpers ::API::V2::NamedParams + + desc 'Returns array of restrictions as a paginated collection', + failure: [ + { code: 401, message: 'Invalid bearer token' } + ], + success: API::V2::Entities::Restriction + params do + optional :scope, + allow_blank: false, + values: { value: -> { Restriction::SCOPES }, message: 'admin.restriction.invalid_scope'} + optional :category, + allow_blank: false, + values: { value: -> { Restriction::CATEGORIES }, message: 'admin.restriction.invalid_category'} + optional :range, + type: String, + values: { value: ->(p) { %w[created updated].include?(p) }, message: 'admin.restriction.invalid_range' }, + default: 'created' + use :pagination_filters + end + get do + admin_authorize! :read, Restriction + + restrictions = Restriction.all + restrictions = params[:category] ? restrictions.where(category: params[:category]) : restrictions + restrictions = params[:scope] ? restrictions.where(scope: params[:scope]) : restrictions + restrictions = params[:to] ? restrictions.where("#{params[:range]}_at <= ?", Time.at(params[:to].to_i)) : restrictions + restrictions = params[:from] ? restrictions.where("#{params[:range]}_at >= ?", Time.at(params[:from].to_i)) : restrictions + + present paginate(restrictions), with: API::V2::Entities::Restriction + end + + desc 'Create whitelink', + failure: [ + { code: 401, message: 'Invalid bearer token' } + ], + success: { code: 200, message: 'Created whitelink' } + params do + optional :expire_time, + allow_blank: false, + default: 1, + values: { value: 1..30, message: 'invalid_expire' }, + type: Integer, + desc: 'link will be active for (Time.now + expire_time in following range)' + optional :range, + allow_blank: false, + default: 'day', + values: { value: ->(p) { %w[day hour].include?(p) }, message: 'invalid_range' }, + type: String, + desc: 'In combination with expire_time gives full controll over token expiration' + end + post '/whitelink' do + admin_authorize! :create, Restriction + + whitelink_token = Digest::SHA256.hexdigest(SecureRandom.hex(10)) + + expires_in = params[:range] == 'day' ? params[:expire_time].days : params[:expire_time].hours + Rails.cache.write(whitelink_token, 'active', expires_in: expires_in) + + response = { whitelink_token: whitelink_token } + present response + end + + desc 'Create restriction', + failure: [ + { code: 401, message: 'Invalid bearer token' } + ], + success: { code: 200, message: 'Restriction was created' } + params do + requires :scope, + allow_blank: false, + values: { value: -> { Restriction::SCOPES }, message: 'admin.restriction.invalid_scope'} + requires :value, + allow_blank: false + requires :category, + type: String, + values: { value: -> { Restriction::CATEGORIES }, message: 'admin.restriction.invalid_category'}, + allow_blank: false + optional :state, + default: 'enabled', + allow_blank: false, + values: { value: -> { Restriction::STATES }, message: 'admin.restriction.invalid_state' } + optional :code, + type: Integer, + allow_blank: false + end + post do + admin_authorize! :create, Restriction + + restriction = Restriction.new(declared(params, include_missing: false)) + + code_error!(restriction.errors.details, 422) unless restriction.save + + # clear cached restrictions, so they will be freshly refetched on the next call to /auth + Rails.cache.delete('restrictions') + status 200 + end + + desc 'Update restriction', + failure: [ + { code: 401, message: 'Invalid bearer token' } + ], + success: { code: 200, message: 'Restriction was updated' } + params do + requires :id, + type: Integer, + allow_blank: false, + desc: 'Restriction id' + optional :scope, + allow_blank: false, + values: { value: -> { Restriction::SCOPES }, message: 'admin.restriction.invalid_scope' } + optional :category, + type: String, + values: { value: -> { Restriction::CATEGORIES }, message: 'admin.restriction.invalid_category'}, + allow_blank: false + optional :value, + allow_blank: false + optional :state, + allow_blank: false, + values: { value: -> { Restriction::STATES }, message: 'admin.restriction.invalid_state' } + optional :code, + type: Integer, + allow_blank: false + end + put do + admin_authorize! :update, Restriction + + target_restriction = Restriction.find_by(id: params[:id]) + + error!({ errors: ['admin.restriction.doesnt_exist'] }, 404) if target_restriction.nil? + + unless target_restriction.update(declared(params, include_missing: false)) + code_error!(target_restriction.errors.details, 422) + end + + # clear cached restrictions, so they will be freshly refetched on the next call to /auth + Rails.cache.delete('restrictions') + status 200 + end + + desc 'Delete restriction', + failure: [ + { code: 401, message: 'Invalid bearer token' } + ], + success: { code: 200, message: 'Restriction was deleted' } + params do + requires :id, + type: Integer, + allow_blank: false, + desc: 'Restriction id' + end + delete do + admin_authorize! :destroy, Restriction + + target_restriction = Restriction.find_by(id: params[:id]) + + error!({ errors: ['admin.restriction.doesnt_exist'] }, 404) if target_restriction.nil? + + target_restriction.destroy + # clear cached restrictions, so they will be freshly refetched on the next call to /auth + Rails.cache.delete('restrictions') + + status 200 + end + end + end + end + end +end diff --git a/app/api/v2/admin/users.rb b/app/api/v2/admin/users.rb new file mode 100644 index 0000000..8c1f12b --- /dev/null +++ b/app/api/v2/admin/users.rb @@ -0,0 +1,699 @@ +# frozen_string_literal: true + +module API + module V2 + module Admin + # Admin functionality over users table + class Users < Grape::API + resource :users do + helpers ::API::V2::NamedParams + helpers do + def permitted_search_params(params) + params.slice(:uid, :email, :role, :first_name, :last_name, :country, :level, :state, :from, :to, :range) + end + + def search(field, value) + error!({ errors: ['admin.user.non_user_field'] }, 422) unless User.attribute_names.include?(field) + + User.where("#{field}": value).order('email ASC') + end + end + + desc 'Returns array of users as paginated collection', + failure: [ + { code: 401, message: 'Invalid bearer token' } + ], + success: API::V2::Entities::User + params do + optional :extended, + type: { value: Boolean, message: 'admin.user.non_boolean_extended' }, + default: false, + desc: 'When true endpoint returns full information about users' + optional :uid, + type: String + optional :email, + type: String + optional :role, + type: String + optional :country, + type: String + optional :level, + type: Integer + optional :state, + type: String + optional :range, + type: String, + values: { value: -> (p){ %w[created updated].include?(p) }, message: 'admin.user.invalid_range' }, + default: 'created' + optional :ordering, + values: { value: -> (p){ %w[asc desc].include?(p) }, message: 'user.ordering.invalid_ordering' }, + default: 'asc', + desc: 'If set, returned values will be sorted in specific order, defaults to \'asc\'.' + optional :order_by, + values: { value: -> (p){ User.new.attributes.keys.include?(p) }, message: 'user.ordering.invalid_attribute' }, + default: 'id', + desc: 'Name of the field, which result will be ordered by.' + use :timeperiod_filters + use :pagination_filters + end + get do + admin_authorize! :read, User + + entity = params[:extended] ? API::V2::Admin::Entities::UserWithProfile : API::V2::Entities::User + users = API::V2::Queries::UserFilter.new(User.all.order(params[:order_by] => params[:ordering])).call(params).uniq + present paginate(users), with: entity + end + + desc 'Update user attributes', + failure: [ + { code: 401, message: 'Invalid bearer token' } + ], + success: { code: 200, message: 'User attributes were updated' } + params do + requires :uid, + type: String, + allow_blank: false, + desc: 'user uniq id' + optional :state, + type: String, + allow_blank: false, + desc: 'user state' + optional :otp, + type: Boolean, + allow_blank: false, + desc: 'user 2fa status' + exactly_one_of :state, :otp, message: 'admin.user.one_of_state_otp' + end + post '/update' do + admin_authorize! :update, User + + target_user = User.find_by_uid(params[:uid]) + + # Ruby Hash returns array on keys and values + update_param_key = params.except(:uid).keys.first + update_param_value = params.except(:uid).values.first + + error!({ errors: ['admin.user.doesnt_exist'] }, 404) if target_user.nil? + + if target_user.superadmin? && !current_user.superadmin? + error!({ errors: ['admin.user.superadmin_change'] }, 422) + end + + error!({ errors: ['admin.user.update_himself'] }, 422) if target_user.uid == current_user.uid + + if update_param_key == 'otp' && update_param_value == true + error!({ errors: ['admin.user.enable_2fa'] }, 422) + end + + if update_param_value == target_user[update_param_key] + error!({ errors: ["admin.user.#{update_param_key}_no_change"] }, 422) + end + + unless target_user.update(update_param_key => update_param_value) + code_error!(target_user.errors.details, 422) + end + + target_user.labels.find_by(key: :otp, scope: :private).delete if target_user.labels.find_by(key: :otp, scope: :private) && update_param_key == 'otp' + status 200 + end + + desc 'Update user role', + failure: [ + { code: 401, message: 'Invalid bearer token' } + ], + success: { code: 200, message: 'User role was created' } + params do + requires :uid, + type: String, + allow_blank: false, + desc: 'user uniq id' + requires :role, + type: String, + allow_blank: false, + desc: 'user role' + end + post '/role' do + admin_authorize! :update, User + + target_user = User.find_by_uid(params[:uid]) + + error!({ errors: ['admin.user.doesnt_exist'] }, 404) if target_user.nil? + + if target_user.superadmin? && !current_user.superadmin? + error!({ errors: ['admin.user.superadmin_change'] }, 422) + end + + error!({ errors: ['admin.user.update_himself'] }, 422) if target_user.uid == current_user.uid + + if params[:role] == target_user.role + error!({ errors: ["admin.user.role_no_change"] }, 422) + end + + unless target_user.update(role: params[:role]) + code_error!(target_user.errors.details, 422) + end + + status 200 + end + + desc 'Update user attributes', + failure: [ + { code: 401, message: 'Invalid bearer token' } + ], + success: { code: 200, message: 'User attributes were created' } + params do + requires :uid, + type: String, + allow_blank: false, + desc: 'user uniq id' + optional :email, + type: String, + allow_blank: false, + desc: 'User Email' + optional :state, + type: String, + allow_blank: false, + desc: 'user state' + optional :otp, + type: Boolean, + allow_blank: false, + desc: 'user 2fa status' + exactly_one_of :state, :otp, :email, message: 'admin.user.one_of_state_otp_email' + end + put do + admin_authorize! :update, User + + target_user = User.find_by_uid(params[:uid]) + + # Ruby Hash returns array on keys and values + update_param_key = params.except(:uid).keys.first + update_param_value = params.except(:uid).values.first + + error!({ errors: ['admin.user.doesnt_exist'] }, 404) if target_user.nil? + + if target_user.superadmin? && !current_user.superadmin? + error!({ errors: ['admin.user.superadmin_change'] }, 422) + end + + error!({ errors: ['admin.user.update_himself'] }, 422) if target_user.uid == current_user.uid + + if update_param_key == 'email' && !current_user.superadmin? + error!({ errors: ['superadmin.user.update_email'] }, 422) + end + + if update_param_key == 'otp' && update_param_value == true + error!({ errors: ['admin.user.enable_2fa'] }, 422) + end + + if update_param_value == target_user[update_param_key] + error!({ errors: ["admin.user.#{update_param_key}_no_change"] }, 422) + end + + unless target_user.update(update_param_key => update_param_value) + code_error!(target_user.errors.details, 422) + end + + target_user.labels.find_by(key: :otp, scope: :private).delete if target_user.labels.find_by(key: :otp, scope: :private) && update_param_key == 'otp' + status 200 + end + + desc 'Returns array of users with pending or replaced documents as paginated collection', + failure: [ + { code: 401, message: 'Invalid bearer token' } + ], + success: API::V2::Entities::User + params do + optional :extended, + type: { value: Boolean, message: 'admin.user.non_boolean_extended' }, + default: false, + desc: 'When true endpoint returns full information about users' + optional :uid, + type: String + optional :email, + type: String + optional :role, + type: String + optional :first_name, + type: String + optional :last_name, + type: String + optional :country, + type: String + optional :level, + type: Integer + optional :state, + type: String + optional :range, + type: String, + values: { value: ->(p) { %w[created updated].include?(p) }, message: 'admin.user.invalid_range' }, + default: 'created' + use :timeperiod_filters + use :pagination_filters + end + get '/documents/pending' do + admin_authorize! :read, User + + users_with_pending_or_replaced_docs = User.with_pending_or_replaced_docs.order('labels.updated_at ASC') + + users = API::V2::Queries::UserFilter.new(users_with_pending_or_replaced_docs).call(params) + + entity = params[:extended] ? API::V2::Admin::Entities::UserWithKYC : API::V2::Entities::User + present paginate(users), with: entity + end + + desc 'Returns user documents', + failure: [ + { code: 400, message: 'Required params are empty' }, + { code: 401, message: 'Invalid bearer token' }, + { code: 404, message: 'doesnt exist' }, + { code: 422, message: 'Validation errors' } + ], + success: API::V2::Entities::Document + params do + requires :user_uid, type: String + optional :doc_type, type: String + optional :doc_category, type: String + optional :doc_state, type: String + end + get '/documents' do + admin_authorize! :read, User + + target_user = User.find_by(uid: params[:user_uid]) + error!({ errors: ['admin.document.user_doesnt_exist'] }, 404) unless target_user + + documents = target_user.documents + documents = documents.where(doc_type: params[:doc_type]) if params[:doc_type].present? + documents = documents.where(doc_category: params[:doc_category]) if params[:doc_category].present? + documents = documents.where(state: params[:doc_state]) if params[:doc_state].present? + + error!({ errors: ['admin.document.document_doesnt_exist'] }, 404) unless documents + + present documents, with: API::V2::Entities::Document + status 200 + end + + desc 'change documents by admin', + failure: [ + { code: 400, message: 'Required params are empty' }, + { code: 401, message: 'Invalid bearer token' }, + { code: 404, message: 'doesnt exist' }, + { code: 422, message: 'Validation errors' } + ], + success: API::V2::Admin::Entities::Profile + params do + requires :user_uid, type: String + requires :doc_type, type: String + requires :doc_state, type: String + end + put '/documents' do + admin_authorize! :update, Document + + target_user = User.find_by(uid: params[:user_uid]) + error!({ errors: ['admin.document.user_doesnt_exist'] }, 404) unless target_user + + document = target_user.documents.find_by(doc_type: params[:doc_type]) + error!({ errors: ['admin.document.document_doesnt_exist'] }, 404) unless document + + document.update(state: params['doc_state']) + code_error!(document.errors.details, 422) if document.errors.any? + + present document, with: API::V2::Admin::Entities::Document + status 200 + end + + namespace :labels do + desc 'Returns existing labels keys and values', + failure: [ + { code: 401, message: 'Invalid bearer token' } + ] + params do + end + get '/list' do + admin_authorize! :read, User + + labels = Label.where(scope: 'private').group(:key, :value).size + + present labels + end + + desc 'Returns array of users as paginated collection', + failure: [ + { code: 401, message: 'Invalid bearer token' } + ], + success: API::V2::Entities::User + params do + requires :key, type: String, desc: 'Label key' + requires :value, type: String, desc: 'Label value' + use :pagination_filters + end + get do + admin_authorize! :read, User + + users = User.joins(:labels).where(labels: { key: params[:key], value: params[:value] }) + + present paginate(users), with: API::V2::Entities::User + end + + desc 'Add label for user', + failure: [ + { code: 401, message: 'Invalid bearer token' } + ], + success: { code: 200, message: 'Label was created' } + params do + requires :uid, + type: String, + allow_blank: false, + desc: 'user uniq id' + requires :key, + type: String, + allow_blank: false, + desc: 'label key. [a-z0-9_-]+ should be used. Min - 3, max - 255 characters.' + requires :value, + type: String, + allow_blank: false, + desc: 'label value. [A-Za-z0-9_-] should be used. Min - 3, max - 255 characters.' + optional :description, + type: String, + allow_blank: false, + desc: 'label description. [A-Za-z0-9_-] should be used. max - 255 characters.' + optional :scope, type: String, desc: "Label scope: 'public' or 'private'. Default is public", allow_blank: false + end + post do + admin_authorize! :create, Label + + declared_params = declared(params, include_missing: false) + + target_user = User.find_by_uid(params[:uid]) + error!({ errors: ['admin.user.doesnt_exist'] }, 404) if target_user.nil? + + if target_user.superadmin? && !current_user.superadmin? + error!({ errors: ['admin.user.superadmin_change'] }, 422) + end + + declared_params[:user_id] = target_user.id + + label = Label.new(declared_params.except(:uid)) + + code_error!(label.errors.details, 422) unless label.save + + status 200 + end + + desc 'Update user label value', + failure: [ + { code: 400, message: 'Required params are empty' }, + { code: 401, message: 'Invalid bearer token' }, + { code: 404, message: 'Record is not found' }, + { code: 422, message: 'Validation errors' } + ], + success: { code: 200, message: 'Label was updated' } + params do + requires :uid, + type: String, + allow_blank: false, + desc: 'user uniq id' + requires :key, + type: String, + allow_blank: false, + desc: 'Label key.' + requires :scope, + type: String, + allow_blank: false, + desc: 'label key. [a-z0-9_-]+ should be used. Min - 3, max - 255 characters.' + requires :value, + type: String, + allow_blank: false, + desc: 'Label value.' + optional :description, + type: String, + allow_blank: false, + desc: 'label description. [A-Za-z0-9_-] should be used. max - 255 characters.' + optional :replace, + type: { value: Boolean, message: 'admin.user.non_boolean_replace' }, + default: true, + desc: 'When true label will be created if not exist' + end + post '/update' do + admin_authorize! :update, Label + + declared_params = declared(params, include_missing: false) + + target_user = User.find_by_uid(declared_params[:uid]) + error!({ errors: ['admin.user.doesnt_exist'] }, 404) if target_user.nil? + + if target_user.superadmin? && !current_user.superadmin? + error!({ errors: ['admin.user.superadmin_change'] }, 422) + end + + label = Label.find_by_key_and_user_id_and_scope(declared_params[:key], target_user.id, declared_params[:scope]) + + if label.nil? + if declared_params[:replace] + label = Label.create( + user_id: target_user.id, + key: declared_params[:key], + value: declared_params[:value], + scope: declared_params[:scope], + description: declared_params[:description] + ) + else + error!({ errors: ['admin.label.doesnt_exist'] }, 404) + end + else + label.update({ value: params[:value], description: params[:description] }) + end + code_error!(label.errors.details, 422) if label.errors.any? + + status 200 + end + + desc 'Update user label scope', + failure: [ + { code: 400, message: 'Required params are empty' }, + { code: 401, message: 'Invalid bearer token' }, + { code: 404, message: 'Record is not found' }, + { code: 422, message: 'Validation errors' } + ], + success: { code: 200, message: 'Label was updated' } + params do + requires :uid, + type: String, + allow_blank: false, + desc: 'user uniq id' + requires :key, + type: String, + allow_blank: false, + desc: 'Label key.' + requires :scope, + type: String, + allow_blank: false, + desc: 'label key. [a-z0-9_-]+ should be used. Min - 3, max - 255 characters.' + optional :description, + type: String, + allow_blank: false, + desc: 'label description. [A-Za-z0-9_-] should be used. max - 255 characters.' + requires :value, + type: String, + allow_blank: false, + desc: 'Label value.' + end + put do + admin_authorize! :update, Label + + declared_params = declared(params, include_missing: false) + + target_user = User.find_by_uid(declared_params[:uid]) + error!({ errors: ['admin.user.doesnt_exist'] }, 404) if target_user.nil? + + if target_user.superadmin? && !current_user.superadmin? + error!({ errors: ['admin.user.superadmin_change'] }, 422) + end + + label = Label.find_by_key_and_user_id_and_scope(declared_params[:key], target_user.id, declared_params[:scope]) + + error!({ errors: ['admin.label.doesnt_exist'] }, 404) if label.nil? + + unless label.update({ value: params[:value], description: params[:description] }.compact) + code_error!(label.errors.details, 422) + end + status 200 + end + + desc 'Deletes label for user', + failure: [ + { code: 401, message: 'Invalid bearer token' } + ], + success: { code: 200, message: 'Label was deleted' } + params do + requires :uid, + type: String, + allow_blank: false, + desc: 'user uniq id' + requires :key, + type: String, + allow_blank: false, + desc: 'label key. [a-z0-9_-]+ should be used. Min - 3, max - 255 characters.' + requires :scope, + type: String, + allow_blank: false, + desc: 'label key. [a-z0-9_-]+ should be used. Min - 3, max - 255 characters.' + end + delete do + admin_authorize! :destroy, Label + + declared_params = declared(params, include_missing: false) + + target_user = User.find_by_uid(params[:uid]) + error!({ errors: ['admin.user.doesnt_exist'] }, 404) if target_user.nil? + + if target_user.superadmin? && !current_user.superadmin? + error!({ errors: ['admin.user.superadmin_change'] }, 422) + end + + label = Label.find_by_key_and_user_id_and_scope(declared_params[:key], target_user.id, declared_params[:scope]) + + error!({ errors: ['admin.label.doesnt_exist'] }, 404) if label.nil? + + label.destroy + status 200 + end + end + + desc 'Returns user info', + failure: [ + { code: 401, message: 'Invalid bearer token' } + ], + success: API::V2::Admin::Entities::UserWithKYC + params do + requires :uid, + type: String, + allow_blank: false, + desc: 'user uniq id' + end + get '/:uid' do + admin_authorize! :read, User + + target_user = User.find_by_uid(params[:uid]) + error!({ errors: ['admin.user.doesnt_exist'] }, 404) if target_user.nil? + + present target_user, with: API::V2::Admin::Entities::UserWithKYC + end + + desc "Deletes user's data storage record", + failure: [ + { code: 401, message: 'Invalid bearer token' } + ], + success: API::V2::Admin::Entities::UserWithKYC + params do + requires :uid, + type: String, + allow_blank: false, + desc: 'user uniq id' + requires :title, + type: String, + allow_blank: false, + desc: 'data storage uniq title' + end + delete '/data_storage' do + admin_authorize! :destroy, User + + target_user = User.find_by_uid(params[:uid]) + error!({ errors: ['admin.user.doesnt_exist'] }, 404) if target_user.nil? + + storage = target_user.data_storages.find_by_title(params[:title]) + error!({ errors: ['admin.storage.doesnt_exist'] }, 404) if storage.nil? + + target_user.labels.find_by(key: storage.title, scope: 'private') + storage.destroy + present target_user, with: API::V2::Admin::Entities::UserWithKYC + end + + namespace :comments do + desc "Adds new user's comment", + failure: [ + { code: 401, message: 'Invalid bearer token' } + ], + success: API::V2::Admin::Entities::UserWithKYC + params do + requires :uid, + type: String, + allow_blank: false, + desc: 'user uniq id' + requires :title, + type: String, + values: { value: -> (v){ v.length <= 64 }, message: 'admin.comments.title_too_long'}, + allow_blank: false, + desc: 'comment uniq title' + requires :data, + type: String, + values: { value: -> (v){ v.length <= 65535 }, message: 'admin.comments.data_too_long'}, + allow_blank: false, + desc: 'comment data' + end + post do + target_user = User.find_by_uid(params[:uid]) + error!({ errors: ['admin.user.doesnt_exist'] }, 404) if target_user.nil? + + comment = Comment.new(user_id: target_user.id, + data: params[:data], + title: params[:title], + author_uid: current_user[:uid]) + + code_error!(data_storage.errors.details, 422) unless comment.save + + present target_user, with: API::V2::Admin::Entities::UserWithKYC + end + + desc "Edit user's comment", + failure: [ + { code: 401, message: 'Invalid bearer token' } + ], + success: API::V2::Admin::Entities::UserWithKYC + params do + requires :id, + type: Integer, + desc: 'comment uniq id' + optional :title, + type: String, + values: { value: -> (v){ v.length <= 64 }, message: 'admin.comments.title_too_long'}, + allow_blank: false, + desc: 'comment title' + optional :data, + type: String, + values: { value: -> (v){ v.length <= 65535 }, message: 'admin.comments.data_too_long'}, + allow_blank: false, + desc: 'comment data' + end + put do + comment = Comment.find(params[:id]) + error!({ errors: ['admin.comment.doesnt_exist'] }, 404) if comment.nil? + + code_error!(comment.errors.details, 422) unless comment.update(params.slice(:data, :title)) + + present comment.user, with: API::V2::Admin::Entities::UserWithKYC + end + + desc "Delete user's comment", + failure: [ + { code: 401, message: 'Invalid bearer token' } + ], + success: API::V2::Admin::Entities::UserWithKYC + params do + requires :id, + type: Integer, + desc: 'comment uniq id' + end + delete do + comment = Comment.find(params[:id]) + error!({ errors: ['admin.comment.doesnt_exist'] }, 404) if comment.nil? + + code_error!(comment.errors.details, 422) unless comment.destroy + + present comment.user, with: API::V2::Admin::Entities::UserWithKYC + end + end + end + end + end + end +end diff --git a/app/api/v2/base.rb b/app/api/v2/base.rb new file mode 100644 index 0000000..1703c65 --- /dev/null +++ b/app/api/v2/base.rb @@ -0,0 +1,73 @@ +# frozen_string_literal: true + +require_dependency 'v2/validations' +require_dependency 'v2/exception_handlers' + +module API::V2 + # Base api configuration for V2 module + class Base < Grape::API + API_VERSION = 'v2' + + cascade false + + logger Rails.logger.dup + if Rails.env.production? + logger.formatter = GrapeLogging::Formatters::Json.new + else + logger.formatter = GrapeLogging::Formatters::Rails.new + end + use GrapeLogging::Middleware::RequestLogger, + logger: logger, + log_level: (Rails.env.production?)? :warn : :debug, + include: [GrapeLogging::Loggers::Response.new, + GrapeLogging::Loggers::FilterParameters.new, + GrapeLogging::Loggers::ClientEnv.new, + GrapeLogging::Loggers::RequestHeaders.new] + + helpers API::V2::Utils + + format :json + content_type :json, 'application/json' + default_format :json + + include ExceptionHandlers + + mount Identity::Base => '/identity' + mount Public::Base => '/public' + mount Resource::Base => '/resource' + + add_swagger_documentation base_path: File.join(API::Base::PREFIX, API_VERSION, 'barong'), + add_base_path: true, + info: { + title: 'Barong', + description: 'RESTful API for barong OAuth server' + }, + models: [ + API::V2::Entities::Level, + API::V2::Entities::Label, + API::V2::Entities::APIKey, + API::V2::Entities::Profile, + API::V2::Entities::User, + API::V2::Entities::UserWithProfile, + API::V2::Entities::UserWithKYC, + API::V2::Entities::UserWithFullInfo, + API::V2::Entities::Phone, + API::V2::Entities::Activity, + API::V2::Entities::ServiceAccounts, + API::V2::Entities::Document, + API::V2::Entities::DataStorage, + API::V2::Entities::Comment, + API::V2::Entities::AdminLabelView + ], + api_version: API_VERSION, + doc_version: Barong::Application::GIT_TAG, + mount_path: '/swagger' + + mount Management::Base => '/management' + mount Admin::Base => '/admin' + + route :any, '*path' do + error! 'Route is not found', 404 + end + end +end diff --git a/app/api/v2/entities/activity.rb b/app/api/v2/entities/activity.rb new file mode 100644 index 0000000..326cf38 --- /dev/null +++ b/app/api/v2/entities/activity.rb @@ -0,0 +1,53 @@ +# frozen_string_literal: true + +module API::V2 + module Entities + class Activity < API::V2::Entities::Base + expose :id, + documentation: { + type: 'Integer', + desc: 'Activity ID' + } + + expose :user_ip, + documentation: { + type: 'String', + desc: 'User IP' + } + + expose :user_agent, + documentation: { + type: 'String', + desc: 'User Browser Agent' + } + + expose :topic, + documentation: { + type: 'String', + desc: 'Defined topic (session, adjustments) or general by default' + } + + expose :action, + documentation: { + type: 'String', + desc: "API action: POST => 'create', PUT => 'update', GET => 'read', DELETE => 'delete', PATCH => 'update' or system if there is no match of HTTP method" + } + + expose :result, + documentation: { + type: 'String', + desc: 'Status of API response: succeed, failed, denied' + } + + expose :data, + documentation: { + type: 'String', + desc: 'Parameters which was sent to specific API endpoint' + } + + with_options(format_with: :iso_timestamp) do + expose :created_at + end + end + end +end diff --git a/app/api/v2/entities/admin_label_view.rb b/app/api/v2/entities/admin_label_view.rb new file mode 100644 index 0000000..623e5b0 --- /dev/null +++ b/app/api/v2/entities/admin_label_view.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +module API::V2 + module Entities + class AdminLabelView < API::V2::Entities::Base + expose :key, + documentation: { + type: 'String', + desc: 'Label key. [a-z0-9_-]+ should be used. Min - 3, max - 255 characters.' + } + + expose :value, + documentation: { + type: 'String', + desc: 'Label value. [A-Za-z0-9_-] should be used. Min - 3, max - 255 characters.' + } + + expose :scope, + documentation: { + type: 'String', + desc: "Label scope: 'public' or 'private'" + } + + expose :description, + documentation: { + type: 'String', + desc: "Label desc: json string with any additional information" + } + + with_options(format_with: :iso_timestamp) do + expose :created_at + expose :updated_at + end + end + end +end diff --git a/app/api/v2/entities/api_key.rb b/app/api/v2/entities/api_key.rb new file mode 100644 index 0000000..3486800 --- /dev/null +++ b/app/api/v2/entities/api_key.rb @@ -0,0 +1,43 @@ +# frozen_string_literal: true + +module API::V2 + module Entities + class APIKey < API::V2::Entities::Base + expose :kid, + documentation: { + type: 'String', + desc: 'JWT public key' + } + + expose :algorithm, + documentation: { + type: 'String', + desc: 'Cryptographic hash function type' + } + + expose :scope, + documentation: { + type: 'String', + desc: 'Serialized array of scopes' + } + + expose :state, + documentation: { + type: 'String', + desc: 'active/non-active state of key' + } + + expose :secret, + documentation: { + type: 'String', + desc: 'Api key secret' + }, + if: ->(api_key) { api_key.hmac? } + + with_options(format_with: :iso_timestamp) do + expose :created_at + expose :updated_at + end + end + end +end diff --git a/app/api/v2/entities/base.rb b/app/api/v2/entities/base.rb new file mode 100644 index 0000000..28a7da2 --- /dev/null +++ b/app/api/v2/entities/base.rb @@ -0,0 +1,12 @@ +# encoding: UTF-8 +# frozen_string_literal: true + +module API + module V2 + module Entities + class Base < Grape::Entity + format_with(:iso_timestamp) { |t| t.iso8601 if t } + end + end + end +end diff --git a/app/api/v2/entities/comment.rb b/app/api/v2/entities/comment.rb new file mode 100644 index 0000000..234f7a6 --- /dev/null +++ b/app/api/v2/entities/comment.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true + +module API + module V2 + module Entities + # comment retrieval entity + class Comment < API::V2::Entities::Base + expose :id, + documentation: { + type: 'Integer', + desc: 'Comment id' + } + + expose :author_uid, + documentation: { + type: 'String', + desc: 'Comment author UID' + } + + expose :title, + documentation: { + type: 'String', + desc: 'Comment title' + } + + expose :data, + documentation: { + type: 'String', + desc: 'Comment plain text' + } + + with_options(format_with: :iso_timestamp) do + expose :created_at + expose :updated_at + end + end + end + end +end diff --git a/app/api/v2/entities/data_storage.rb b/app/api/v2/entities/data_storage.rb new file mode 100644 index 0000000..ae77361 --- /dev/null +++ b/app/api/v2/entities/data_storage.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +module API + module V2 + module Entities + # data storage retrieval entity + class DataStorage < API::V2::Entities::Base + expose :title, + documentation: { + type: 'String', + desc: 'Any additional data title' + } + + expose :data, + documentation: { + type: 'String', + desc: 'Any additional data json key:value pairs' + } + + with_options(format_with: :iso_timestamp) do + expose :created_at + expose :updated_at + end + end + end + end +end diff --git a/app/api/v2/entities/document.rb b/app/api/v2/entities/document.rb new file mode 100644 index 0000000..4eadbf6 --- /dev/null +++ b/app/api/v2/entities/document.rb @@ -0,0 +1,55 @@ +# frozen_string_literal: true + +module API + module V2 + module Entities + # Return user document with related info + class Document < API::V2::Entities::Base + expose :upload, + documentation: { + type: 'String', + desc: 'File Upload' + } + + expose :url, + documentation: { + type: 'String', + desc: 'File url' + } do |document| + document&.upload&.url + end + + expose :doc_type, + documentation: { + type: 'String', + desc: 'Document type: passport, driver license, utility bill, identity card, institutional, address, residental' + } + + expose :doc_number, + documentation: { + type: 'String', + desc: 'Submasked document number: AB123123 type' + } do |document| + Barong::App.config.api_data_masking_enabled ? document.sub_masked_doc_number : document.doc_number + end + + expose :doc_expire, + documentation: { + type: 'String', + desc: 'Expire date of uploaded documents' + } + + expose :metadata, + documentation: { + type: 'String', + desc: 'Any additional stored data' + } + + with_options(format_with: :iso_timestamp) do + expose :created_at + expose :updated_at + end + end + end + end +end diff --git a/app/api/v2/entities/label.rb b/app/api/v2/entities/label.rb new file mode 100644 index 0000000..a6419a6 --- /dev/null +++ b/app/api/v2/entities/label.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +module API::V2 + module Entities + class Label < API::V2::Entities::Base + expose :key, + documentation: { + type: 'String', + desc: 'Label key. [a-z0-9_-]+ should be used. Min - 3, max - 255 characters.' + } + + expose :value, + documentation: { + type: 'String', + desc: 'Label value. [A-Za-z0-9_-] should be used. Min - 3, max - 255 characters.' + } + + expose :scope, + documentation: { + type: 'String', + desc: "Label scope: 'public' or 'private'" + } + + with_options(format_with: :iso_timestamp) do + expose :created_at + expose :updated_at + end + end + end +end diff --git a/app/api/v2/entities/level.rb b/app/api/v2/entities/level.rb new file mode 100644 index 0000000..9cca435 --- /dev/null +++ b/app/api/v2/entities/level.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +module API + module V2 + module Entities + class Level < API::V2::Entities::Base + expose :id, + documentation: { + type: 'Integer', + desc: 'Level identifier, level number' + } + + expose :key, + documentation: { + type: 'String', + desc: 'Label key. [A-Za-z0-9_-] should be used. Min - 3, max - 255 characters.' + } + + expose :value, + documentation: { + type: 'String', + desc: 'Label value. [A-Za-z0-9_-] should be used. Min - 3, max - 255 characters.' + } + end + end + end +end diff --git a/app/api/v2/entities/permission.rb b/app/api/v2/entities/permission.rb new file mode 100644 index 0000000..3fc1dbe --- /dev/null +++ b/app/api/v2/entities/permission.rb @@ -0,0 +1,50 @@ +# frozen_string_literal: true + +module API + module V2 + module Entities + class Permission < API::V2::Entities::Base + expose :id, + documentation: { + type: 'Integer', + desc: 'Permission id' + } + + expose :action, + documentation: { + type: 'String', + desc: 'Permission action: accept (allow access (drop access), audit (record activity)' + } + + expose :role, + documentation: { + type: 'String', + desc: 'Permission user role' + } + + expose :verb, + documentation: { + type: 'String', + desc: 'Permission verb: put, post, delete, get' + } + + expose :path, + documentation: { + type: 'String', + desc: 'API path' + } + + expose :topic, + documentation: { + type: 'String', + desc: 'Permission topic: general, session etc' + } + + with_options(format_with: :iso_timestamp) do + expose :created_at + expose :updated_at + end + end + end + end +end diff --git a/app/api/v2/entities/phone.rb b/app/api/v2/entities/phone.rb new file mode 100644 index 0000000..76711f0 --- /dev/null +++ b/app/api/v2/entities/phone.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +module API + module V2 + module Entities + # Phone request response + class Phone < API::V2::Entities::Base + expose :country, + documentation: { + type: 'String', + desc: 'Phone country' + } + + expose :number, + documentation: { + type: 'String', + desc: 'Submasked phone number' + } do |phone| + Barong::App.config.api_data_masking_enabled ? phone.sub_masked_number : phone.number + end + + expose :validated_at, + documentation: { + type: 'Datetime', + desc: 'Phone validation date' + } + end + end + end +end diff --git a/app/api/v2/entities/profile.rb b/app/api/v2/entities/profile.rb new file mode 100644 index 0000000..096465b --- /dev/null +++ b/app/api/v2/entities/profile.rb @@ -0,0 +1,85 @@ +# frozen_string_literal: true + +module API::V2 + module Entities + class Profile < API::V2::Entities::Base + expose :first_name, + documentation: { + type: 'String', + desc: 'First Name' + } + + expose :last_name, + documentation: { + type: 'String', + desc: 'Submasked last name' + } do |profile| + Barong::App.config.api_data_masking_enabled ? profile.sub_masked_last_name : profile.last_name + end + + expose :national_code, + documentation: { + type: 'String', + desc: 'Submasked national code' + } do |profile| + Barong::App.config.api_data_masking_enabled ? profile.sub_masked_national_code : profile.national_code + end + + expose :dob, + documentation: { + type: 'Date', + desc: 'Submasked birth date' + } do |profile| + Barong::App.config.api_data_masking_enabled ? profile.sub_masked_dob : profile.dob + end + + expose :address, + documentation: { + type: 'String', + desc: 'Address' + } + + expose :postcode, + documentation: { + type: 'String', + desc: 'Address Postcode' + } + + expose :city, + documentation: { + type: 'String', + desc: 'City name' + } + + expose :country, + documentation: { + type: 'String', + desc: 'Country name' + } + + expose :state, + documentation: { + type: 'String', + desc: 'Profile state: drafted, submitted, verified, rejected' + } + + expose :metadata, + documentation: { + type: 'Hash', + desc: 'Profile additional fields' + } + + expose :upload, + documentation: { + type: 'String', + desc: 'Address Postcode' + } do |profile| + end + + with_options(format_with: :iso_timestamp) do + expose :created_at + expose :updated_at + end + end + end +end diff --git a/app/api/v2/entities/restriction.rb b/app/api/v2/entities/restriction.rb new file mode 100644 index 0000000..5111127 --- /dev/null +++ b/app/api/v2/entities/restriction.rb @@ -0,0 +1,48 @@ +# frozen_string_literal: true + +module API::V2 + module Entities + class Restriction < API::V2::Entities::Base + expose :id, + documentation: { + type: 'Integer', + desc: 'Restriction id' + } + + expose :category, + documentation: { + type: 'String', + desc: 'Restriction categories: blacklist, maintenance, whitelist, blocklogin' + } + + expose :scope, + documentation: { + type: 'String', + desc: 'Restriction scopes: continent, country, ip, ip_subnet, all' + } + + expose :value, + documentation: { + type: 'String', + desc: 'Restriction value: IP address, country abbreviation, all' + } + + expose :code, + documentation: { + type: 'Integer', + desc: "Restriction codes: #{::Restriction::DEFAULT_CODES}" + } + + expose :state, + documentation: { + type: 'String', + desc: 'Restriction states: disabled, enabled' + } + + with_options(format_with: :iso_timestamp) do + expose :created_at + expose :updated_at + end + end + end +end diff --git a/app/api/v2/entities/service_accounts.rb b/app/api/v2/entities/service_accounts.rb new file mode 100644 index 0000000..3669a0d --- /dev/null +++ b/app/api/v2/entities/service_accounts.rb @@ -0,0 +1,44 @@ +# frozen_string_literal: true + +module API::V2 + module Entities + class ServiceAccounts < API::V2::Entities::Base + expose :email, + documentation: { + type: 'String', + desc: 'User Email' + } + + expose :uid, + documentation: { + type: 'String', + desc: 'User UID' + } + + expose :role, + documentation: { + type: 'String', + desc: 'Service Account Role' + } + + expose :level, + documentation: { + type: 'Integer', + desc: 'User Level' + } + + expose :state, + documentation: { + type: 'String', + desc: 'Service Account State: active, disabled' + } + + expose :user, using: Entities::User + + with_options(format_with: :iso_timestamp) do + expose :created_at + expose :updated_at + end + end + end +end diff --git a/app/api/v2/entities/treasury.rb b/app/api/v2/entities/treasury.rb new file mode 100644 index 0000000..a669113 --- /dev/null +++ b/app/api/v2/entities/treasury.rb @@ -0,0 +1,44 @@ +# frozen_string_literal: true + +module API::V2 + module Entities + class Treasury < API::V2::Entities::Base + expose :id, + documentation: { + type: 'Integer', + desc: 'id of record' + } + + expose :title, + documentation: { + type: 'String', + desc: 'title' + } + + expose :state, + documentation: { + type: 'String', + desc: 'state' + } + + expose :kind, + documentation: { + type: 'String', + desc: 'kind' + } + + expose :data, + documentation: { + type: 'String', + desc: 'Submasked data' + } do |treasury| + Barong::App.config.api_data_masking_enabled ? treasury.sub_masked_data : treasury.data + end + + with_options(format_with: :iso_timestamp) do + expose :created_at + expose :updated_at + end + end + end +end diff --git a/app/api/v2/entities/user.rb b/app/api/v2/entities/user.rb new file mode 100644 index 0000000..317ce8e --- /dev/null +++ b/app/api/v2/entities/user.rb @@ -0,0 +1,60 @@ +# frozen_string_literal: true + +module API + module V2 + module Entities + # Basic user info + class User < API::V2::Entities::Base + expose :email, + documentation: { + type: 'String', + desc: 'User Email' + } + + expose :uid, + documentation: { + type: 'String', + desc: 'User UID' + } + + expose :role, + documentation: { + type: 'String', + desc: 'User role' + } + + expose :level, + documentation: { + type: 'Integer', + desc: 'User level' + } + + expose :otp, + documentation: { + type: 'Boolean', + desc: 'is 2FA enabled for account' + } + + expose :state, + documentation: { + type: 'String', + desc: 'User state: active, pending, inactive' + } + + expose :referral_uid, + documentation: { + type: 'String', + desc: 'UID of referrer' + } do |user| + user.referral_uid + end + + expose :data, + documentation: { + type: 'String', + desc: 'Additional phone and profile info' + } + end + end + end +end diff --git a/app/api/v2/entities/user_with_full_info.rb b/app/api/v2/entities/user_with_full_info.rb new file mode 100644 index 0000000..cf15c57 --- /dev/null +++ b/app/api/v2/entities/user_with_full_info.rb @@ -0,0 +1,80 @@ +# frozen_string_literal: true + +module API + module V2 + module Entities + # User information containing profile, labels and documents + class UserWithFullInfo < API::V2::Entities::Base + expose :email, + documentation: { + type: 'String', + desc: 'User Email' + } + + expose :uid, + documentation: { + type: 'String', + desc: 'User UID' + } + + expose :role, + documentation: { + type: 'String', + desc: 'User role' + } + + expose :level, + documentation: { + type: 'Integer', + desc: 'User level' + } + + expose :otp, + documentation: { + type: 'Boolean', + desc: 'is 2FA enabled for account' + } + + expose :state, + documentation: { + type: 'String', + desc: 'User state: active, pending, inactive' + } + + expose :referral_uid, + documentation: { + type: 'String', + desc: 'UID of referrer' + } do |user| + user.referral_uid + end + + expose :data, + documentation: { + type: 'String', + desc: 'Additional phone and profile info' + } + + expose :csrf_token, + documentation: { + type: 'String', + desc: 'Сsrf protection token' + }, + if: ->(_, options) { options[:csrf_token] } do |_user, options| + options[:csrf_token] + end + + expose :labels, using: Entities::Label + expose :phones, using: Entities::Phone + expose :profiles, using: Entities::Profile + expose :data_storages, using: Entities::DataStorage + # activities, as sensitive and potentialy too big data should be queried separately + + with_options(format_with: :iso_timestamp) do + expose :created_at + expose :updated_at + end + end + end + end +end diff --git a/app/api/v2/entities/user_with_kyc.rb b/app/api/v2/entities/user_with_kyc.rb new file mode 100644 index 0000000..a9c6edd --- /dev/null +++ b/app/api/v2/entities/user_with_kyc.rb @@ -0,0 +1,74 @@ +# frozen_string_literal: true + +module API + module V2 + module Entities + # User information containing profile, labels and documents + class UserWithKYC < API::V2::Entities::Base + expose :email, + documentation: { + type: 'String', + desc: 'User Email' + } + + expose :uid, + documentation: { + type: 'String', + desc: 'User UID' + } + + expose :role, + documentation: { + type: 'String', + desc: 'User role' + } + + expose :level, + documentation: { + type: 'Integer', + desc: 'User level' + } + + expose :otp, + documentation: { + type: 'Boolean', + desc: 'is 2FA enabled for account' + } + + expose :state, + documentation: { + type: 'String', + desc: 'User state: active, pending, inactive' + } + + expose :referral_uid, + documentation: { + type: 'String', + desc: 'UID of referrer' + } do |user| + user.referral_uid + end + + expose :data, + documentation: { + type: 'String', + desc: 'Additional phone and profile info' + } + + expose :profiles, using: Entities::Profile + expose :labels, using: Entities::AdminLabelView + # expose :phones, using: Entities::Phone + # expose :documents, using: Entities::Document + # expose :data_storages, using: Entities::DataStorage + # expose :comments, using: Entities::Comment + + # activities, as sensitive and potentialy too big data should be queried separately + + with_options(format_with: :iso_timestamp) do + expose :created_at + expose :updated_at + end + end + end + end +end diff --git a/app/api/v2/entities/user_with_profile.rb b/app/api/v2/entities/user_with_profile.rb new file mode 100644 index 0000000..c58311a --- /dev/null +++ b/app/api/v2/entities/user_with_profile.rb @@ -0,0 +1,64 @@ +# frozen_string_literal: true + +module API::V2 + module Entities + class UserWithProfile < API::V2::Entities::Base + expose :email, + documentation: { + type: 'String', + desc: 'User Email' + } + + expose :uid, + documentation: { + type: 'String', + desc: 'User UID' + } + + expose :role, + documentation: { + type: 'String', + desc: 'User role' + } + + expose :level, + documentation: { + type: 'Integer', + desc: 'User level' + } + + expose :otp, + documentation: { + type: 'Boolean', + desc: 'is 2FA enabled for account' + } + + expose :state, + documentation: { + type: 'String', + desc: 'User state: active, pending, inactive' + } + + expose :referral_uid, + documentation: { + type: 'String', + desc: 'UID of referrer' + } do |user| + user.referral_uid + end + + expose :data, + documentation: { + type: 'String', + desc: 'Additional phone and profile info' + } + + expose :profiles, using: Entities::Profile + + with_options(format_with: :iso_timestamp) do + expose :created_at + expose :updated_at + end + end + end +end diff --git a/app/api/v2/exception_handlers.rb b/app/api/v2/exception_handlers.rb new file mode 100644 index 0000000..b3a5057 --- /dev/null +++ b/app/api/v2/exception_handlers.rb @@ -0,0 +1,45 @@ +# encoding: UTF-8 +# frozen_string_literal: true + +module API + module V2 + # Overrides standard AR and grape validation errors + module ExceptionHandlers + def self.included(base) + base.instance_eval do + rescue_from Grape::Exceptions::ValidationErrors do |e| + errors_array = e.full_messages.map do |err| + err.split.last + end + error!({ errors: errors_array }, 422) + end + + rescue_from ActiveRecord::RecordNotFound do |_e| + error!({ errors: ['record.not_found'] }, 404) + end + + rescue_from Peatio::Auth::Error do |e| + # report_exception(e) + error!({ errors: ['jwt.decode_and_verify'] }, 401) + end + + rescue_from(JWT::DecodeError) do |error| + # expired for "Signature has expired" - expired token + # segments for "Not enough or too many segments" - wrong token + error!({ errors: ["jwt.decode_and_verify.#{error.message.split.last}"] }, 422) + end + + # Known Vault Error from TOTPService.with_human_error + rescue_from(TOTPService::Error) do |error| + error!({ errors: ['totp.error'] }, 422) + end + + rescue_from :all do |e| + Rails.logger.error "#{e.message}\n#{e.backtrace[0..5].join("\n")}" + error!({ errors: ['server.internal_error'] }, 500) + end + end + end + end + end +end \ No newline at end of file diff --git a/app/api/v2/identity/base.rb b/app/api/v2/identity/base.rb new file mode 100644 index 0000000..b1c3168 --- /dev/null +++ b/app/api/v2/identity/base.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +module API + module V2 + module Identity + # base api configurations for module + class Base < Grape::API + helpers API::V2::Identity::Utils + + do_not_route_options! + + mount Identity::General + mount Identity::Sessions + mount Identity::Users + end + end + end +end diff --git a/app/api/v2/identity/general.rb b/app/api/v2/identity/general.rb new file mode 100644 index 0000000..51a7c9f --- /dev/null +++ b/app/api/v2/identity/general.rb @@ -0,0 +1,48 @@ +# frozen_string_literal: true + +module API::V2 + module Identity + class General < Grape::API + desc 'Password strength testing' + params do + requires :password, type: String, desc: 'User password' + end + post '/password/validate' do + { entropy: PasswordStrengthChecker.calculate_entropy(params[:password]) } + end + + desc 'Test connectivity' + get '/ping' do + { ping: 'pong' } + end + + desc 'Get server current unix timestamp.' + get '/time' do + ts = ::Time.now.to_i + { time: ts } + end + + desc 'Get barong version' + get '/version' do + { + git_tag: Barong::Application::GIT_TAG, + git_sha: Barong::Application::GIT_SHA, + build_date: DateTime.rfc3339(Barong::Application::BUILD_DATE), + version: Barong::Application::VERSION + } + end + + desc 'Get barong configurations' + get '/configs' do + { + session_expire_time: Barong::App.config.session_expire_time, + captcha_type: Barong::App.config.captcha, + captcha_id: (Barong::App.config.recaptcha_site_key if Barong::App.config.captcha == 'recaptcha'), + phone_verification_type: Barong::App.config.phone_verification, + password_min_entropy: Barong::App.config.password_min_entropy, + password_regexp: Barong::App.config.password_regexp + }.compact + end + end + end +end diff --git a/app/api/v2/identity/sessions.rb b/app/api/v2/identity/sessions.rb new file mode 100644 index 0000000..287da04 --- /dev/null +++ b/app/api/v2/identity/sessions.rb @@ -0,0 +1,176 @@ +# frozen_string_literal: true + +require_dependency 'barong/jwt' + +module API::V2 + module Identity + class Sessions < Grape::API + helpers do + def get_user(email) + user = User.find_by(email: email) + error!({ errors: ['identity.session.invalid_params'] }, 401) unless user + + if user.state == 'banned' + login_error!(reason: 'Your account is banned', error_code: 401, + user: user.id, action: 'login', result: 'failed', error_text: 'banned') + end + + if user.state == 'deleted' + login_error!(reason: 'Your account is deleted', error_code: 401, + user: user.id, action: 'login', result: 'failed', error_text: 'deleted') + end + + # if user is not active or pending, then return 401 + unless user.state.in?(%w[active pending]) + login_error!(reason: 'Your account is not active', error_code: 401, + user: user.id, action: 'login', result: 'failed', error_text: 'not_active') + end + user + end + end + + desc 'Session related routes' + resource :sessions do + desc 'Start a new session for every LogIn', + failure: [ + { code: 400, message: 'Required params are empty' }, + { code: 404, message: 'Record is not found' } + ] + params do + requires :email + requires :password + optional :captcha_response, + types: { value: [String, Hash], message: 'identity.session.invalid_captcha_format' }, + desc: 'Response from captcha widget' + optional :otp_code, + type: String, + desc: 'Code from Google Authenticator' + end + post do + verify_captcha!(response: params['captcha_response'], endpoint: 'session_create') + + declared_params = declared(params, include_missing: false) + user = get_user(declared_params[:email]) + error!({ errors: ['identity.session.not_active'] }, 401) unless user.state == 'active' + + unless user.authenticate(declared_params[:password]) + publish_session_failed(user) + login_error!(reason: 'Invalid Email or Password', error_code: 401, user: user.id, + action: 'login', result: 'failed', error_text: 'invalid_params') + end + + unless user.otp + activity_record(user: user.id, action: 'login', result: 'succeed', topic: 'session') + csrf_token = open_session(user) + publish_session_create(user) + + present user, with: API::V2::Entities::UserWithFullInfo, csrf_token: csrf_token + return status 200 + end + + error!({ errors: ['identity.session.missing_otp'] }, 401) if declared_params[:otp_code].blank? + unless TOTPService.validate?(user.uid, declared_params[:otp_code]) + login_error!(reason: 'OTP code is invalid', error_code: 403, + user: user.id, action: 'login::2fa', result: 'failed', error_text: 'invalid_otp') + end + + activity_record(user: user.id, action: 'login::2fa', result: 'succeed', topic: 'session') + csrf_token = open_session(user) + publish_session_create(user) + + present user, with: API::V2::Entities::UserWithFullInfo, csrf_token: csrf_token + status(200) + end + + desc 'Destroy current session for LogOut', + failure: [ + { code: 400, message: 'Required params are empty' }, + { code: 404, message: 'Record is not found' } + ], + success: { code: 200, message: 'Session was destroyed' } + delete do + user = User.find_by(uid: session[:uid]) + error!({ errors: ['identity.session.not_found'] }, 404) unless user + + activity_record(user: user.id, action: 'logout', result: 'succeed', topic: 'session') + + session.destroy + status(200) + end + + desc 'Auth0 authentication by id_token', + success: { code: 200, message: 'User authenticated' }, + failure: [ + { code: 400, message: 'Required params are empty' }, + { code: 404, message: 'Record is not found' } + ] + params do + requires :id_token, + type: String, + allow_blank: false, + desc: 'ID Token' + end + post '/auth0' do + begin + # Decode ID token to get user info + claims = Barong::Auth0::JWT.verify(params[:id_token]).first + error!({ errors: ['identity.session.auth0.invalid_params'] }, 401) unless claims.key?('email') + user = User.find_by(email: claims['email']) + + # If there is no user in platform and user email verified from id_token + # system will create user + if user.blank? && claims['email_verified'] + user = User.create!(email: claims['email'], state: 'active') + user.labels.create!(scope: 'private', key: 'email', value: 'verified') + elsif claims['email_verified'] == false + error!({ errors: ['identity.session.auth0.invalid_params'] }, 401) unless user + end + + activity_record(user: user.id, action: 'login', result: 'succeed', topic: 'session') + csrf_token = open_session(user) + publish_session_create(user) + + present user, with: API::V2::Entities::UserWithFullInfo, csrf_token: csrf_token + rescue StandardError => e + report_exception(e) + error!({ errors: ['identity.session.auth0.invalid_params'] }, 422) + end + end + + desc 'Resend confirmations code(authorization code)', + success: { code: 201, message: 'Generated verification code' }, + failure: [ + { code: 400, message: 'Required params are missing' }, + { code: 422, message: 'Validation errors' } + ] + params do + requires :data, + type: String, + allow_blank: false, + desc: 'Account email or Telephone number' + requires :action, + type: String, + allow_blank: false, + desc: 'for what need auth code' + optional :channel, + type: String, + allow_blank: true, + default: 'email', + desc: 'channel that send in' + optional :captcha_response, + types: [String, Hash], + desc: 'Response from captcha widget' + end + post '/resend' do + current_user = User.find_by_email(params[:data]) + + return status 201 if current_user.nil? + + publish_confirmation_code(current_user, Barong::App.config.domain, params[:action]) + + status 201 + end + end + end + end +end diff --git a/app/api/v2/identity/users.rb b/app/api/v2/identity/users.rb new file mode 100644 index 0000000..5e35b8d --- /dev/null +++ b/app/api/v2/identity/users.rb @@ -0,0 +1,405 @@ +# frozen_string_literal: true + +require_dependency 'barong/jwt' + +module API::V2 + module Identity + class Users < Grape::API + helpers do + def parse_refid! + error!({ errors: ['identity.user.invalid_referral_format'] }, 422) unless params[:refid].start_with?(Barong::App.config.uid_prefix.upcase) + user = User.find_by_uid(params[:refid]) + error!({ errors: ['identity.user.referral_doesnt_exist'] }, 422) if user.nil? + + user.id + end + end + + desc 'User related routes' + resource :users do + desc 'Creates new whitelist restriction', + failure: [ + { code: 400, message: 'Required params are missing' }, + { code: 422, message: 'Validation errors' } + ], + success: { code: 200, message: 'Whitelist restriction was created' } + params do + requires :whitelink_token, + type: String, + allow_blank: false + end + post '/access' do + if Rails.cache.read(params[:whitelink_token]) == 'active' + restriction = Restriction.new( + category: 'whitelist', + scope: 'ip', + value: remote_ip, + state: 'enabled' + ) + + code_error!(restriction.errors.details, 422) unless restriction.save + Rails.cache.delete('restrictions') + else + error!({ errors: ['identity.user.access.invalid_token'] }, 422) + end + end + + desc 'Creates new user (sign up)', + success: API::V2::Entities::UserWithFullInfo, + failure: [ + { code: 400, message: 'Required params are missing' }, + { code: 422, message: 'Validation errors' } + ] + params do + requires :email, + type: String, + allow_blank: false, + desc: 'User Email' + requires :password, + type: String, + allow_blank: false, + desc: 'User Password' + optional :refid, + type: String, + desc: 'Referral uid' + optional :captcha_response, + types: [String, Hash], + desc: 'Response from captcha widget' + optional :data, + type: String, + desc: 'Any additional key: value pairs in json string format' + end + post do + verify_captcha!(response: params['captcha_response'], endpoint: 'user_create') + + declared_params = declared(params, include_missing: false) + user_params = declared_params.slice('email', 'password', 'data') + + user_params[:referral_id] = parse_refid! unless params[:refid].nil? + user = User.find_by(email: user_params[:email]) + error!({ errors: ['identity.user.active_or_banned'] }, 422) if user.present? && %w[active ban].include?(user.state) + + if user.present? + code_error!(user.errors.details, 422) unless user.update(user_params) + else + user = User.new(user_params) + code_error!(user.errors.details, 422) unless user.save + end + activity_record(user: user.id, action: 'signup', result: 'succeed', topic: 'account') + + # Creates superadmin user in first platform registration + if Barong::App.config.first_registration_superadmin && User.count == 1 + user.update(role: 'superadmin', state: 'active') + user.labels.create(key: 'email', value: 'verified', scope: 'private') + else + publish_confirmation_code(user, Barong::App.config.domain, 'sign-up') + user.write_cache('register_email', 'true', 3600) + end + + csrf_token = open_session(user) + present user, with: API::V2::Entities::UserWithFullInfo, csrf_token: csrf_token + end + + desc 'Register Geetest captcha' + get '/register_geetest' do + CaptchaService::GeetestVerifier.new.register + end + + namespace :email do + desc 'Send confirmations instructions (code in email)', + success: { code: 201, message: 'Generated verification code' }, + failure: [ + { code: 400, message: 'Required params are missing' }, + { code: 422, message: 'Validation errors' } + ] + params do + requires :email, + type: String, + allow_blank: false, + desc: 'Account email' + optional :captcha_response, + types: [String, Hash], + desc: 'Response from captcha widget' + end + post '/generate_email_code' do + verify_captcha!(response: params['captcha_response'], endpoint: 'email_confirmation') + + current_user = User.find_by_email(params[:email]) + + return status 201 if current_user.nil? || current_user.active? + + publish_confirmation_code(current_user, Barong::App.config.domain, 'sign-up') + status 201 + end + + desc 'Confirms an account by token (one-time link in email)', + success: API::V2::Entities::UserWithFullInfo, + failure: [ + { code: 400, message: 'Required params are missing' }, + { code: 422, message: 'Validation errors' } + ] + params do + requires :token, + type: String, + allow_blank: false, + desc: 'Token from email' + end + post '/confirm_code' do + payload = codec.decode_and_verify( + params[:token], + pub_key: Barong::App.config.keystore.public_key, + sub: 'confirmation' + ) + current_user = User.find_by_email(payload[:email]) + + if current_user.nil? || current_user.active? + error!({ errors: ['identity.user.active_or_doesnt_exist'] }, 422) + end + + token_uniq?(payload[:jti]) + current_user.labels.create!(key: 'email', value: 'verified', scope: 'private') + csrf_token = open_session(current_user) + + EventAPI.notify('system.user.email.confirmed', + record: { + user: current_user.as_json_for_event_api, + domain: Barong::App.config.domain + }) + + present current_user, with: API::V2::Entities::UserWithFullInfo, csrf_token: csrf_token + end + + desc 'Confirms an account by Authorization code (verify user email and achieve first label)', + success: API::V2::Entities::UserWithFullInfo, + failure: [ + { code: 400, message: 'Required code are missing' }, + { code: 422, message: 'Validation errors' } + ] + params do + requires :code, + type: String, + allow_blank: false, + desc: 'Code from email' + requires :email, + type: String, + allow_blank: false, + desc: 'user email' + end + post '/confirm_email' do + current_user = User.find_by_email(params[:email]) + + if current_user.nil? || current_user.active? + error!({ errors: ['identity.user.active_or_doesnt_exist'] }, 422) + end + unless TOTPServiceAction.new('sign-up').validate?(current_user.uid, declared(params)[:code]) + error!({ errors: ['identity.user.code_invalid'] }, 422) + end + error!({ errors: ['identity.user.code_invalid'] }, 422) unless current_user.read_cache('register_email') + + current_user.labels.create!(key: 'email', value: 'verified', scope: 'private') + csrf_token = open_session(current_user) + + EventAPI.notify('system.user.email.confirmed', + record: { + user: current_user.as_json_for_event_api, + domain: Barong::App.config.domain + }) + + present current_user, with: API::V2::Entities::UserWithFullInfo, csrf_token: csrf_token + end + + end + + # forgot reset password + namespace :password do + desc 'Send password reset instructions(forget password)', + success: { code: 201, message: 'Generated password reset code' }, + failure: [ + { code: 400, message: 'Required params are missing' }, + { code: 422, message: 'Validation errors' }, + { code: 404, message: 'User doesn\'t exist'} + ] + params do + requires :email, + type: String, + message: 'identity.user.missing_email', + allow_blank: false, + desc: 'Account email' + optional :captcha_response, + types: [String, Hash], + desc: 'Response from captcha widget' + end + + post '/generate_code' do + verify_captcha!(response: params['captcha_response'], endpoint: 'password_reset') + + current_user = User.find_by_email(params[:email]) + return status 404 if current_user.nil? + + activity_record(user: current_user.id, action: 'request password reset', result: 'succeed', topic: 'password') + + publish_confirmation_code(current_user, Barong::App.config.domain, 'reset-password') + status 201 + end + + desc 'Validate reset code or set a new password via one-time email link', + success: { code: 201, message: 'reset code is ok' }, + failure: [ + { code: 400, message: 'Required params are missing' }, + { code: 422, message: 'Validation errors' }, + { code: 404, message: 'User doesn\'t exist'} + ] + params do + optional :email, + type: String, + allow_blank: false, + desc: 'Account email' + optional :code, + type: String, + allow_blank: false, + desc: 'Confirm code' + optional :reset_password_token, + type: String, + allow_blank: false, + desc: 'Token from email' + optional :password, + type: String, + allow_blank: false, + desc: 'User new password' + optional :confirm_password, + type: String, + allow_blank: false, + desc: 'User new password' + optional :captcha_response, + types: [String, Hash], + desc: 'Response from captcha widget' + end + + post '/confirm_code' do + token_reset_request = params[:reset_password_token].present? || + params[:password].present? || + params[:confirm_password].present? + + if token_reset_request + error!({ errors: ['identity.user.missing_pass_token', 'identity.user.empty_reset_password_token'] }, 422) if params[:reset_password_token].blank? + error!({ errors: ['identity.user.missing_password', 'identity.user.empty_password'] }, 422) if params[:password].blank? + error!({ errors: ['identity.user.missing_confirm_password', 'identity.user.empty_confirm_password'] }, 422) if params[:confirm_password].blank? + error!({ errors: ['identity.user.passwords_doesnt_match'] }, 422) unless params[:password] == params[:confirm_password] + + payload = codec.decode_and_verify( + params[:reset_password_token], + pub_key: Barong::App.config.keystore.public_key, + sub: 'reset' + ) + + if Rails.cache.read("reset_password_#{payload[:email]}") != payload[:reset_token] || + Rails.cache.read(payload[:jti]) == 'utilized' + error!({ errors: ['identity.user.utilized_token'] }, 422) + end + + current_user = User.find_by_email(payload[:email]) + return status 404 if current_user.nil? + + unless PasswordStrengthChecker.validate!(params[:password]) == 'strong' + error!({ errors: ["resource.password.#{PasswordStrengthChecker.validate!(params[:password])}"] }, 422) + end + + unless current_user.update(password: params[:password]) + error_note = { reason: current_user.errors.full_messages.to_sentence }.to_json + activity_record(user: current_user.id, action: 'password reset', + result: 'failed', topic: 'password', data: error_note) + code_error!(current_user.errors.details, 422) + end + + Rails.cache.delete("reset_password_#{payload[:email]}") + Rails.cache.write(payload[:jti], 'utilized', expires_in: Barong::App.config.jwt_expire_time.seconds) + activity_record(user: current_user.id, action: 'password reset', result: 'succeed', topic: 'password') + + EventAPI.notify('system.user.password.reset', + record: { + user: current_user.as_json_for_event_api, + domain: Barong::App.config.domain + }) + status 201 + else + error!({ errors: ['identity.user.missing_email', 'identity.user.empty_email'] }, 422) if params[:email].blank? + error!({ errors: ['identity.user.missing_code', 'identity.user.empty_code'] }, 422) if params[:code].blank? + verify_captcha!(response: params['captcha_response'], endpoint: 'password_reset') + + current_user = User.find_by_email(params[:email]) + return status 404 if current_user.nil? + + totp = TOTPServiceAction.new('reset-password') + error!({ errors: ['resource.totp.code'] }, 422) unless totp.safe_validate?(current_user.uid, declared(params)[:code]) + + status 200 + end + end + + # reset forgot password + desc 'Sets new account password(for forgot password)', + success: { code: 201, message: 'Resets password' }, + failure: [ + { code: 400, message: 'Required params are empty' }, + { code: 404, message: 'Record is not found' }, + { code: 422, message: 'Validation errors' } + ] + params do + requires :email, + type: String, + message: 'identity.user.email', + allow_blank: false, + desc: 'user email' + requires :code, + type: String, + message: 'identity.user.missing_pass_token', + allow_blank: false, + desc: 'code from email again' + requires :password, + type: String, + message: 'identity.user.missing_password', + allow_blank: false, + desc: 'User new password' + requires :confirm_password, + type: String, + message: 'identity.user.missing_confirm_password', + allow_blank: false, + desc: 'User new password' + end + post '/reset' do + current_user = User.find_by_email(params[:email]) + return status 404 if current_user.nil? + + totp = TOTPServiceAction.new('reset-password') + error!({ errors: ['resource.totp.code'] }, 422) unless totp.safe_validate?(current_user.uid, declared(params)[:code]) + + unless params[:password] == params[:confirm_password] + error!({ errors: ['identity.user.passwords_doesnt_match'] }, 422) + end + + unless PasswordStrengthChecker.validate!(params[:password]) == 'strong' + error!({ errors: ["resource.password.#{PasswordStrengthChecker.validate!(temp_password)}"] }, 422) + end + + unless current_user.update(password: params[:password]) + error_note = { reason: current_user.errors.full_messages.to_sentence }.to_json + activity_record(user: current_user.id, action: 'password reset', + result: 'failed', topic: 'password', data: error_note) + code_error!(current_user.errors.details, 422) + end + + totp.validate?(current_user.uid, declared(params)[:code]) + activity_record(user: current_user.id, action: 'password reset', result: 'succeed', topic: 'password') + + EventAPI.notify('system.user.password.reset', + record: { + user: current_user.as_json_for_event_api, + domain: Barong::App.config.domain + }) + status 201 + end + end + end + end + end +end diff --git a/app/api/v2/identity/utils.rb b/app/api/v2/identity/utils.rb new file mode 100644 index 0000000..9f74e5c --- /dev/null +++ b/app/api/v2/identity/utils.rb @@ -0,0 +1,161 @@ +# frozen_string_literal: true + +module API::V2 + module Identity + module Utils + def session + request.session + end + + def codec + @_codec ||= Barong::JWT.new(key: Barong::App.config.keystore.private_key) + end + + def open_session(user) + csrf_token = SecureRandom.hex(10) + session.merge!( + "uid": user.uid, + "user_ip": remote_ip, + "user_agent": request.env['HTTP_USER_AGENT'], + "expire_time": Time.now.to_i + Barong::App.config.session_expire_time, + "csrf_token": csrf_token + ) + + csrf_token + end + + def verify_captcha!(response:, endpoint:, error_statuses: [400, 422]) + # by default we protect user_create session_create password_reset email_confirmation endpoints + return unless BarongConfig.list['captcha_protected_endpoints']&.include?(endpoint) + + case Barong::App.config.captcha + when 'recaptcha' + recaptcha(response: response) + when 'geetest' + geetest(response: response) + end + end + + def recaptcha(response:, error_statuses: [400, 422]) + error!({ errors: ['identity.captcha.required'] }, error_statuses.first) if response.blank? + + captcha_error_message = 'identity.captcha.verification_failed' + + if CaptchaService::RecaptchaVerifier.new(request: request).response_valid?(skip_remote_ip: true, response: response) + return + end + + error!({ errors: [captcha_error_message] }, error_statuses.last) + rescue StandardError + error!({ errors: [captcha_error_message] }, error_statuses.last) + end + + def geetest(response:, error_statuses: [400, 422]) + error!({ errors: ['identity.captcha.required'] }, error_statuses.first) if response.blank? + + geetest_error_message = 'identity.captcha.verification_failed' + validate_geetest_response(response: response) + + return if CaptchaService::GeetestVerifier.new.validate(response) + + error!({ errors: [geetest_error_message] }, error_statuses.last) + rescue StandardError + error!({ errors: [geetest_error_message] }, error_statuses.last) + end + + def validate_geetest_response(response:) + unless (response['geetest_challenge'].is_a? String) && + (response['geetest_validate'].is_a? String) && + (response['geetest_seccode'].is_a? String) + error!({ errors: ['identity.captcha.mandatory_fields'] }, 400) + end + end + + def login_error!(options = {}) + options[:data] = { reason: options[:reason] }.to_json + options[:topic] = 'session' + activity_record(options.except(:reason, :error_code, :error_text)) + error!({ errors: ['identity.session.' + options[:error_text]] }, options[:error_code]) + end + + def activity_record(options = {}) + params = { + category: 'user', + user_id: options[:user], + user_ip: remote_ip, + user_agent: request.env['HTTP_USER_AGENT'], + topic: options[:topic], + action: options[:action], + result: options[:result], + data: options[:data] + } + Activity.create(params) + end + + def token_uniq?(jti) + error!({ errors: ['identity.user.utilized_token'] }, 422) if Rails.cache.read(jti) == 'utilized' + Rails.cache.write(jti, 'utilized', expires_in: Barong::App.config.jwt_expire_time.seconds) + end + + def publish_confirmation(user, domain) + token = codec.encode(sub: 'confirmation', email: user.email, uid: user.uid) + EventAPI.notify( + 'system.user.email.confirmation.token', + record: { + user: user.as_json_for_event_api, + domain: domain, + token: token + } + ) + end + + def publish_confirmation_code(user, domain, action) + totp = TOTPServiceAction.new(action) + totp.create(user.uid, user.email) + record = { + user: user.as_json_for_event_api, + domain: domain, + code: totp.read_code(user.uid) + } + + case action + when 'sign-up' + record[:token] = codec.encode(sub: 'confirmation', email: user.email, uid: user.uid) + when 'reset-password' + reset_token = SecureRandom.hex(10) + Rails.cache.write( + "reset_password_#{user.email}", + reset_token, + expires_in: Barong::App.config.jwt_expire_time.seconds + ) + record[:token] = codec.encode( + sub: 'reset', + email: user.email, + uid: user.uid, + reset_token: reset_token + ) + end + + EventAPI.notify(action, record: record) + end + + def publish_session_create(user) + EventAPI.notify('system.session.create', + record: { + user: user.as_json_for_event_api, + user_ip: remote_ip, + user_agent: request.env['HTTP_USER_AGENT'] + }) + end + + def publish_session_failed(user) + EventAPI.notify('system.session.failed', + record: { + user: user.as_json_for_event_api, + user_ip: remote_ip, + user_agent: request.env['HTTP_USER_AGENT'] + }) + end + end + end +end diff --git a/app/api/v2/management/api_keys.rb b/app/api/v2/management/api_keys.rb new file mode 100644 index 0000000..cd99b29 --- /dev/null +++ b/app/api/v2/management/api_keys.rb @@ -0,0 +1,110 @@ +# frozen_string_literal: true + +module API::V2 + module Management + class APIKeys < Grape::API + resource :api_keys do + desc 'Create an api key for service account' do + @settings[:scope] = :write_apikeys + success API::V2::Entities::APIKey + end + params do + requires :algorithm, + type: String, + allow_blank: false, + desc: 'API key algorithm' + requires :uid, + type: String, + allow_blank: false, + desc: 'User UID or Service Account UID' + optional :scopes, + type: String, + allow_blank: false, + desc: 'Comma separated scopes' + end + post do + if params[:uid].start_with?(Barong::App.config.uid_prefix) + error!({ error: 'disabled_management_endpoint' }, 422) unless Barong::App.config.mgn_api_keys_user + + key_holder = User.find_by(uid: params[:uid]) + error!({ error: 'user_doesnt_exist' }, 422) unless key_holder + elsif params[:uid].start_with?(ServiceAccount::UID_PREFIX) + error!({ error: 'disabled_management_endpoint' }, 422) unless Barong::App.config.mgn_api_keys_sa + + key_holder = ServiceAccount.find_by(uid: params[:uid]) + error!({ error: 'service_account_doesnt_exist' }, 422) unless key_holder + else + error!({ error: 'uid_prefix_doesnt_exist'}, 422) + end + + declared_params = declared(params, include_missing: false) + .except(:uid, :sa_uid, :scopes) + .merge(scope: params[:scopes]&.split(',')) + .merge(secret: SecureRandom.hex(16)) + + api_key = key_holder.api_keys.new(declared_params) + + APIKey.transaction do + raise ActiveRecord::Rollback unless api_key.save + rescue Vault::VaultError + api_key.errors.add(:api_key, 'could_not_save_secret') + raise ActiveRecord::Rollback + end + + code_error!(api_key.errors.details, 422) if api_key.errors.any? + + present api_key, with: API::V2::Entities::APIKey + end + + desc 'Updates an api key for service account' do + @settings[:scope] = :write_apikeys + success API::V2::Entities::APIKey + end + params do + requires :kid, + type: String, + allow_blank: false, + desc: 'API key kid' + requires :uid, + type: String, + allow_blank: false, + desc: 'Service Account UID' + optional :scopes, + type: String, + allow_blank: false, + desc: 'Comma separated scopes' + optional :state, + type: String, + allow_blank: false, + desc: 'State of API Key. "active" state means key is active and can be used for auth' + end + post '/update' do + if params[:uid].start_with?(Barong::App.config.uid_prefix) + error!({ error: 'disabled_management_endpoint' }, 422) unless Barong::App.config.mgn_api_keys_user + + key_holder = User.find_by(uid: params[:uid]) + error!({ error: 'user_doesnt_exist' }, 422) unless key_holder + elsif params[:uid].start_with?(ServiceAccount::UID_PREFIX) + error!({ error: 'disabled_management_endpoint' }, 422) unless Barong::App.config.mgn_api_keys_sa + + key_holder = ServiceAccount.find_by(uid: params[:uid]) + error!({ error: 'service_account_doesnt_exist' }, 422) unless key_holder + else + error!({ error: 'uid_prefix_doesnt_exist'}, 422) + end + + declared_params = declared(params, include_missing: false) + .except(:uid, :scopes) + .merge(scope: params[:scopes]&.split(',')) + + api_key = key_holder.api_keys.find_by(kid: params[:kid]) + error!({ error: 'api_key_doesnt_exist' }, 422) unless api_key + + code_error!(api_key.errors.details, 422) unless api_key.update(declared_params) + + present api_key, with: API::V2::Entities::APIKey, except: [:secret] + end + end + end + end +end diff --git a/app/api/v2/management/base.rb b/app/api/v2/management/base.rb new file mode 100644 index 0000000..693c1c6 --- /dev/null +++ b/app/api/v2/management/base.rb @@ -0,0 +1,58 @@ +module API::V2 + module Management + class Base < Grape::API + PREFIX = '/management' + + do_not_route_options! + + rescue_from(API::V2::Management::Exceptions::Base) { |e| error!(e.message, e.status, e.headers) } + rescue_from(Grape::Exceptions::ValidationErrors) { |e| error!(e.message, 422) } + rescue_from(ActiveRecord::RecordNotFound) { error!('Record is not found', 404) } + + # Known Vault Error from TOTPService.with_human_error + rescue_from(TOTPService::Error) do |error| + error!(error.message, 422) + end + + use API::V2::Management::JWTAuthenticationMiddleware + mount API::V2::Management::Labels + mount API::V2::Management::Users + mount API::V2::Management::Profiles + mount API::V2::Management::Phones + mount API::V2::Management::Tools + mount API::V2::Management::Otp + mount API::V2::Management::Documents + mount API::V2::Management::ServiceAccounts + mount API::V2::Management::APIKeys + + add_swagger_documentation base_path: File.join(API::Base::PREFIX, API::V2::Base::API_VERSION, 'barong', PREFIX), + info: { + title: 'Barong', + description: 'Management API for barong OAuth server' + }, + mount_path: '/swagger', + security_definitions: { + 'SecurityScope': { + description: 'JWT should have signature keychains', + type: 'basic', + name: 'Authorization' + } + }, + models: [ + API::V2::Entities::Label, + API::V2::Entities::APIKey, + API::V2::Entities::UserWithFullInfo, + API::V2::Entities::User, + API::V2::Management::Entities::Profile, + API::V2::Management::Entities::Phone, + API::V2::Management::Entities::Document, + API::V2::Management::Entities::UserWithProfile, + API::V2::Management::Entities::UserWithKYC, + API::V2::Management::Entities::APIKey, + ], + api_version: API::V2::Base::API_VERSION, + doc_version: Barong::Application::GIT_TAG, + add_base_path: true + end + end +end diff --git a/app/api/v2/management/documents.rb b/app/api/v2/management/documents.rb new file mode 100644 index 0000000..8cde2ba --- /dev/null +++ b/app/api/v2/management/documents.rb @@ -0,0 +1,70 @@ +# frozen_string_literal: true + +module API::V2 + module Management + # Documents server-to-server API + class Documents < Grape::API + desc 'Documents related routes' + resource :documents do + helpers do + def parse_file_data(upload, name, ext) + decoded_file = Base64.strict_decode64(upload) + file = Tempfile.new([name, ext]) + file.binmode + file.write decoded_file + + return file + end + end + + desc 'Push documents to barong DB' do + @settings[:scope] = :write_documents + end + params do + requires :uid, type: String, allow_blank: false, desc: 'User uid' + requires :doc_type, + type: String, + allow_blank: false, + desc: 'Document type' + requires :doc_number, + type: String, + allow_blank: false, + desc: 'Document number' + requires :filename, + type: String, + allow_blank: false, + desc: 'Document name' + requires :file_ext, + type: String, + allow_blank: false, + desc: 'Document file extension' + requires :upload, + type: String, + desc: 'Base64 encoded document' + optional :doc_expire, + type: { value: Date, message: 'management.documents.expire_not_a_date' }, + allow_blank: true, + desc: 'Document expiration date' + optional :update_labels, + type: { value: Boolean, message: 'management.documents.update_labels_invalid' }, + default: true, + desc: 'If set to false, user label will not be created/updated' + optional :metadata, + type: String, + desc: 'Any additional key: value pairs in json string format' + end + post do + user = User.find_by(uid: params[:uid]) + error!(errors: ['user doesnt exist']) unless user + + file = parse_file_data(params[:upload], params[:filename], params[:file_ext]) + + doc = user.documents.new(declared(params).except(:upload, :uid, :filename, :file_ext).merge(upload: file)) + error!(doc.errors.full_messages.to_sentence, 422) unless doc.save + + status 201 + end + end + end + end +end diff --git a/app/api/v2/management/entities/document.rb b/app/api/v2/management/entities/document.rb new file mode 100644 index 0000000..ba2e21a --- /dev/null +++ b/app/api/v2/management/entities/document.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +module API::V2::Management + module Entities + class Document < API::V2::Entities::Document + expose :doc_number, + documentation: { + type: 'String', desc: 'Document number: AB123123 type' + } + end + end +end diff --git a/app/api/v2/management/entities/phone.rb b/app/api/v2/management/entities/phone.rb new file mode 100644 index 0000000..7dad4ea --- /dev/null +++ b/app/api/v2/management/entities/phone.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +module API::V2::Management + module Entities + class Phone < API::V2::Entities::Phone + expose :number, + documentation: { + type: 'String', + desc: 'Phone Number' + } + end + end +end diff --git a/app/api/v2/management/entities/profile.rb b/app/api/v2/management/entities/profile.rb new file mode 100644 index 0000000..4dbc44e --- /dev/null +++ b/app/api/v2/management/entities/profile.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +module API::V2::Management + module Entities + class Profile < API::V2::Entities::Profile + expose :last_name, + documentation: { + type: 'String', + desc: 'Last name' + } + + expose :dob, + documentation: { + type: 'Date', + desc: 'Birth date' + } + end + end +end diff --git a/app/api/v2/management/entities/user_with_kyc.rb b/app/api/v2/management/entities/user_with_kyc.rb new file mode 100644 index 0000000..082d702 --- /dev/null +++ b/app/api/v2/management/entities/user_with_kyc.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +module API::V2::Management + module Entities + class UserWithKYC < API::V2::Entities::UserWithKYC + expose :profiles, using: Entities::Profile + expose :phones, using: Entities::Phone + expose :documents, using: Entities::Document + end + end +end diff --git a/app/api/v2/management/entities/user_with_profile.rb b/app/api/v2/management/entities/user_with_profile.rb new file mode 100644 index 0000000..fdbde39 --- /dev/null +++ b/app/api/v2/management/entities/user_with_profile.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +module API::V2::Management + module Entities + class UserWithProfile < API::V2::Entities::UserWithProfile + expose :profiles, using: Entities::Profile + end + end +end diff --git a/app/api/v2/management/exceptions/authentication.rb b/app/api/v2/management/exceptions/authentication.rb new file mode 100644 index 0000000..a9cf1e6 --- /dev/null +++ b/app/api/v2/management/exceptions/authentication.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +module API::V2 + module Management + module Exceptions + class Authentication < Base + def status + @options.fetch(:status, 401) + end + end + end + end + end diff --git a/app/api/v2/management/exceptions/base.rb b/app/api/v2/management/exceptions/base.rb new file mode 100644 index 0000000..55494f7 --- /dev/null +++ b/app/api/v2/management/exceptions/base.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +module API::V2 + module Management + module Exceptions + class Base < StandardError + def initialize(message:, **options) + @options = options + super(message) + end + + def headers + @options.fetch(:headers, {}) + end + + def status + @options.fetch(:status) + end + end + end + end +end diff --git a/app/api/v2/management/jwt_authentication_middleware.rb b/app/api/v2/management/jwt_authentication_middleware.rb new file mode 100644 index 0000000..1d36ff1 --- /dev/null +++ b/app/api/v2/management/jwt_authentication_middleware.rb @@ -0,0 +1,93 @@ +# frozen_string_literal: true + +require 'stringio' + +module API::V2 + module Management + class JWTAuthenticationMiddleware < Grape::Middleware::Base + extend Memoist + mattr_accessor :security_configuration + + def before + return if request.path == '/api/v2/management/swagger' + + check_request_method! + check_query_parameters! + check_content_type! + payload = check_jwt!(jwt) + + env['rack.input'] = StringIO.new(payload.fetch(:data, {}).to_json) + end + + private + + def request + Grape::Request.new(env) + end + memoize :request + + def jwt + JSON.parse(request.body.read) + rescue StandardError => e + raise Exceptions::Authentication, \ + message: 'Couldn\'t parse JWT.', + debug_message: e.inspect, + status: 400 + end + memoize :jwt + + def check_request_method! + return if request.post? || request.put? + + raise Exceptions::Authentication, \ + message: 'Only POST and PUT verbs are allowed.', + status: 405 + end + + def check_query_parameters! + return if request.GET.empty? + + raise Exceptions::Authentication, \ + message: 'Query parameters are not allowed.', + status: 400 + end + + def check_content_type! + return if request.content_type == 'application/json' + + raise Exceptions::Authentication, \ + message: 'Only JSON body is accepted.', + status: 400 + end + + def check_jwt!(jwt) + begin + scope = security_configuration.fetch(:scopes).fetch(security_scope) + keychain = security_configuration + .fetch(:keychain) + .slice(*scope.fetch(:permitted_signers)) + .each_with_object({}) { |(k, v), memo| memo[k] = v.fetch(:value) } + result = JWT::Multisig.verify_jwt(jwt, keychain, security_configuration.fetch(:jwt, {})) + rescue StandardError => e + Rails.logger.error "ManagementAPI check_jwt error: #{e.inspect}" + raise Exceptions::Authentication, \ + message: 'Failed to verify JWT.', + debug_message: e.inspect, + status: 401 + end + + unless (scope.fetch(:mandatory_signers) - result[:verified]).empty? + raise Exceptions::Authentication, \ + message: 'Not enough signatures for the action.', + status: 401 + end + + result[:payload] + end + + def security_scope + request.env['api.endpoint'].options.fetch(:route_options).fetch(:scope) + end + end + end +end diff --git a/app/api/v2/management/labels.rb b/app/api/v2/management/labels.rb new file mode 100644 index 0000000..1a101de --- /dev/null +++ b/app/api/v2/management/labels.rb @@ -0,0 +1,132 @@ +# frozen_string_literal: true + +module API::V2 + module Management + # Labels-related API + class Labels < Grape::API + helpers ::API::V2::NamedParams + + helpers do + def user + @user ||= User.find_by!(uid: params[:user_uid]) + end + + def permitted_search_params(params) + params.slice(:key, :value, :from, :to, :range, :scope) + end + end + + desc 'Label related routes' + resource :labels do + desc 'Get all labels assigned to users' do + @settings[:scope] = :read_users + success API::V2::Entities::User + end + params do + requires :key, type: String, allow_blank: false, desc: 'Label key.' + optional :value, type: String, allow_blank: false, desc: 'Label value.' + optional :scope, type: String, allow_blank: false, desc: 'Label scope.' + optional :extended, + type: { value: Boolean, message: 'Non boolean extended value' }, + default: false, + desc: 'When true endpoint returns full information about users' + optional :range, + type: String, + values: { value: ->(p) { %w[created updated].include?(p) }, message: 'Invalid range' }, + default: 'created' + + use :pagination_filters + end + post '/filter/users' do + entity = params[:extended] ? API::V2::Entities::UserWithProfile : API::V2::Entities::User + users = API::V2::Queries::UserWithLabelFilter.new(User.all).call(permitted_search_params(params)) + + present paginate(users), with: entity + + status 200 + end + + desc 'Get user collection filtered on label attributes' do + @settings[:scope] = :read_labels + success API::V2::Entities::AdminLabelView + end + params do + requires :user_uid, type: String, allow_blank: false, desc: 'User uid' + end + post '/list' do + present user.labels, with: API::V2::Entities::AdminLabelView + end + + desc "Create a label with 'private' scope and assigns to users" do + @settings[:scope] = :write_labels + success API::V2::Entities::Label + end + params do + requires :user_uid, type: String, allow_blank: false, desc: 'User uid' + requires :key, type: String, allow_blank: false, desc: 'Label key.' + requires :value, type: String, allow_blank: false, desc: 'Label value.' + optional :description, type: String, allow_blank: false, desc: 'Label desc.' + end + post do + label = user.labels.create(key: params[:key], + value: params[:value], + description: params[:description], + scope: 'private') + if label.errors.any? + error!(label.errors.as_json(full_messages: true), 422) + end + + present label, with: API::V2::Entities::Label + end + + desc "Update a label with 'private' scope" do + @settings[:scope] = :write_labels + success API::V2::Entities::Label + end + params do + requires :user_uid, type: String, allow_blank: false, desc: 'User uid' + requires :key, type: String, allow_blank: false, desc: 'Label key.' + requires :value, type: String, allow_blank: false, desc: 'Label value.' + optional :description, type: String, allow_blank: false, desc: 'Label desc.' + optional :replace, type: Boolean, default: true, desc: 'When true label will be created if not exist' + end + put do + label = user.labels.find_by(key: params[:key], scope: 'private') + + if label.nil? + if params[:replace] + label = Label.create( + user_id: user.id, + key: params[:key], + value: params[:value], + description: params[:description], + scope: params[:scope] || 'private' + ) + else + error!({ error: 'label doesnt exist' }, 404) + end + else + label.update({ value: params[:value], description: params[:description] }.compact) + end + + error!(label.errors.as_json(full_messages: true), 422) if label.errors.any? + + present label, with: API::V2::Entities::Label + end + + desc "Delete a label with 'private' scope" do + @settings[:scope] = :write_labels + end + params do + requires :user_uid, type: String, allow_blank: false, desc: 'User uid' + requires :key, type: String, allow_blank: false, desc: 'Label key.' + end + post '/delete' do + user.labels.find_by!(key: params[:key], scope: 'private').destroy + + status 204 + end + end + end + end +end diff --git a/app/api/v2/management/otp.rb b/app/api/v2/management/otp.rb new file mode 100644 index 0000000..d19941e --- /dev/null +++ b/app/api/v2/management/otp.rb @@ -0,0 +1,40 @@ +# frozen_string_literal: true + +module API + module V2 + module Management + class Otp < Grape::API + helpers do + def sign_request(jwt) + JWT::Multisig.add_jws(jwt, :barong, Barong::App.config.keystore.private_key, 'RS256') + rescue StandardError => e + error!("JWT is invalid by the reason \"#{e.message}\"", 422) + end + end + + desc 'OTP related routes' + resource :otp do + desc 'Sign request with barong signature' do + @settings[:scope] = :otp_sign + end + params do + requires :user_uid, type: String, allow_blank: false, desc: 'Account UID' + requires :otp_code, type: String, allow_blank: false, desc: 'Code from Google Authenticator' + requires :jwt, type: Hash, allow_blank: false, desc: 'RFC 7516 jwt with applogic signature' + end + post '/sign' do + declared_params = declared(params) + user = User.active.find_by!(uid: declared_params[:user_uid]) + error!('Account has not enabled 2FA', 422) unless user.otp + + unless TOTPService.validate?(user.uid, declared_params[:otp_code]) + error!('OTP code is invalid', 422) + end + + sign_request(declared_params[:jwt]) + end + end + end + end + end +end diff --git a/app/api/v2/management/phones.rb b/app/api/v2/management/phones.rb new file mode 100644 index 0000000..f1dcce6 --- /dev/null +++ b/app/api/v2/management/phones.rb @@ -0,0 +1,74 @@ +# frozen_string_literal: true + +module API::V2 + module Management + class Phones < Grape::API + helpers do + def validate_phone!(phone_number) + error!('management.phone.invalid_num', 400) unless Phone.valid?(phone_number) + error!('management.phone.number_exist', 400) if Phone.verified.find_by_number(phone_number) + end + end + + desc 'Phones related routes' + resource :phones do + + desc 'Get user phone numbers' do + @settings[:scope] = :read_phones + success API::V2::Management::Entities::Phone + end + params do + requires :uid, type: String, desc: 'User uid', allow_blank: false + end + post '/get' do + user = User.find_by(uid: params[:uid]) + error!('user.doesnt_exist', 422) unless user + + present user.phones, with: API::V2::Management::Entities::Phone + end + + desc 'Create phone number for user' do + @settings[:scope] = :write_phones + success API::V2::Management::Entities::Phone + end + params do + requires :uid, type: String, desc: 'User uid', allow_blank: false + requires :number, type: String, desc: 'User phone number', allow_blank: false + end + post do + user = User.find_by(uid: params[:uid]) + error!('user.doesnt_exist', 422) unless user + + phone_number = Phone.international(params[:number]) + validate_phone!(phone_number) + + error!('management.phone.exists', 400) if user.phones.find_by_number(phone_number) + + phone = user.phones.create(number: params[:number], validated_at: Time.now) + error!(phone.errors.full_messages, 422) if phone.errors.any? + + present phone, with: API::V2::Management::Entities::Phone + end + + desc 'Delete phone number for user' do + @settings[:scope] = :write_phones + success API::V2::Management::Entities::Phone + end + params do + requires :uid, type: String, desc: 'User uid', allow_blank: false + requires :number, type: String, desc: 'User phone number', allow_blank: false + end + post '/delete' do + user = User.find_by(uid: params[:uid]) + error!('user.doesnt_exist', 422) unless user + + phone_number = Phone.international(params[:number]) + phone = user.phones.find_by_number(phone_number) if phone_number.present? + error!('management.phone.doesnt_exists', 422) unless phone + + present phone.destroy, with: API::V2::Management::Entities::Phone + end + end + end + end +end diff --git a/app/api/v2/management/profiles.rb b/app/api/v2/management/profiles.rb new file mode 100644 index 0000000..0b9100f --- /dev/null +++ b/app/api/v2/management/profiles.rb @@ -0,0 +1,47 @@ +# frozen_string_literal: true + +module API::V2 + module Management + # Profiles server-to-server API + class Profiles < Grape::API + desc 'Profiles related routes' + resource :profiles do + helpers do + def profile_param_keys + %w[first_name last_name dob address + postcode city country state metadata].freeze + end + end + + desc 'Imports a profile for user' do + @settings[:scope] = :write_users + success API::V2::Management::Entities::UserWithProfile + end + + params do + requires :uid, type: String, desc: 'User Uid', allow_blank: false + optional :first_name, type: String, desc: 'First Name', allow_blank: false + optional :last_name, type: String, desc: 'Last Name', allow_blank: false + optional :dob, type: Date, desc: 'Birth date', allow_blank: false + optional :address, type: String, desc: 'Address', allow_blank: false + optional :postcode, type: String, desc: 'Postcode', allow_blank: false + optional :city, type: String, desc: 'City', allow_blank: false + optional :country, type: String, desc: 'Country', allow_blank: false + optional :state, type: String, desc: 'State', allow_blank: false + optional :metadata, type: String, desc: 'Metadata', allow_blank: false + end + + post do + user = User.find_by(uid: params[:uid]) + error! 'user.doesnt_exist', 422 unless user + + profile_params = params.slice(*profile_param_keys) + profile = Profile.new(profile_params.merge(user_id: user.id)) + error!(profile.errors.full_messages, 422) unless profile.save + + present user, with: API::V2::Management::Entities::UserWithProfile + end + end + end + end +end diff --git a/app/api/v2/management/service_accounts.rb b/app/api/v2/management/service_accounts.rb new file mode 100644 index 0000000..6aa51a9 --- /dev/null +++ b/app/api/v2/management/service_accounts.rb @@ -0,0 +1,113 @@ +# frozen_string_literal: true + +module API::V2 + module Management + # ServiceAccounts server-to-server API + class ServiceAccounts < Grape::API + helpers ::API::V2::NamedParams + + desc 'ServiceAccounts related routes' + resource :service_accounts do + + desc 'Get specific service_account information' do + @settings[:scope] = :read_service_accounts + success API::V2::Entities::ServiceAccounts + end + params do + optional :uid, type: String, allow_blank: false, desc: 'service_account uid' + optional :email, type: String, allow_blank: false, desc: 'service_account email' + exactly_one_of :uid, :email + end + post '/get' do + declared_params = declared(params, include_missing: false) + + service_acc = ServiceAccount.find_by!(declared_params) + error!('Service account doesnt exist', 422) unless service_acc + + present service_acc, with: API::V2::Entities::ServiceAccounts + status 200 + end + + desc 'Get service_accounts as a paginated collection' do + @settings[:scope] = :read_service_accounts + success API::V2::Entities::ServiceAccounts + end + params do + use :pagination_filters + optional :owner_uid, type: String, allow_blank: false, desc: 'owner uid' + optional :owner_email, type: String, allow_blank: false, desc: 'owner email' + end + post '/list' do + owner = User.find_by(uid: params[:owner_uid]) || User.find_by(email: params[:owner_email]) if params[:owner_uid] || params[:owner_email] + service_accs = owner ? owner.service_accounts : ServiceAccount.all + + service_accs.tap { |q| present paginate(q), with: API::V2::Entities::ServiceAccounts } + status 200 + end + + desc 'Create service_account' do + @settings[:scope] = :write_service_accounts + success API::V2::Entities::ServiceAccounts + end + params do + requires :service_account_role, type: String, allow_blank: false, desc: 'service_account role' + optional :owner_uid, type: String, allow_blank: false, desc: 'owner uid' + optional :service_account_uid, type: String, allow_blank: false, desc: 'service_account uid' + optional :service_account_email, type: String, allow_blank: false, desc: 'service_account email' + end + + post '/create' do + owner = User.find_by(uid: params[:owner_uid]) + error!('User doesnt exist', 422) unless owner + + s_params = { email: params[:service_account_email], uid: params[:service_account_uid], role: params[:service_account_role] }.compact + service_acc = ServiceAccount.new(s_params.merge(user: owner)) + error!(service_acc.errors.full_messages, 422) unless service_acc.save + + present service_acc, with: API::V2::Entities::ServiceAccounts + status 201 + end + + desc 'Update service_account' do + @settings[:scope] = :write_service_accounts + success API::V2::Entities::ServiceAccounts + end + params do + requires :uid, type: String, allow_blank: false, desc: 'service_account uid' + optional :owner_uid, type: String, allow_blank: false, desc: 'service_account owner uid' + end + post '/update' do + service_acc = ServiceAccount.find_by(uid: params[:uid]) + error!('Service account doesnt exist', 422) unless service_acc + + owner = User.find_by(uid: params[:owner_uid]) + s_params = { owner_id: owner&.id }.compact + code_error!(service_acc.errors.details, 422) unless service_acc.update(s_params) + + present service_acc, with: API::V2::Entities::ServiceAccounts + end + + desc 'Delete specific service_account' do + @settings[:scope] = :write_service_accounts + success API::V2::Entities::ServiceAccounts + end + params do + requires :uid, type: String, allow_blank: false, desc: 'service_account uid' + end + post '/delete' do + declared_params = declared(params, include_missing: false) + + service_acc = ServiceAccount.find_by!(declared_params) + error!('Service account doesnt exist', 422) unless service_acc + + unless service_acc.update(state: 'disabled') + code_error!(service_acc.errors.details, 422) + end + + present service_acc, with: API::V2::Entities::ServiceAccounts + status 200 + end + end + end + end +end diff --git a/app/api/v2/management/tools.rb b/app/api/v2/management/tools.rb new file mode 100644 index 0000000..5f3d818 --- /dev/null +++ b/app/api/v2/management/tools.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +module API::V2 + module Management + class Tools < Grape::API + desc 'Returns server time in seconds since Unix epoch.' do + @settings[:scope] = :tools + end + post '/timestamp' do + body timestamp: Time.now.to_i + status 200 + end + end + end +end diff --git a/app/api/v2/management/users.rb b/app/api/v2/management/users.rb new file mode 100644 index 0000000..47294ac --- /dev/null +++ b/app/api/v2/management/users.rb @@ -0,0 +1,168 @@ +# frozen_string_literal: true + +module API::V2 + module Management + class Users < Grape::API + helpers ::API::V2::NamedParams + helpers do + def profile_param_keys + %w[first_name last_name dob address + postcode city country state].freeze + end + + def create_user(user_params) + user = User.new(user_params) + user.send :assign_uid + user.save(validate: false) + error!(user.errors.full_messages3, 422) unless user.persisted? + user + end + + def all_profile_fields?(params) + profile_param_keys.all? { |key| params[key].present? } + end + + def create_phone(user:, number:) + return if number.blank? + + phone = user.phones.create(number: number) + error!(phone.errors.full_messages, 422) unless phone.persisted? + phone.update(validated_at: Time.current) + end + end + + desc 'Users related routes' + resource :users do + desc 'Get users and profile information' do + @settings[:scope] = :read_users + success API::V2::Management::Entities::UserWithKYC + end + params do + optional :uid, type: String, allow_blank: false, desc: 'User uid' + optional :email, type: String, allow_blank: false, desc: 'User email' + optional :phone_num, type: String, allow_blank: false, desc: 'User phone number' + exactly_one_of :uid, :email, :phone_num + end + post '/get' do + declared_params = declared(params, include_missing: false) + + if declared_params.key?(:phone_num) + user = Phone.find_by_number!(declared_params[:phone_num]).user + present user, with: API::V2::Management::Entities::UserWithKYC + return status 201 + end + + user = User.find_by!(declared_params) + present user, with: API::V2::Management::Entities::UserWithKYC + end + + desc 'Returns array of users as collection', + security: [{ "BearerToken": [] }], + failure: [ + { code: 401, message: 'Invalid bearer token' } + ] do + @settings[:scope] = :read_users + success API::V2::Entities::User + end + params do + optional :extended, + type: { value: Boolean, message: 'Non boolean extended value' }, + default: false, + desc: 'When true endpoint returns full information about users' + optional :range, + type: String, + values: { value: -> (p){ %w[created updated].include?(p) }, message: 'Non positive page' }, + default: 'created' + use :timeperiod_filters + use :pagination_filters + end + post '/list' do + entity = params[:extended] ? API::V2::Management::Entities::UserWithProfile : API::V2::Entities::User + users = API::V2::Queries::UserFilter.new(User.all).call(params) + users.tap { |q| present paginate(q), with: entity } + status 200 + end + + desc 'Creates new user' do + @settings[:scope] = :write_users + success API::V2::Management::Entities::UserWithProfile + end + params do + requires :email, type: String, desc: 'User Email', allow_blank: false + requires :password, type: String, desc: 'User Password', allow_blank: false + optional :referral_uid, type: String, desc: 'Referral uid', allow_blank: false + end + post do + referral = User.find_by_uid(params[:referral_uid]).id if params[:referral_uid] + + user = User.create({ email: params[:email], password: params[:password], referral_id: referral }.compact ) + + error!(user.errors.full_messages, 422) unless user.persisted? + present user, with: API::V2::Management::Entities::UserWithProfile + end + + desc 'Updates role and data fields of existing user' do + @settings[:scope] = :write_users + success API::V2::Management::Entities::UserWithProfile + end + params do + requires :uid, type: String, desc: 'User Uid', allow_blank: false + optional :role, type: String, desc: 'User Role', allow_blank: false + optional :data, type: String, desc: 'Any additional key:value pairs in json format', allow_blank: false + at_least_one_of :role, :data + end + post '/update' do + user = User.find_by_uid(params[:uid]) + error! 'user.doesnt_exist', 422 unless user + + u_params = { data: params[:data], role: params[:role] }.compact + error!(user.errors.full_messages, 422) unless user.update(u_params) + + present user, with: API::V2::Management::Entities::UserWithProfile + end + + desc 'Imports an existing user' do + @settings[:scope] = :write_users + success API::V2::Management::Entities::UserWithProfile + end + params do + requires :email, type: String, + desc: 'User Email', + allow_blank: false + requires :password_digest, type: String, + desc: 'User Password Hash', + allow_blank: false + optional :referral_uid, type: String, desc: 'Referral uid', allow_blank: false + optional :phone, type: String, allow_blank: false, desc: 'Phone' + optional :first_name, type: String, allow_blank: false, desc: 'First Name' + optional :last_name, type: String, allow_blank: false, desc: 'Last Name' + optional :dob, type: Date, desc: 'Birth date', allow_blank: false + optional :address, type: String, allow_blank: false, desc: 'Address' + optional :postcode, type: String, allow_blank: false, desc: 'Postcode' + optional :city, type: String, allow_blank: false, desc: 'City' + optional :country, type: String, allow_blank: false, desc: 'Country' + optional :state, type: String, allow_blank: false, desc: 'State' + end + post '/import' do + if User.find_by(email: params[:email]).present? + error! 'User already exists by this email', 422 + end + + referral = User.find_by_uid(params[:referral_uid]).id if params[:referral_uid] + user = create_user({ + email: params[:email], + password_digest: params[:password_digest], + referral_id: referral + }.compact) + create_phone(user: user, number: params[:phone]) + + profile_params = params.slice(*profile_param_keys) + profile = Profile.new(profile_params.merge(user_id: user.id)) + error!(profile.errors.full_messages, 422) unless profile.save + + present user, with: API::V2::Management::Entities::UserWithProfile + end + end + end + end +end diff --git a/app/api/v2/named_params.rb b/app/api/v2/named_params.rb new file mode 100644 index 0000000..2ed43e7 --- /dev/null +++ b/app/api/v2/named_params.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +module API + module V2 + module NamedParams + extend ::Grape::API::Helpers + + params :pagination_filters do + optional :page, + type: { value: Integer, message: 'non_integer_page' }, + values: { value: -> (p){ p.try(:positive?) }, message: 'non_positive_page'}, + default: 1, + desc: 'Page number (defaults to 1).' + optional :limit, + type: { value: Integer, message: 'non_integer_limit' }, + values: { value: 1..100, message: 'invalid_limit' }, + default: 100, + desc: 'Number of users per page (defaults to 100, maximum is 100).' + end + + params :timeperiod_filters do + optional :from, + type: Integer, + desc: 'An integer represents the seconds elapsed since Unix epoch.'\ + 'If set, only records FROM the time will be retrieved.' + optional :to, + type: Integer, + desc: 'An integer represents the seconds elapsed since Unix epoch.'\ + 'If set, only records BEFORE the time will be retrieved.' + end + end + end +end diff --git a/app/api/v2/public/base.rb b/app/api/v2/public/base.rb new file mode 100644 index 0000000..6f0bfb2 --- /dev/null +++ b/app/api/v2/public/base.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +module API + module V2 + module Public + class Base < Grape::API + helpers API::V2::Identity::Utils + + do_not_route_options! + + mount Public::General + end + end + end +end diff --git a/app/api/v2/public/general.rb b/app/api/v2/public/general.rb new file mode 100644 index 0000000..7c479e9 --- /dev/null +++ b/app/api/v2/public/general.rb @@ -0,0 +1,63 @@ +# frozen_string_literal: true + +module API::V2 + module Public + class General < Grape::API + + desc 'KYC callback' + post '/kyc' do + return_status = KycService.kycaid_callback(params) + status return_status + end + + desc 'Password strength testing' + params do + requires :password, type: String, desc: 'User password' + end + post '/password/validate' do + { entropy: PasswordStrengthChecker.calculate_entropy(params[:password]) } + end + + desc 'Test connectivity' + get '/ping' do + { ping: 'pong' } + end + + desc 'Get server current unix timestamp.' + get '/time' do + ts = ::Time.now.to_i + { time: ts } + end + + desc 'Get barong version' + get '/version' do + { + git_tag: Barong::Application::GIT_TAG, + git_sha: Barong::Application::GIT_SHA, + build_date: DateTime.rfc3339(Barong::Application::BUILD_DATE), + version: Barong::Application::VERSION + } + end + + desc 'Get barong configurations' + get '/configs' do + { + session_expire_time: Barong::App.config.session_expire_time, + captcha_type: Barong::App.config.captcha, + captcha_id: (Barong::App.config.recaptcha_site_key if Barong::App.config.captcha == 'recaptcha'), + phone_verification_type: Barong::App.config.phone_verification, + password_min_entropy: Barong::App.config.password_min_entropy, + password_regexp: Barong::App.config.password_regexp + }.compact + end + + desc 'Get auth0 configuration' + get '/configs/auth0' do + { + auth0_domain: Barong::App.config.auth0_domain, + auth0_client_id: Barong::App.config.auth0_client_id + }.compact + end + end + end +end diff --git a/app/api/v2/queries/activity_filter.rb b/app/api/v2/queries/activity_filter.rb new file mode 100644 index 0000000..3fca2e5 --- /dev/null +++ b/app/api/v2/queries/activity_filter.rb @@ -0,0 +1,66 @@ +# frozen_string_literal: true + +# queries helping module +module API::V2::Queries + class ActivityFilter + attr_accessor :initial_scope + + # initialize query + def initialize(initial_scope) + @initial_scope = initial_scope + end + + # returns query with with all applied filters + def call(params) + params[:with_user] ? @initial_scope = @initial_scope.joins(:user) : @initial_scope + + scoped = filter_by_date(@initial_scope, params[:from], params[:to]) + scoped = filter_by_topic(scoped, params[:topic]) + scoped = filter_by_action(scoped, params[:action]) + scoped = filter_by_result(scoped, params[:result]) + scoped = filter_by_uid(scoped, params[:uid]) + scoped = filter_by_email(scoped, params[:email]) + scoped = filter_by_target(scoped, params[:target_uid]) + scoped = scoped.order('activities.id' => 'DESC') if params[:ordered] + scoped + end + + private + + # adds where(activities.created_at > from and activities.created_at < to) to query + def filter_by_date(scoped, from = nil, to = nil) + updated_scope = from ? scoped.where('activities.created_at >= ?', Time.at(from.to_i)) : scoped + to ? updated_scope.where('activities.created_at <= ?', Time.at(to.to_i)) : updated_scope + end + + # adds where(activities.topic = topic) to query + def filter_by_topic(scoped, topic = nil) + topic ? scoped.where(activities: { topic: topic }) : scoped + end + + # adds where(activities.action = action) to query + def filter_by_action(scoped, action = nil) + action ? scoped.where(activities: { action: action }) : scoped + end + + # adds where(activities.result = result) to query + def filter_by_result(scoped, result = nil) + result ? scoped.where(activities: { result: result }) : scoped + end + + # adds where(users.uid = uid) to query + def filter_by_uid(scoped, uid = nil) + uid ? scoped.where(users: { uid: uid }) : scoped + end + + # adds where(users.email = email) to query + def filter_by_email(scoped, email = nil) + email ? scoped.where(users: { email: email }) : scoped + end + + # adds where(activities.target_uid = target_uid) to query + def filter_by_target(scoped, target_uid = nil) + target_uid ? scoped.where(activities: { target_uid: target_uid }) : scoped + end + end +end diff --git a/app/api/v2/queries/user_filter.rb b/app/api/v2/queries/user_filter.rb new file mode 100644 index 0000000..a8a4edf --- /dev/null +++ b/app/api/v2/queries/user_filter.rb @@ -0,0 +1,64 @@ +# queries helping module +module API::V2::Queries + class UserFilter + attr_accessor :initial_scope + + # initialize query to get User.all + def initialize(initial_scope) + @initial_scope = initial_scope.left_outer_joins(:profiles) + end + + # returns query with with all applied filters + def call(params) + scoped = filter_by_date(initial_scope, params[:range], params[:from], params[:to]) + scoped = filter_by_uid(scoped, params[:uid]) + scoped = filter_by_email(scoped, params[:email]) + scoped = filter_by_role(scoped, params[:role]) + scoped = filter_by_country(scoped, params[:country]) + scoped = filter_by_level(scoped, params[:level]) + scoped = filter_by_state(scoped, params[:state]) + scoped + end + + private + + # adds where(users.[created, updated]_at > from and users.[created, updated]_at < to) to query + def filter_by_date(scoped, range = 'created', from = nil, to = nil) + newer_than_sql = "users.#{range}_at >= ?" + older_than_sql = "users.#{range}_at <= ?" + + updated_scope = from ? scoped.where(newer_than_sql, Time.at(from.to_i)) : scoped + to ? updated_scope.where(older_than_sql, Time.at(to.to_i)) : updated_scope + end + + # adds where(users.uid = uid) to query + def filter_by_uid(scoped, uid = nil) + uid ? scoped.where(users: { uid: uid }) : scoped + end + + # adds where(users.email = email) to query + def filter_by_email(scoped, email = nil) + email ? scoped.where(users: { email: email }) : scoped + end + + # adds where(users.role = role) to query + def filter_by_role(scoped, role = nil) + role ? scoped.where(users: { role: role }) : scoped + end + + # adds where(users.level = level) to query + def filter_by_level(scoped, level = nil) + level ? scoped.where(users: { level: level }) : scoped + end + + # adds where(users.state = state) to query + def filter_by_state(scoped, state = nil) + state ? scoped.where(users: { state: state }) : scoped + end + + # adds where(users.country = country) to query + def filter_by_country(scoped, country = nil) + country ? scoped.where(profiles: { country: country }) : scoped + end + end +end diff --git a/app/api/v2/queries/user_with_label_filter.rb b/app/api/v2/queries/user_with_label_filter.rb new file mode 100644 index 0000000..b81ff9d --- /dev/null +++ b/app/api/v2/queries/user_with_label_filter.rb @@ -0,0 +1,47 @@ +# queries helping module +module API::V2::Queries + class UserWithLabelFilter + attr_accessor :initial_scope + + # initialize query to get User.all + def initialize(initial_scope) + @initial_scope = initial_scope.left_outer_joins(:labels) + end + + # returns query with with all applied filters + def call(params) + scoped = filter_by_date(initial_scope, params[:range], params[:from], params[:to]) + scoped = filter_by_key(scoped, params[:key]) + scoped = filter_by_value(scoped, params[:value]) + scoped = filter_by_scope(scoped, params[:scope]) + + scoped + end + + private + + # adds where(labels.[created, updated]_at > from and labels.[created, updated]_at < to) to query + def filter_by_date(scoped, range = 'created', from = nil, to = nil) + newer_than_sql = "labels.#{range}_at >= ?" + older_than_sql = "labels.#{range}_at <= ?" + + updated_scope = from ? scoped.where(newer_than_sql, Time.at(from.to_i)) : scoped + to ? updated_scope.where(older_than_sql, Time.at(to.to_i)) : updated_scope + end + + # adds where(labels.key = key) to query + def filter_by_key(scoped, key = nil) + key ? scoped.where(labels: { key: key }) : scoped + end + + # adds where(labels.value = value) to query + def filter_by_value(scoped, value = nil) + value ? scoped.where(labels: { value: value }) : scoped + end + + # adds where(labels.scope = scope) to query + def filter_by_scope(scoped, scope = nil) + scope ? scoped.where(labels: { scope: scope }) : scoped + end + end +end diff --git a/app/api/v2/resource/addresses.rb b/app/api/v2/resource/addresses.rb new file mode 100644 index 0000000..653d185 --- /dev/null +++ b/app/api/v2/resource/addresses.rb @@ -0,0 +1,50 @@ +# frozen_string_literal: true + +module API::V2 + module Resource + # Addresses API + class Addresses < Grape::API + desc 'Documents related routes' + resource :addresses do + desc 'Upload a new address approval document for current user(this is what ui using now)', + success: { code: 201, message: 'New address approval document was uploaded' }, + failure: [ + { code: 400, message: 'Required params are empty' }, + { code: 401, message: 'Invalid bearer token' }, + { code: 422, message: 'Validation errors' } + ] + params do + requires :country, + type: String, + allow_blank: false, + desc: 'country name' + requires :address, + type: String, + allow_blank: false, + desc: 'address' + requires :upload, + desc: 'Array of Rack::Multipart::UploadedFile' + requires :city, + allow_blank: true, + desc: 'city name' + requires :postcode, type: String, desc: 'Any additional key: value pairs in json string format' + end + + post do + identificator = SecureRandom.hex(16) + params[:upload].each do |file| + doc = current_user.documents.new(upload: file, identificator: identificator, doc_type: 'Poa', doc_category: 'front_side') + + code_error!(doc.errors.details, 422) unless doc.save + end + + status 201 + + rescue Excon::Error => e + Rails.logger.error e + error!('Connection error', 422) + end + end + end + end +end diff --git a/app/api/v2/resource/api_keys.rb b/app/api/v2/resource/api_keys.rb new file mode 100644 index 0000000..12d8d66 --- /dev/null +++ b/app/api/v2/resource/api_keys.rb @@ -0,0 +1,159 @@ +# frozen_string_literal: true + +module API::V2 + module Resource + # Responsible for CRUD for api keys + class APIKeys < Grape::API + helpers ::API::V2::NamedParams + helpers do + def skip_api_key_2fa? + ENV['BARONG_SKIP_API_KEY_2FA'] == 'true' + end + + def otp_protected! + return if skip_api_key_2fa? + + unless current_user.otp + error!({ errors: ['resource.api_key.2fa_disabled'] }, 400) + end + error!({ errors: ['resource.api_key.missing_totp'] }, 422) unless params[:totp_code].present? + + return if TOTPService.validate?(current_user.uid, params[:totp_code]) + + error!({ errors: ['resource.api_key.invalid_totp'] }, 422) + end + end + + resource :api_keys do + desc 'Create an api key', + failure: [ + { code: 400, message: 'Required params are empty' }, + { code: 401, message: 'Invalid bearer token' }, + { code: 422, message: 'Validation errors' } + ], + success: Entities::APIKey + params do + requires :algorithm, + type: String, + allow_blank: false, + desc: 'API key algorithm' + optional :scope, + type: String, + allow_blank: false, + desc: 'Comma separated scopes' + optional :totp_code, + type: String, + allow_blank: false, + desc: 'Code from Google Authenticator' + end + post do + otp_protected! + declared_params = declared(params, include_missing: false) + .except(:totp_code) + .merge(scope: params[:scope]&.split(',')) + .merge(secret: SecureRandom.hex(16)) + + api_key = current_user.api_keys.new(declared_params) + + APIKey.transaction do + raise ActiveRecord::Rollback unless api_key.save + rescue Vault::VaultError + api_key.errors.add(:api_key, 'could_not_save_secret') + raise ActiveRecord::Rollback + end + + if api_key.errors.any? + code_error!(api_key.errors.details, 422) + end + + present api_key, with: Entities::APIKey + end + + desc 'Updates an api key', + failure: [ + { code: 400, message: 'Required params are empty' }, + { code: 401, message: 'Invalid bearer token' }, + { code: 404, message: 'Record is not found' }, + { code: 422, message: 'Validation errors' } + ], + success: Entities::APIKey + params do + requires :kid, + type: String, + allow_blank: false, + desc: 'API key kid' + optional :scope, + type: String, + allow_blank: false, + desc: 'Comma separated scopes' + optional :state, + type: String, + allow_blank: false, + desc: 'State of API Key. "active" state means key is active and can be used for auth' + optional :totp_code, + type: String, + allow_blank: false, + desc: 'Code from Google Authenticator' + end + patch ':kid' do + otp_protected! + declared_params = declared(params, include_missing: false) + .except(:totp_code) + .merge(scope: params[:scope]&.split(',')) + api_key = current_user.api_keys.find_by!(kid: params[:kid]) + + unless api_key.update(declared_params) + code_error!(api_key.errors.details, 422) + end + + present api_key, with: Entities::APIKey, except: [:secret] + end + + desc 'Delete an api key', + success: { code: 204, message: 'Succefully deleted' }, + failure: [ + { code: 400, message: 'Required params are empty' }, + { code: 401, message: 'Invalid bearer token' }, + { code: 404, message: 'Record is not found' } + ] + params do + requires :kid, + type: String, + allow_blank: false, + desc: 'API key kid' + optional :totp_code, + type: String, + allow_blank: false, + desc: 'Code from Google Authenticator' + end + delete ':kid' do + otp_protected! + api_key = current_user.api_keys.find_by!(kid: params[:kid]) + api_key.destroy + status 204 + end + + desc 'List all api keys for current account.', + failure: [ + { code: 400, message: 'Require 2FA and totp code' }, + { code: 401, message: 'Invalid bearer token' } + ], + success: Entities::APIKey + params do + optional :ordering, + values: { value: -> (p){ %w[asc desc].include?(p) }, message: 'resource.api_key.invalid_ordering' }, + default: 'asc', + desc: 'If set, returned values will be sorted in specific order, defaults to \'asc\'.' + optional :order_by, + values: { value: -> (p){ APIKey.new.attributes.keys.include?(p) }, message: 'resource.api_key.invalid_attribute' }, + default: 'id', + desc: 'Name of the field, which result will be ordered by.' + use :pagination_filters + end + get do + current_user.api_keys.order(params[:order_by] => params[:ordering]).tap { |q| present paginate(q), with: Entities::APIKey, except: [:secret] } + end + end + end + end +end diff --git a/app/api/v2/resource/base.rb b/app/api/v2/resource/base.rb new file mode 100644 index 0000000..1726b69 --- /dev/null +++ b/app/api/v2/resource/base.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +require_dependency 'barong/middleware/jwt_authenticator' + +module API::V2 + module Resource + class Base < Grape::API + use Barong::Middleware::JWTAuthenticator, \ + pubkey: Rails.configuration.x.keystore.public_key + + helpers API::V2::Resource::Utils + + do_not_route_options! + + mount Resource::Addresses + mount Resource::Users + mount Resource::Labels + mount Resource::Profiles + mount Resource::Documents + mount Resource::Phones + mount Resource::Otp + mount Resource::APIKeys + mount Resource::DataStorage + mount Resource::ServiceAccounts + + add_swagger_documentation security_definitions: { + 'BearerToken': { + description: 'Bearer Token authentication', + type: 'basic', + name: 'Authorization', + in: 'header' + } + } + end + end +end diff --git a/app/api/v2/resource/data_storage.rb b/app/api/v2/resource/data_storage.rb new file mode 100644 index 0000000..36f5342 --- /dev/null +++ b/app/api/v2/resource/data_storage.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true + +module API + module V2 + module Resource + # data storage C functionality + class DataStorage < Grape::API + resource :data_storage do + desc 'Create data storage', + failure: [ + { code: 401, message: 'Invalid bearer token' }, + { code: 422, message: 'Validation errors' } + ], + success: { code: 201, message: 'Data Storage was created' } + params do + requires :title, + type: String, + allow_blank: false, + desc: 'Storage title' + requires :data, + type: String, + allow_blank: false, + desc: 'Storage data' + end + post do + declared_params = declared(params) + + data_storage = current_user.data_storages.new(declared_params) + + code_error!(data_storage.errors.details, 422) unless data_storage.save + + current_user.labels.create(key: data_storage.title, value: 'recorded', scope: 'private') + status 201 + end + end + end + end + end +end diff --git a/app/api/v2/resource/documents.rb b/app/api/v2/resource/documents.rb new file mode 100644 index 0000000..e490e0f --- /dev/null +++ b/app/api/v2/resource/documents.rb @@ -0,0 +1,78 @@ +# frozen_string_literal: true + +module API::V2 + module Resource + # Dpcuments API + class Documents < Grape::API + desc 'Documents related routes' + resource :documents do + desc 'Return current user documents list', + failure: [ + { code: 401, message: 'Invalid bearer token' } + ], + success: Entities::Document + get do + present current_user.documents, with: Entities::Document, only: %i[upload doc_type doc_number doc_expire] + end + + desc 'Upload a new document for current user', + success: { code: 201, message: 'Document is uploaded' }, + failure: [ + { code: 400, message: 'Required params are empty' }, + { code: 401, message: 'Invalid bearer token' }, + { code: 422, message: 'Validation errors' } + ] + params do + requires :doc_type, + type: String, + allow_blank: false, + desc: 'Document type' + requires :doc_number, + type: String, + allow_blank: false, + desc: 'Document number' + requires :upload, + desc: 'Array of Rack::Multipart::UploadedFile' + optional :doc_expire, + type: { value: Date, message: "resource.documents.expire_not_a_date" }, + allow_blank: true, + desc: 'Document expiration date' + optional :doc_category, + type: String, + values: { value: -> (p){ %w[front_side back_side selfie].include?(p) }, message: 'resource.documents.doc_category' }, + desc: 'Category of the submitted document - front/back/selfie etc.' + optional :identificator, type: String, desc: 'Identificator for documents to be supplied together' + optional :metadata, type: String, desc: 'Any additional key: value pairs in json string format' + end + + post do + if Barong::App.config.required_docs_expire + error!({ errors: ['resource.documents.invalid_format'] }, 422) unless /\A\d{4}\-\d{2}\-\d{2}\z/.match?(params[:doc_expire].to_s) + + error!({ errors: ['resource.documents.already_expired'] }, 422) if params[:doc_expire] < DateTime.now.to_date + end + + unless current_user.documents.count <= Barong::App.config.doc_num_limit + error!({ errors: ['resource.documents.limit_reached'] }, 400) + end + + unless current_user.documents.count + params[:upload].length <= Barong::App.config.doc_num_limit + error!({ errors: ['resource.documents.limit_will_be_reached'] }, 400) + end + params[:identificator] = SecureRandom.hex(16) unless params[:identificator] + + params[:upload].each do |file| + doc = current_user.documents.new(params.except(:upload).merge(upload: file)) + code_error!(doc.errors.details, 422) unless doc.save + end + + status 201 + + rescue Excon::Error => e + Rails.logger.error e + error!('Connection error', 422) + end + end + end + end +end diff --git a/app/api/v2/resource/labels.rb b/app/api/v2/resource/labels.rb new file mode 100644 index 0000000..f52a08a --- /dev/null +++ b/app/api/v2/resource/labels.rb @@ -0,0 +1,127 @@ +# frozen_string_literal: true + +module API + module V2 + module Resource + # Responsible for CRUD for labes + class Labels < Grape::API + resource :labels do + desc 'List all labels for current user.', + failure: [ + { code: 401, message: 'Invalid bearer token' } + ], + success: Entities::Label + params do + optional :ordering, + type: String, + values: { value: %w(asc desc) }, + default: 'asc', + desc: 'If set, returned labels sorted in specific order, default to "asc".' + end + get do + labels = current_user.labels.order(created_at: params[:ordering]) + present labels, with: Entities::Label + end + + desc 'Return a label by key.', + failure: [ + { code: 400, message: 'Required params are empty' }, + { code: 401, message: 'Invalid bearer token' }, + { code: 404, message: 'Record is not found' } + ], + success: Entities::Label + params do + requires :key, + type: String, + allow_blank: false, + desc: 'Label key.' + end + route_param :key do + get do + label = current_user.labels.find_by!(key: params[:key]) + present label, with: Entities::Label + end + end + + desc "Create a label with 'public' scope.", + failure: [ + { code: 400, message: 'Required params are empty' }, + { code: 401, message: 'Invalid bearer token' }, + { code: 422, message: 'Validation errors' } + ], + success: Entities::Label + params do + requires :key, + type: String, + allow_blank: false, + desc: 'Label key.' + requires :value, + type: String, + allow_blank: false, + desc: 'Label value.' + end + post do + label = + current_user.labels.new( + key: params[:key], + value: params[:value], + scope: 'public' + ) + if label.save + present label, with: Entities::Label + else + code_error!(label.errors.details, 422) + end + end + + desc "Update a label with 'public' scope.", + failure: [ + { code: 400, message: 'Required params are empty' }, + { code: 401, message: 'Invalid bearer token' }, + { code: 404, message: 'Record is not found' }, + { code: 422, message: 'Validation errors' } + ], + success: Entities::Label + params do + requires :key, + type: String, + allow_blank: false, + desc: 'Label key.' + requires :value, + type: String, + allow_blank: false, + desc: 'Label value.' + end + patch ':key' do + label = current_user.labels.find_by!(key: params[:key]) + return error!({ errors: ['resource.labels.private'] }, 400) if label.private? + + label.update(value: params[:value]) + present label, with: Entities::Label + end + + desc "Delete a label with 'public' scope.", + success: { code: 204, message: 'Succefully deleted' }, + failure: [ + { code: 400, message: 'Required params are empty' }, + { code: 401, message: 'Invalid bearer token' }, + { code: 404, message: 'Record is not found' } + ] + params do + requires :key, + type: String, + allow_blank: false, + desc: 'Label key.' + end + delete ':key' do + label = current_user.labels.find_by!(key: params[:key]) + return error!({ errors: ['resource.labels.private'] }, 400) if label.private? + + label.destroy + status 204 + end + end + end + end + end +end diff --git a/app/api/v2/resource/otp.rb b/app/api/v2/resource/otp.rb new file mode 100644 index 0000000..d0ebe51 --- /dev/null +++ b/app/api/v2/resource/otp.rb @@ -0,0 +1,220 @@ +# frozen_string_literal: true + +module API::V2 + module Resource + # TOTP functionality API + class Otp < Grape::API + helpers do + def otp_error!(options = {}) + options[:topic] = 'otp' + record_error!(options) + end + end + + resource :otp do + desc 'Generate qr code for 2FA (first step for enabling)', + failure: [ + { code: 400, message: '2FA has been enabled for this account' }, + { code: 401, message: 'Invalid bearer token' } + ], + success: { code: 200, message: 'QR code was generated' } + post '/generate_qrcode' do + if current_user.otp + otp_error!(reason: '2FA has been already enabled for this account', error_code: 400, + user: current_user.id, action: 'request QR code for 2FA', error_text: 'already_enabled') + end + + if current_user.read_cache('enable_otp') + otp_error!(reason: '2FA has been already sent email for this account', error_code: 400, + user: current_user.id, action: 'request QR code for 2FA', error_text: 'already_sent') + end + + activity_record(user: current_user.id, action: 'request QR code for 2FA', result: 'succeed', topic: 'otp') + TOTPService.create(current_user.uid, current_user.email) + end + + desc 'enter google authenticator code and send authorization code by email(second step for enabling)', + failure: [ + { code: 400, message: '2FA has been enabled for this account or code is missing' }, + { code: 401, message: 'Invalid bearer token' }, + { code: 422, message: 'Validation errors' } + ], + success: { code: 200, message: '2FA was enabled' } + params do + requires :code, + type: String, + allow_blank: false, + desc: 'Code from Google Authenticator' + end + + post '/enable' do + if current_user.otp + otp_error!(reason: '2FA has been already enabled for this account', error_code: 400, + user: current_user.id, action: 'enable 2FA', error_text: 'already_enabled') + end + + unless TOTPService.validate?(current_user.uid, declared(params)[:code]) + otp_error!(reason: 'OTP code is invalid', error_code: 422, + user: current_user.id, action: 'enable 2FA', error_text: 'invalid') + end + + if current_user.read_cache('enable_otp') + otp_error!(reason: '2FA has been already sent email for this account', error_code: 400, + user: current_user.id, action: 'enable 2FA', error_text: 'already_enabled') + end + + # unless current_user.update(otp: true) + # # FIXME active record validation + # otp_error!(reason: current_user.errors.full_messages.to_sentence, error_code: 422, + # user: current_user.id, action: 'enable 2FA') + # end + + # current_user.labels.create(key: :otp, value: :enabled, scope: :private) unless current_user.labels.find_by(key: :otp, scope: :private) + # activity_record(user: current_user.id, action: 'enable 2FA', result: 'succeed', topic: 'otp') + + publish_confirmation_code(current_user, Barong::App.config.domain, 'enable-otp') + current_user.write_cache('enable_otp', 'true', 120) + 200 + end + + desc 'enter authorization key and enable 2fa(third step for enabling)', + failure: [ + { code: 400, message: '2FA has been enabled for this account or code is missing' }, + { code: 401, message: 'Invalid bearer token' }, + { code: 422, message: 'Validation errors' } + ], + success: { code: 200, message: '2FA was enabled' } + params do + requires :code, + type: String, + allow_blank: false, + desc: 'Code from email' + end + + post '/enable_2fa' do + if current_user.otp + otp_error!(reason: '2FA has been already enabled for this account', error_code: 400, + user: current_user.id, action: 'enable 2FA', error_text: 'already_enabled') + end + + unless current_user.read_cache("enable_otp") + otp_error!(reason: '2FA hasnt been enable', error_code: 400, + user: current_user.id, action: 'enable 2FA', error_text: 'doesnt get email') + end + + unless TOTPServiceAction.new('enable-otp').validate?(current_user.uid, declared(params)[:code]) + otp_error!(reason: 'OTP code is invalid', error_code: 422, + user: current_user.id, action: 'enable 2FA', error_text: 'invalid') + end + + unless current_user.update(otp: true) + # FIXME active record validation + otp_error!(reason: current_user.errors.full_messages.to_sentence, error_code: 422, + user: current_user.id, action: 'enable 2FA') + end + + current_user.labels.create(key: :otp, value: :enabled, scope: :private) unless current_user.labels.find_by(key: :otp, scope: :private) + activity_record(user: current_user.id, action: 'enable 2FA', result: 'succeed', topic: 'otp') + + + # publish_confirmation_code(current_user,Barong::App.config.domain, action) + current_user.delete_cache("enable_otp") + 200 + end + + desc 'Disable 2FA request and send authorization code(first step disabling)', + failure: [ + { code: 400, message: '2FA has not been enabled for this account or code is missing' }, + { code: 401, message: 'Invalid bearer token' }, + { code: 422, message: 'Validation errors' } + ], + success: { code: 200, message: '2FA was disabled' } + params do + requires :code, + type: String, + allow_blank: false, + desc: 'Code from Google Authenticator' + end + post '/disable' do + unless current_user.otp + otp_error!(reason: '2FA has not been enabled for this account', error_code: 400, + user: current_user.id, action: 'disable 2FA', error_text: 'not_enabled') + end + + unless TOTPService.validate?(current_user.uid, declared(params)[:code]) + otp_error!(reason: 'OTP code is invalid', error_code: 422, + user: current_user.id, action: 'disable 2FA', error_text: 'invalid') + end + + publish_confirmation_code(current_user, Barong::App.config.domain, 'disable-otp') + current_user.write_cache('disable_otp', 'true', 120) + status 200 + end + + desc 'enter authorization code that send by email (second step for disabling 2FA)', + failure: [ + { code: 400, message: '2FA has been enabled for this account or code is missing' }, + { code: 401, message: 'Invalid bearer token' }, + { code: 422, message: 'Validation errors' } + ], + success: { code: 200, message: '2FA was disabled' } + params do + requires :code, + type: String, + allow_blank: false, + desc: 'Code from Google Authenticator' + end + post '/disable_email' do + unless current_user.otp + otp_error!(reason: '2FA has not been enabled for this account', error_code: 400, + user: current_user.id, action: 'disable 2FA', error_text: 'not_enabled') + end + + unless current_user.read_cache("disable_otp") + otp_error!(reason: '2FA hasnt been disable', error_code: 400, + user: current_user.id, action: 'enable 2FA', error_text: 'doesnt get email') + end + + unless TOTPServiceAction.new('disable-otp').validate?(current_user.uid, declared(params)[:code]) + otp_error!(reason: 'OTP code is invalid', error_code: 422, + user: current_user.id, action: 'enable 2FA', error_text: 'invalid') + end + + unless current_user.update(otp: false) + otp_error!(reason: current_user.errors.full_messages.to_sentence, error_code: 422, + user: current_user.id, action: 'disable 2FA') + end + + current_user.labels.find_by(key: :otp, scope: :private).delete if current_user.labels.find_by(key: :otp, scope: :private) + activity_record(user: current_user.id, action: 'disable 2FA', result: 'succeed', topic: 'otp') + + status 200 + end + desc 'Verify 2FA code(for checking 2fa)', + failure: [ + { code: 400, message: '2FA has not been enabled for this account or code is missing' }, + { code: 401, message: 'Invalid bearer token' }, + { code: 422, message: 'Validation errors' } + ], + success: { code: 200, message: '2FA was verified' } + params do + requires :code, + type: String, + allow_blank: false, + desc: 'Code from Google Authenticator' + end + post '/verify' do + unless current_user.otp + otp_error!(reason: '2FA has not been enabled for this account', error_code: 400, + user: current_user.id, action: 'verify 2FA code', error_text: 'already_enabled') + end + + unless TOTPService.validate?(current_user.uid, declared(params)[:code]) + otp_error!(reason: 'OTP code is invalid', error_code: 422, + user: current_user.id, action: 'verify 2FA code', error_text: 'invalid') + end + end + end + end + end +end diff --git a/app/api/v2/resource/phones.rb b/app/api/v2/resource/phones.rb new file mode 100644 index 0000000..291f0d2 --- /dev/null +++ b/app/api/v2/resource/phones.rb @@ -0,0 +1,267 @@ +# frozen_string_literal: true + +module API::V2 + module Resource + class Phones < Grape::API + rescue_from(Twilio::REST::RestError) do |error| + Rails.logger.error "Twilio Client Error: #{error.message}" + error!({ errors: [twilio_dictionary_error(error.code)] }, 422) + end + + helpers do + def validate_phone!(phone_number, landline = nil) + phone_number = Phone.international(phone_number) + + error!({ errors: ['resource.phone.invalid_num'] }, 400) \ + unless Phone.valid?(phone_number) + + error!({ errors: ['resource.phone.number_exist'] }, 400) \ + if Phone.verified.find_by_number(phone_number) && landline.blank? + + # check phone is landline + error!({ errors: ['resource.phone.number_not_landline'] }, 400) \ + if landline.present? && phone_number[2] == '9' + end + end + + desc 'mobile related routes' + resource :mobiles do + desc 'Returns list of user\'s phones', + failure: [ + { code: 401, message: 'Invalid bearer token' }, + ], + success: Entities::Phone + get do + present current_user.phones, with: Entities::Phone + end + + desc 'Add new mobile', + failure: [ + { code: 400, message: 'Required params are empty' }, + { code: 401, message: 'Invalid bearer token' }, + { code: 404, message: 'Record is not found' }, + { code: 422, message: 'Validation errors' } + ], + success: { code: 200, message: 'New phone was added' } + params do + requires :phone_number, + type: String, + allow_blank: false, + desc: 'Phone number with country code(in iran +98)' + optional :channel, + type: String, + default: 'sms', + values: { value: -> { Phone::TWILIO_CHANNELS }, message: 'resource.phone.invalid_channel'}, + desc: 'The verification method to use(this param is for legacy structure must be sms)' + end + post do + error!({ errors: ['kyc_follow_steps'] }, 403) if current_user.kyc_info.dig(:step) < 2 + + error!({ errors: ['resource.phone.code_doesnt_expired'] }, 422) if current_user.read_cache('register-mobile') + declared_params = declared(params) + validate_phone!(declared_params[:phone_number]) + phone_number = Phone.international(declared_params[:phone_number]) + # label = current_user.labels.find_by(key: 'access_phone', value: 'verified') + # error!({ errors: ['resource.phone.exists'] }, 422) if label.present? + if current_user.mobile('pending').present? + current_user.mobile('pending').update(number: phone_number) + else + current_user.phones.create(number: phone_number, category: 'mobile') + end + # code_error!(phone.errors.details, 422) if phone.errors.any? + error!({ errors: ['resource.phone.cant_send_message'] }, 422) unless KaveNegarSmsService.send_confirmation(current_user) + status 200 + end + + desc 'Resend activation code for mobile sms', + failure: [ + { code: 400, message: 'Required params are empty' }, + { code: 401, message: 'Invalid bearer token' }, + { code: 404, message: 'Record is not found' }, + { code: 422, message: 'Validation errors' } + ], + success: { code: 200, message: 'Activation code was resend' } + params do + requires :phone_number, + type: String, + allow_blank: false, + desc: 'Phone number with country code( in iran +98 )' + optional :channel, + type: String, + default: 'sms', + values: { value: -> { Phone::TWILIO_CHANNELS }, message: 'resource.phone.invalid_channel'}, + desc: 'The verification method to use(this param is for legacy structure must be sms)' + end + # TODO you can delete this api and use above + post '/send_code' do + error!({ errors: ['resource.phone.code_doesnt_expired'] }, 422) if current_user.read_cache('register-mobile') + declared_params = declared(params) + validate_phone!(declared_params[:phone_number]) + + phone_number = Phone.international(declared_params[:phone_number]) + phone = current_user.phones.find_by_number(phone_number) + error!({ errors: ['resource.phone.doesnt_exist'] }, 404) unless phone + + KaveNegarSmsService.send_confirmation(current_user) + status 200 + end + + desc 'Verify a mobile(enter code and verify number)', + failure: [ + { code: 400, message: 'Required params are empty' }, + { code: 401, message: 'Invalid bearer token' }, + { code: 404, message: 'Record is not found' } + ], + success: API::V2::Entities::UserWithFullInfo + params do + requires :phone_number, + type: String, + allow_blank: false, + desc: 'phone number with country code(in iran with +98)' + requires :verification_code, + type: String, + allow_blank: false, + desc: 'Verification code from sms(this param is for legacy structure must be sms)' + end + post '/verify' do + declared_params = declared(params) + validate_phone!(declared_params[:phone_number]) + error!({ errors: ['resource.phone.doesnt_exist'] }, 404) unless current_user.mobile('pending') + + unless TOTPServiceAction.new('register-mobile').validate?(current_user.uid, declared(params)[:verification_code]) + error!({ errors: ['resource.phone.verification_invalid'] }, 400) + end + current_user.delete_cache('register-mobile') + pending_mobile = current_user.mobile('pending') + last_verified_mobile = current_user.mobile('verified') + if last_verified_mobile&.step == 'owner_phone' + if pending_mobile.check_owner_ship + last_verified_mobile.update(state: 'replaced') + pending_mobile.update(validated_at: Time.current, state: 'verified', step: 'owner_phone') + else + pending_mobile.update(state: 'rejected') + end + elsif last_verified_mobile&.step == 'access_phone' + last_verified_mobile.update(state: 'replaced') + pending_mobile.update(validated_at: Time.current, step: 'access_phone', state: 'verified') + else + pending_mobile.update(validated_at: Time.current, step: 'access_phone', state: 'verified') + end + + + present current_user, with: API::V2::Entities::UserWithFullInfo + end + end + + + desc 'landline related routes' + resource :phones do + + desc 'Add new phone', + failure: [ + { code: 400, message: 'Required params are empty' }, + { code: 401, message: 'Invalid bearer token' }, + { code: 404, message: 'Record is not found' }, + { code: 422, message: 'Validation errors' } + ], + success: { code: 200, message: 'New phone was added' } + params do + requires :phone_number, + type: String, + allow_blank: false, + desc: 'Phone number with country code(in iran +98)' + optional :channel, + type: String, + default: 'call', + values: { value: -> { Phone::TWILIO_CHANNELS }, message: 'resource.phone.invalid_channel'}, + desc: 'The verification method to use' + end + post do + error!({ errors: ['resource.phone.code_doesnt_expired'] }, 422) if current_user.read_cache('register-phone') + + error!({ errors: ['kyc_follow_steps'] }, 403) if current_user.kyc_info.dig(:step) < 6 + + declared_params = declared(params) + validate_phone!(declared_params[:phone_number], true) + phone_number = Phone.international(declared_params[:phone_number]) + phone = current_user.phones.find_by(category: :landline, step: 'telephone', state: 'pending') + label = current_user.labels.find_by(key: 'telephone', value: 'verified') + # TODO can edit for updating feature + error!({ errors: ['resource.phone.exists'] }, 422) if label.present? + + if phone.present? + phone.update(number: phone_number) + else + current_user.phones.create(number: phone_number, category: :landline, step: 'telephone') + end + # code_error!(phone.errors.details, 422) if phone.errors.any? + KaveNegarSmsService.send_call_confirmation(current_user) + end + + desc 'Resend activation code in call', + failure: [ + { code: 400, message: 'Required params are empty' }, + { code: 401, message: 'Invalid bearer token' }, + { code: 404, message: 'Record is not found' }, + { code: 422, message: 'Validation errors' } + ], + success: { code: 200, message: 'Activation code was resend' } + params do + requires :phone_number, + type: String, + allow_blank: false, + desc: 'Phone number with country code' + optional :channel, + type: String, + default: 'call', + values: { value: -> { Phone::TWILIO_CHANNELS }, message: 'resource.phone.invalid_channel'}, + desc: 'The verification method to use' + end + # TODO you can delete this api and use above + post '/send_code' do + error!({ errors: ['resource.phone.code_doesnt_expired'] }, 422) if current_user.read_cache('register-phone') + declared_params = declared(params) + validate_phone!(declared_params[:phone_number], true) + + phone_number = Phone.international(declared_params[:phone_number]) + phone = current_user.phones.find_by_number(phone_number) + error!({ errors: ['resource.phone.doesnt_exist'] }, 404) unless phone + + KaveNegarSmsService.send_call_confirmation(current_user) + end + + + desc 'Verify a phone (enter code and verify number)', + failure: [ + { code: 400, message: 'Required params are empty' }, + { code: 401, message: 'Invalid bearer token' }, + { code: 404, message: 'Record is not found' } + ], + success: API::V2::Entities::UserWithFullInfo + params do + requires :phone_number, + type: String, + allow_blank: false, + desc: 'Phone number with country code(in iran with +98)' + requires :verification_code, + type: String, + allow_blank: false, + desc: 'Verification code from call' + end + post '/verify' do + declared_params = declared(params) + validate_phone!(declared_params[:phone_number], true) + + # phone_number = Phone.international(declared_params[:phone_number]) + phone = current_user.phones.find_by(step: 'telephone', category: 'landline') + error!({ errors: ['resource.phone.doesnt_exist'] }, 404) unless phone + + error!({ errors: ['resource.phone.verification_invalid'] }, 404) unless TOTPServiceAction.new('register-phone').validate?(current_user.uid, declared(params)[:verification_code]) + current_user.delete_cache('register-phone') + phone.update(validated_at: Time.current, state: 'verified') + present current_user, with: API::V2::Entities::UserWithFullInfo + end + end + end + end +end diff --git a/app/api/v2/resource/profiles.rb b/app/api/v2/resource/profiles.rb new file mode 100644 index 0000000..ceda2c3 --- /dev/null +++ b/app/api/v2/resource/profiles.rb @@ -0,0 +1,255 @@ +# frozen_string_literal: true + +module API::V2 + module Resource + # CR functionality over profiles table + class Profiles < Grape::API + helpers do + def profile_param_keys + %w[first_name last_name dob address + postcode city country metadata national_code].freeze + end + + def treasury_param_keys + %w[title data kind].freeze + end + end + + desc 'Profile related routes' + resource :profiles do + desc 'Return profiles of current resource owner', + failure: [ + { code: 401, message: 'Invalid bearer token' }, + { code: 404, message: 'User has no profile' } + ], + success: API::V2::Entities::Profile + get '/me' do + present current_user.profiles, with: API::V2::Entities::Profile + end + + # personal info - kyc level one step one + desc 'Create Level one - step one - personal info in profiles', + failure: [ + { code: 400, message: 'Required params are empty' }, + { code: 401, message: 'Invalid bearer token' }, + { code: 409, message: 'Profile already exists' }, + { code: 422, message: 'Validation errors' } + ], + success: API::V2::Entities::Profile + params do + requires :first_name, type: String, desc: 'First Name' + requires :last_name, type: String, desc: 'Last Name' + requires :dob, type: Date, desc: 'Date of Birth' + requires :national_code, type: String, desc: 'national code' + requires :upload, desc: 'Array of Rack::Multipart::UploadedFile' + optional :confirm, type: Boolean, default: true, desc: 'Profile confirmation' + end + + post do + error!({ errors: ['kyc_follow_steps'] }, 403) if current_user.kyc_info.dig(:step) < 1 + + declared_params = declared(params.slice(*profile_param_keys), include_missing: false) + declared_params.merge!(state: 'submitted') + # declared_params.merge!(state: 'submitted') if params['confirm'] + ActiveRecord::Base.transaction do + profile = current_user.profiles.create(declared_params) + code_error!(profile.errors.details, 422) if profile.errors.any? + + doc = current_user.documents.new(upload: params[:upload], + identificator: SecureRandom.hex(16), + doc_type: 'Identity card', + doc_category: 'front_side') + code_error!(doc.errors.details, 422) unless doc.save + + present profile, with: API::V2::Entities::Profile + end + end + + desc 'Update a profile for current_user', + failure: [ + { code: 401, message: 'Invalid bearer token' }, + { code: 401, message: 'Invalid bearer token' }, + { code: 422, message: 'Validation errors' } + ], + success: API::V2::Entities::Profile + params do + requires :first_name, type: String, desc: 'First Name' + requires :last_name, type: String, desc: 'Last Name' + requires :dob, type: Date, desc: 'Date of Birth' + requires :national_code, type: String, desc: 'national code' + requires :upload, desc: 'Array of Rack::Multipart::UploadedFile' + optional :confirm, type: Boolean, default: true, desc: 'Profile confirmation' + end + + put do + target_profile = current_user.submitted_profile + error!({ errors: ['resource.profile.doesnt_exist_or_not_editable'] }, 404) if target_profile.nil? + + declared_params = declared(params.slice(*profile_param_keys), include_missing: false) + # declared_params.merge!(state: 'submitted') if params['confirm'] + declared_params.merge!(state: 'submitted') + ActiveRecord::Base.transaction do + code_error!(target_profile.errors.details, 422) unless target_profile.update(declared_params) + document = current_user.front_icard + document.update!(upload: params[:upload]) if document.present? + end + present target_profile, with: API::V2::Entities::Profile + end + + # card bank info - kyc level one step three + resource :treasury do + # one request add iban just + desc 'Create Level one - step three - info bank ', + failure: [ + { code: 400, message: 'Required params are empty' }, + { code: 401, message: 'Invalid bearer token' }, + { code: 409, message: 'Bank info already exists' }, + { code: 422, message: 'Validation errors' } + ], + success: API::V2::Entities::Profile + params do + requires :data, type: String, desc: 'treasury number' + requires :kind, type: String, desc: 'iban or card' + optional :title, type: String, desc: 'treasury name' + optional :confirm, type: Boolean, default: true, desc: 'Treasury confirmation' + end + + post do + error!({ errors: ['resource.verified.profile.doesnt_exist'] }, 404) unless current_user.verified_profile.present? + + declared_params = declared(params.slice(*treasury_param_keys), include_missing: false) + # declared_params.merge!(state: 'submitted') if params['confirm'].present? + declared_params.merge!(state: 'submitted') + error!({ errors: ['treasury.kind.not_exist'] }, 404) if Treasury.kinds.keys.exclude?(declared_params['kind']) + + error!({ errors: ['kyc_follow_steps'] }, 403) if current_user.kyc_info.dig(:step) < 3 && declared_params['kind'].to_s == 'card' + + error!({ errors: ['kyc_follow_steps'] }, 403) if current_user.kyc_info.dig(:step) < 4 && declared_params['kind'].to_s == 'iban' + + treasury = current_user.treasuries.create(declared_params) + code_error!(treasury.errors.details, 422) if treasury.errors.any? + + KYC.const_get(Barong::App.config.kyc_provider.capitalize, false)::TreasuryWorker.perform_async(current_user.verified_profile.id) + present treasury, with: API::V2::Entities::Treasury + end + + desc 'Delete a treasury', + success: { code: 204, message: 'Successfully deleted' }, + failure: [ + { code: 400, message: 'Required params are empty' }, + { code: 401, message: 'Invalid bearer token' }, + { code: 404, message: 'Record is not found' } + ] + delete ':id' do + treasury = Treasury.find_by!(id: params[:id], user_id: current_user.id) + treasury.destroy + code_error!(treasury.errors.details, 422) if treasury.errors.any? + status 204 + end + + desc 'Return list of treasuries', + failure: [ + { code: 401, message: 'Invalid bearer token' }, + { code: 404, message: 'User has no treasuries' } + ], + success: API::V2::Entities::Treasury + get '/list' do + present current_user.treasuries, with: API::V2::Entities::Treasury + end + end + + resource :selfie do + # submit selfie - kyc level two step three + desc 'Create Level two - step three - selfie', + failure: [ + { code: 400, message: 'Required params are empty' }, + { code: 401, message: 'Invalid bearer token' }, + { code: 409, message: 'Selfie already exists' }, + { code: 422, message: 'Validation errors' } + ], + success: API::V2::Entities::Profile + params do + requires :upload, desc: 'Array of Rack::Multipart::UploadedFile' + optional :confirm, type: Boolean, default: true, desc: 'Profile confirmation' + end + + post do + error!({ errors: ['kyc_follow_steps'] }, 403) if current_user.kyc_info.dig(:step) < 7 + + target_profile = current_user.verified_profile + error!({ errors: ['resource.verified.profile.doesnt_exist'] }, 404) if target_profile.nil? + + label = current_user.labels.find_by(key: 'selfie', value: 'verified') + error!({ errors: ['resource.verified.selfie.already_exist'] }, 404) if label.present? + + doc = current_user.documents.find_by(doc_type: 'Selfie', state: 'pending') + + if doc.present? + doc.update(upload: params[:upload]) + else + doc = current_user.documents.new(upload: params[:upload], + identificator: SecureRandom.hex(16), + doc_type: 'Selfie', + doc_category: 'front_side') + code_error!(doc.errors.details, 422) unless doc.save + end + + status 201 + end + end + + resource :address do + desc 'Adding Address', + failure: [ + { code: 400, message: 'Required params are empty' }, + { code: 401, message: 'Invalid bearer token' }, + { code: 404, message: 'needed data doesnt exist' }, + { code: 422, message: 'Validation errors' } + ], + success: API::V2::Entities::Profile + params do + requires :city, type: String, desc: 'city name' + requires :province, type: String, desc: 'province name' + requires :address, type: String, desc: 'address' + requires :postcode, type: String, desc: 'post code' + requires :upload, desc: 'Array of Rack::Multipart::UploadedFile' + end + + post do + error!({ errors: ['resource.address.already_exist'] }, 422) if current_user.documents.find_by(doc_type: 'Poa', state: 'verified').present? + + error!({ errors: ['kyc_follow_steps'] }, 403) if current_user.kyc_info.dig(:step) < 5 + + declared_params = declared(params) + profile = current_user.verified_profile + # TODO change city and province to id instead of string + province = Province.find_by(name: declared_params['province']) + error!({ errors: ['resource.profile.province_doesnt_exist'] }, 404) if province.nil? + + city = province.cities.find_by(name: declared_params['city']) + error!({ errors: ['resource.profile.province_doesnt_exist'] }, 404) if city.nil? + + doc = current_user.documents.find_by(doc_type: 'Poa', state: 'pending') + # declared_params.merge!(state: 'submitted') if params['confirm'] + ActiveRecord::Base.transaction do + profile.update(city: city, address: declared_params['address'], postcode: declared_params['postcode']) + + code_error!(profile.errors.details, 422) if profile.errors.any? + if doc.present? + doc.update(upload: params[:upload]) + else + doc = current_user.documents.new(upload: params[:upload], + identificator: SecureRandom.hex(16), + doc_type: 'Poa', + doc_category: 'front_side') + end + code_error!(doc.errors.details, 422) unless doc.save + + present profile, with: API::V2::Entities::Profile + end + end + end + end + end + end +end diff --git a/app/api/v2/resource/service_accounts.rb b/app/api/v2/resource/service_accounts.rb new file mode 100644 index 0000000..648d372 --- /dev/null +++ b/app/api/v2/resource/service_accounts.rb @@ -0,0 +1,186 @@ +# frozen_string_literal: true + +module API::V2 + module Resource + class ServiceAccounts < Grape::API + helpers ::API::V2::NamedParams + helpers do + def otp_protected! + unless current_user.otp + error!({ errors: ['resource.service_accounts.2fa_disabled'] }, 400) + end + error!({ errors: ['resource.service_accounts.missing_totp'] }, 422) unless params[:totp_code].present? + + return if TOTPService.validate?(current_user.uid, params[:totp_code]) + + error!({ errors: ['resource.service_accounts.invalid_totp'] }, 422) + end + end + + resource :service_accounts do + desc 'List all service accounts for current user.', + security: [{ "BearerToken": [] }], + failure: [ + { code: 400, message: 'Require 2FA and totp code' }, + { code: 401, message: 'Invalid bearer token' } + ] + params do + end + get do + current_user.service_accounts + end + + resource :api_keys do + desc 'List all api keys for specific service account.', + failure: [ + { code: 400, message: 'Require 2FA and totp code' }, + { code: 401, message: 'Invalid bearer token' } + ], + success: Entities::APIKey + params do + optional :ordering, + values: { value: -> (p){ %w[asc desc].include?(p) }, message: 'resource.service_accounts.invalid_ordering' }, + default: 'asc', + desc: 'If set, returned values will be sorted in specific order, defaults to \'asc\'.' + optional :order_by, + values: { value: -> (p){ APIKey.new.attributes.keys.include?(p) }, message: 'resource.service_accounts.invalid_attribute' }, + default: 'id', + desc: 'Name of the field, which result will be ordered by.' + use :pagination_filters + requires :service_account_uid, type: { value: String, message: 'resource.service_account.non_string_service_account_uid' } + end + get do + target_service_account = current_user.service_accounts.find_by(uid: params[:service_account_uid]) + + error!({ errors: ['resource.service_account.doesnt_exist'] }, 404) if target_service_account.nil? + + target_service_account.api_keys.order(params[:order_by] => params[:ordering]).tap { |q| present paginate(q), with: Entities::APIKey, except: [:secret] } + end + + desc 'Create api key for specific service account.', + failure: [ + { code: 400, message: 'Require 2FA and totp code' }, + { code: 401, message: 'Invalid bearer token' } + ], + success: Entities::APIKey + params do + requires :service_account_uid, type: { value: String, message: 'resource.service_account.non_string_service_account_uid' } + requires :algorithm, + type: String, + allow_blank: false, + desc: 'Service account algorithm' + optional :scope, + type: String, + allow_blank: false, + desc: 'Comma separated scopes' + requires :totp_code, + type: String, + message: 'resource.service_accounts.missing_totp', + allow_blank: false, + desc: 'Code from Google Authenticator' + end + post do + target_service_account = current_user.service_accounts.find_by(uid: params[:service_account_uid]) + + error!({ errors: ['resource.service_account.doesnt_exist'] }, 404) if target_service_account.nil? + + otp_protected! + declared_params = declared(params, include_missing: false) + .except(:totp_code, :service_account_uid) + .merge(scope: params[:scope]&.split(',')) + .merge(secret: SecureRandom.hex(16)) + + + api_key = target_service_account.api_keys.new(declared_params) + + APIKey.transaction do + raise ActiveRecord::Rollback unless api_key.save + rescue Vault::VaultError + api_key.errors.add(:api_key, 'could_not_save_secret') + raise ActiveRecord::Rollback + end + + if api_key.errors.any? + code_error!(api_key.errors.details, 422) + end + + present api_key, with: Entities::APIKey + end + + desc 'Delete an api key for specific service account', + success: { code: 204, message: 'Succefully deleted' }, + failure: [ + { code: 400, message: 'Required params are empty' }, + { code: 401, message: 'Invalid bearer token' }, + { code: 404, message: 'Record is not found' } + ] + params do + requires :service_account_uid, type: { value: String, message: 'resource.service_account.non_string_service_account_uid' } + requires :kid, + type: String, + allow_blank: false, + desc: 'Service account kid' + requires :totp_code, + type: String, + allow_blank: false, + desc: 'Code from Google Authenticator' + end + delete ':kid' do + target_service_account = current_user.service_accounts.find_by(uid: params[:service_account_uid]) + + error!({ errors: ['resource.service_account.doesnt_exist'] }, 404) if target_service_account.nil? + + otp_protected! + api_key = target_service_account.api_keys.find_by!(kid: params[:kid]) + api_key.destroy + status 204 + end + + desc 'Updates an api key', + failure: [ + { code: 400, message: 'Required params are empty' }, + { code: 401, message: 'Invalid bearer token' }, + { code: 404, message: 'Record is not found' }, + { code: 422, message: 'Validation errors' } + ], + success: Entities::APIKey + params do + requires :service_account_uid, type: { value: String, message: 'resource.service_account.non_string_service_account_uid' } + requires :kid, + type: String, + allow_blank: false, + desc: 'Service account kid' + optional :scope, + type: String, + allow_blank: false, + desc: 'Comma separated scopes' + optional :state, + type: String, + allow_blank: false, + desc: 'State of API Key. "active" state means key is active and can be used for auth' + requires :totp_code, + type: String, + allow_blank: false, + desc: 'Code from Google Authenticator' + end + put ':kid' do + target_service_account = current_user.service_accounts.find_by(uid: params[:service_account_uid]) + + error!({ errors: ['resource.service_account.doesnt_exist'] }, 404) if target_service_account.nil? + + otp_protected! + declared_params = declared(params, include_missing: false) + .except(:totp_code).except(:service_account_uid) + .merge(scope: params[:scope]&.split(',')) + api_key = target_service_account.api_keys.find_by!(kid: params[:kid]) + unless api_key.update(declared_params) + code_error!(api_key.errors.details, 422) + end + + present api_key, with: Entities::APIKey, except: [:secret] + end + end + end + end + end +end diff --git a/app/api/v2/resource/users.rb b/app/api/v2/resource/users.rb new file mode 100644 index 0000000..bdf2281 --- /dev/null +++ b/app/api/v2/resource/users.rb @@ -0,0 +1,210 @@ +# frozen_string_literal: true + +module API::V2 + module Resource + class Users < Grape::API + helpers ::API::V2::NamedParams + helpers do + def password_error!(options = {}) + options[:topic] = 'password' + record_error!(options) + end + + def validate_topic!(topic) + unless %w[all session otp password account].include?(topic) + error!({ errors: ['resource.user.wrong_topic'] }, 422) + end + end + + def verify_otp! + error!({ errors: ['resource.user.missing_otp_code'] }, 422) if params[:otp_code].nil? + + error!({ errors: ['resource.user.empty_otp_code'] }, 422) if params[:otp_code].empty? + + unless TOTPService.validate?(current_user.uid, params[:otp_code]) + error!({ errors: ['resource.user.invalid_otp'] }, 422) + end + end + end + + resource :users do + desc 'Returns current user', + success: API::V2::Entities::UserWithFullInfo + get '/me' do + present current_user, with: API::V2::Entities::UserWithFullInfo + end + + desc 'Updates current user data field', + success: API::V2::Entities::UserWithFullInfo + params do + requires :data, type: String, allow_blank: false, desc: 'Any additional key: value pairs in json string format' + end + put '/me' do + code_error!(current_user.errors.details, 422) unless current_user.update(data: params[:data]) + + present current_user, with: API::V2::Entities::UserWithFullInfo + end + + desc 'Blocks current user', + success: { code: 200, message: 'Current user was blocked' } + params do + requires :password, type: String, allow_blank: false, desc: 'Account password' + optional :otp_code, type: String, allow_blank: false, desc: 'Code from Google Authenticator' + end + delete '/me' do + error!({ errors: ['resource.user.invalid_password'] }, 422) unless password_valid?(params[:password]) + + verify_otp! if current_user.otp + + current_user.labels.create(key: 'delete', value: 'by_user', scope: 'private') + EventAPI.notify( + 'system.user.account.deleted', + record: { user: current_user.as_json_for_event_api } + ) + + status(200) + end + + desc 'Returns user activity', + success: Entities::Activity + params do + requires :topic, + type: String, + allow_blank: { value: false, message: 'resource.user.empty_topic' }, + desc: 'Topic of user activity. Allowed: [all, password, session, otp]' + optional :time_from, + type: { value: Integer, message: 'resource.user.non_integer_time_from' }, + allow_blank: { value: false, message: 'resource.user.empty_time_from' }, + desc: 'An integer represents the seconds elapsed since Unix epoch.'\ + 'If set, only activities created after the time will be returned.' + optional :time_to, + type: { value: Integer, message: 'resource.user.non_integer_time_to' }, + allow_blank: { value: false, message: 'resource.user.empty_time_to' }, + desc: 'An integer represents the seconds elapsed since Unix epoch.'\ + 'If set, only activities created before the time will be returned.' + optional :result, + type: { value: String, message: 'resource.user.non_string_result' }, + allow_blank: { value: false, message: 'resource.user.empty_result' }, + desc: 'Result of user activity. Allowed: [succeed, failed, denied]' + use :pagination_filters + end + get '/activity/:topic' do + validate_topic!(params[:topic]) + data = current_user.activities.order('id DESC') + data = data.where(topic: params[:topic]) if params[:topic] != 'all' + data = data.tap { |q| q.where!('created_at >= ?', Time.at(params[:time_from])) if params[:time_from] } + .tap { |q| q.where!('created_at < ?', Time.at(params[:time_to])) if params[:time_to] } + .tap { |q| q.where!(result: params[:result]) if params[:result] } + + error!({ errors: ['resource.user.no_activity'] }, 422) unless data.present? + + present paginate(data), with: Entities::Activity + end + + # change password + desc 'Sets new account password(change password)', + success: { code: 201, message: 'Code sent for confirm password' }, + failure: [ + { code: 400, message: 'Required params are empty' }, + { code: 404, message: 'Record is not found' }, + { code: 422, message: 'Validation errors' } + ] + params do + requires :old_password, + type: String, + allow_blank: false, + desc: 'Previous account password' + requires :new_password, + type: String, + allow_blank: false, + desc: 'User password' + requires :confirm_password, + type: String, + allow_blank: false, + desc: 'User password' + end + put '/password' do + # if user inters too many wrong password, we logout him + attempt = current_user.read_cache('attempt_change_password') || 0 + # TODO: numeric must be config that set by admin + if attempt >= User::CHANGE_PASS_ATTEMPTS + activity_record(user: current_user.id, action: 'many_change_password_attempts', result: 'succeed', topic: 'session') + current_user.delete_cache('attempt_change_password') + request.session.destroy + password_error!(reason: 'Too many attempts', error_code: 422, + user: current_user.id, action: 'password change', error_text: 'many_change_password_attempts') + end + + unless params[:new_password] == params[:confirm_password] + password_error!(reason: 'New passwords don\'t match', + error_code: 422, user: current_user.id, action: 'password change', error_text: 'doesnt_match') + end + + unless PasswordStrengthChecker.validate!(params[:new_password]) == 'strong' + password_error!(reason: 'Previous password is not strong', + error_code: 400, user: current_user.id, action: 'password change', error_text: 'password_is_not_strong') + end + + unless password_valid?(params[:old_password]) + current_user.write_cache('attempt_change_password', attempt + 1, 86_400) + password_error!(reason: 'Previous password is not correct', + error_code: 400, user: current_user.id, action: 'password change', error_text: 'prev_pass_not_correct') + end + + if params[:old_password] == params[:new_password] + password_error!(reason: 'New password cant be the same, as old one', + error_code: 400, user: current_user.id, action: 'password change', error_text: 'no_change_provided') + end + + publish_confirmation_code(current_user, Barong::App.config.domain, 'change-password') + + current_user.write_cache('change_password', params[:new_password], 300) + status 201 + end + + desc 'Confirm account password(enter authorization code)', + success: { code: 201, message: 'Changes password' }, + failure: [ + { code: 400, message: 'Required params are empty' }, + { code: 404, message: 'Record is not found' }, + { code: 422, message: 'Validation errors' } + ] + params do + requires :code, + type: String, + allow_blank: false, + desc: 'Totp Code from email' + end + + post '/confirm_password' do + + temp_password = current_user.read_cache('change_password') + + error!({ errors: ['resource.password.email_expired'] }, 422) if temp_password.blank? + + unless TOTPServiceAction.new('change-password').validate?(current_user.uid, declared(params)[:code]) + error!({ errors: ['resource.password.confirm_code'] }, 422) + end + + unless current_user.update(password: temp_password) + error_note = { reason: current_user.errors.full_messages.to_sentence }.to_json + activity_record(user: current_user.id, action: 'password change', + result: 'failed', topic: 'password', data: error_note) + code_error!(current_user.errors.details, 422) + end + + activity_record(user: current_user.id, action: 'password change', result: 'succeed', topic: 'password') + + EventAPI.notify('system.user.password.change', + record: { + user: current_user.as_json_for_event_api, + domain: Barong::App.config.domain + }) + + current_user.delete_cache('change_password') + status 201 + end + end + end + end +end diff --git a/app/api/v2/resource/utils.rb b/app/api/v2/resource/utils.rb new file mode 100644 index 0000000..d5a245b --- /dev/null +++ b/app/api/v2/resource/utils.rb @@ -0,0 +1,64 @@ +# frozen_string_literal: true + +module API::V2 + module Resource + module Utils + def current_user + if env[:current_payload].has_key?(:uid) + @_current_user ||= User.find_by!(uid: env[:current_payload][:uid]) + else + raise(Peatio::Auth::Error, 'Middleware Error') + end + end + + def record_error!(options = {}) + options[:data] = { reason: options[:reason] }.to_json + options[:result] = 'failed' + activity_record(options.except(:reason, :error_code)) + error!({ errors: ['resource.' + options[:topic] + '.' + options[:error_text]] }, options[:error_code]) + end + + def twilio_dictionary_error(code) + user_error = 'resource.phone.' + { + 21_612 => 'num_not_reachable', + 21_614 => 'num_not_valid', + 21_618 => 'sms_content_invalid', + 21_610 => 'unsubscribed_recipient' + }[code] + + user_error || 'resource.phone.twilio_unexpected' + end + + def activity_record(options = {}) + params = { + category: 'user', + user_id: options[:user], + user_ip: remote_ip, + user_agent: request.env['HTTP_USER_AGENT'], + topic: options[:topic], + action: options[:action], + result: options[:result], + data: options[:data] + } + Activity.create(params) + end + + def password_valid?(password) + true if current_user == current_user.try(:authenticate, password) + end + + def publish_confirmation_code(user, domain, action) + totp = TOTPServiceAction.new(action) + totp.create(user.uid, user.email) + EventAPI.notify( + action, + record: { + user: user.as_json_for_event_api, + domain: domain, + code: totp.read_code(user.uid) + } + ) + end + end + end +end diff --git a/app/api/v2/utils.rb b/app/api/v2/utils.rb new file mode 100644 index 0000000..cccaf8e --- /dev/null +++ b/app/api/v2/utils.rb @@ -0,0 +1,38 @@ +# frozen_string_literal: true + +module API::V2 + module Utils + def remote_ip + # default behaviour, IP from HTTP_X_FORWARDED_FOR + ip = env['action_dispatch.remote_ip'].to_s + + if Barong::App.config.gateway == 'akamai' + # custom header that contains only client IP + true_client_ip = request.env['HTTP_TRUE_CLIENT_IP'].to_s + # take IP from TRUE_CLIENT_IP only if its not nil or empty + ip = true_client_ip unless true_client_ip.nil? || true_client_ip.empty? + end + + Rails.logger.debug "User login IP address: #{ip}" + return ip + end + + def code_error!(errors, code) + final = errors.inject([]) do |result, (key, errs)| + result.concat( + errs.map { |e| e.values.first } + .uniq + .flatten + .map { |e| [key, e].join('.') } + ) + end + error!({ errors: final }, code) + end + + def admin_authorize!(*args) + AdminAbility.new(current_user).authorize!(*args) + rescue CanCan::AccessDenied + error!({ errors: ['admin.ability.not_permitted'] }, 401) + end + end +end diff --git a/app/api/v2/validations.rb b/app/api/v2/validations.rb new file mode 100644 index 0000000..e20ba02 --- /dev/null +++ b/app/api/v2/validations.rb @@ -0,0 +1,77 @@ +# frozen_string_literal: true + +module API + module V2 + module Validations + + class AllowBlankValidator < Grape::Validations::AllowBlankValidator + # Default exception is costructed from `@api` class name. + # E.g + # @api.base.name => API::V2::Account::Withdraws + # default_message => "account.withdraw.missing_otp" + def message(_param) + api = @scope.instance_variable_get(:@api) + module_name = api.base.parent.name.humanize.demodulize + class_name = api.base.name.humanize.demodulize.singularize + # Return default API error message for Management module (no errors unify). + return super if module_name == 'management' + + options_key?(:message) ? @option[:message] : default_exception(module_name, class_name) + end + + def default_exception(module_name, class_name) + "#{module_name}.#{class_name}.empty_#{attrs.first}" + end + end + + class PresenceValidator < Grape::Validations::PresenceValidator + # Default exception is costructed from `@api` class name. + # E.g + # @api.base.name => API::V2::Account::Withdraws + # default_message => "account.withdraw.missing_otp" + + def message(_param) + api = @scope.instance_variable_get(:@api) + module_name = api.base.parent.name.humanize.demodulize + class_name = api.base.name.humanize.demodulize.singularize + # Return default API error message for Management module (no errors unify). + return super if module_name == 'management' + + options_key?(:message) ? @option[:message] : default_exception(module_name, class_name) + end + + def default_exception(module_name, class_name) + "#{module_name}.#{class_name}.missing_#{attrs.first}" + end + end + + # Range validation for pagination tool + class Range < Grape::Validations::Base + def initialize(*) + super + @range = @option + end + + def validate_param!(attr, params) + return unless (params[attr] || @required) && !@range.cover?(params[attr]) + + raise Grape::Exceptions::Validation, \ + params: [@scope.full_name(attr)], + message: "must be in range: #{@range}." + end + end + + # Greater then zero validation for integers + class IntegerGTZero < Grape::Validations::Base + def validate_param!(name, params) + return unless params.key?(name) + return if params[name].to_s.to_i.positive? + + raise Grape::Exceptions::Validation, + params: [@scope.full_name(name)], + message: "#{name} must be greater than zero." + end + end + end + end +end diff --git a/app/assets/config/manifest.js b/app/assets/config/manifest.js new file mode 100644 index 0000000..b16e53d --- /dev/null +++ b/app/assets/config/manifest.js @@ -0,0 +1,3 @@ +//= link_tree ../images +//= link_directory ../javascripts .js +//= link_directory ../stylesheets .css diff --git a/app/assets/images/.keep b/app/assets/images/.keep new file mode 100644 index 0000000..e69de29 diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js new file mode 100644 index 0000000..43ba7e9 --- /dev/null +++ b/app/assets/javascripts/application.js @@ -0,0 +1,15 @@ +// This is a manifest file that'll be compiled into application.js, which will include all the files +// listed below. +// +// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, or any plugin's +// vendor/assets/javascripts directory can be referenced here using a relative path. +// +// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the +// compiled file. JavaScript code in this file should be added after the last require_* statement. +// +// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details +// about supported directives. +// +//= require rails-ujs +//= require activestorage +//= require_tree . diff --git a/app/assets/javascripts/cable.js b/app/assets/javascripts/cable.js new file mode 100644 index 0000000..739aa5f --- /dev/null +++ b/app/assets/javascripts/cable.js @@ -0,0 +1,13 @@ +// Action Cable provides the framework to deal with WebSockets in Rails. +// You can generate new channels where WebSocket features live using the `rails generate channel` command. +// +//= require action_cable +//= require_self +//= require_tree ./channels + +(function() { + this.App || (this.App = {}); + + App.cable = ActionCable.createConsumer(); + +}).call(this); diff --git a/app/assets/javascripts/channels/.keep b/app/assets/javascripts/channels/.keep new file mode 100644 index 0000000..e69de29 diff --git a/app/assets/stylesheets/application.css b/app/assets/stylesheets/application.css new file mode 100644 index 0000000..d05ea0f --- /dev/null +++ b/app/assets/stylesheets/application.css @@ -0,0 +1,15 @@ +/* + * This is a manifest file that'll be compiled into application.css, which will include all the files + * listed below. + * + * Any CSS and SCSS file within this directory, lib/assets/stylesheets, or any plugin's + * vendor/assets/stylesheets directory can be referenced here using a relative path. + * + * You're free to add application-wide styles to this file and they'll appear at the bottom of the + * compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS + * files in this directory. Styles in this file should be added after the last require_* statement. + * It is generally better to create a new file per style scope. + * + *= require_tree . + *= require_self + */ diff --git a/app/channels/application_cable/channel.rb b/app/channels/application_cable/channel.rb new file mode 100644 index 0000000..d672697 --- /dev/null +++ b/app/channels/application_cable/channel.rb @@ -0,0 +1,4 @@ +module ApplicationCable + class Channel < ActionCable::Channel::Base + end +end diff --git a/app/channels/application_cable/connection.rb b/app/channels/application_cable/connection.rb new file mode 100644 index 0000000..0ff5442 --- /dev/null +++ b/app/channels/application_cable/connection.rb @@ -0,0 +1,4 @@ +module ApplicationCable + class Connection < ActionCable::Connection::Base + end +end diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb new file mode 100644 index 0000000..09705d1 --- /dev/null +++ b/app/controllers/application_controller.rb @@ -0,0 +1,2 @@ +class ApplicationController < ActionController::Base +end diff --git a/app/controllers/authorize_controller.rb b/app/controllers/authorize_controller.rb new file mode 100644 index 0000000..e7f6df1 --- /dev/null +++ b/app/controllers/authorize_controller.rb @@ -0,0 +1,100 @@ +# frozen_string_literal: true + +require_dependency 'barong/authorize' + +# Rails Metal base controller to manage AuthZ story +class AuthorizeController < ActionController::Metal + include AbstractController::Rendering + + # /api/v2/auth endpoint + def authorize + @restrictions = Rails.cache.fetch('restrictions', expires_in: 5.minutes) { fetch_restrictions } + + # whitelink path + unless params[:path] == 'api/v2/barong/identity/users/access' + Restriction::CATEGORIES.each do |category| + restriction = first_matched_restriction(category) + if restriction && category.in?(%w[blacklist maintenance]) + return deny_access(category, restriction) + elsif restriction && category == 'blocklogin' && params[:path] == 'api/v2/barong/identity/sessions' + return deny_access(category, restriction) + elsif restriction && category == 'whitelist' + break + end + end + end + + req = Barong::Authorize.new(request, params[:path]) # initialize params of request + # checks if request is blacklisted + return access_error!('authz.permission_denied', 401) if req.under_path_rules?('block') + + response.status = 200 + return if req.under_path_rules?('pass') # check if request is whitelisted + + response.headers['Authorization'] = req.auth # sets bearer token + rescue Barong::Authorize::AuthError => e # returns error from validations + response.body = e.message + response.status = e.code + end + + private + + # finds first (if exist) the most precise restriction ip -> ip_subnet -> continent -> country + def first_matched_restriction(category) + request_ip = remote_ip + country = Barong::GeoIP.info(ip: request_ip, key: :country) + continent = Barong::GeoIP.info(ip: request_ip, key: :continent) + if restriction = @restrictions[category]['all']&.find { |r| r.present? } then return restriction end + if restriction = @restrictions[category]['ip']&.find { |r| r.include?(request_ip) } then return restriction end + if restriction = @restrictions[category]['ip_subnet']&.find { |r| IPAddr.new(r[0])&.include?(request_ip) } then return restriction end + if restriction = @restrictions[category]['continent']&.find { |r| r[0]&.casecmp?(continent) } then return restriction end + if restriction = @restrictions[category]['country']&.find { |r| r[0]&.casecmp?(country) } then return restriction end + end + + # as a result gives complex Hash, { category: { scope: values, scope: values }, category: { scope: values, scope: values } } + # { "blacklist"=>{"continent"=>[], "country"=>[], "ip"=>[], "ip_subnet"=>[]}, + # "whitelist"=>{"continent"=>[], "country"=>[], "ip"=>[], "ip_subnet"=>[]}, + # "maintenance"=>{"continent"=>[], "country"=>[], "ip"=>[], "ip_subnet"=>[]} } + def fetch_restrictions + enabled = Restriction.where(state: 'enabled').to_a + + Restriction::CATEGORIES.inject({}) do |table, category| + grouped_by_category = enabled.select { |r| r.category == category } + + grouped_by_scope = Restriction::SCOPES.inject({}) do |table, scope| + scope_restrictions = grouped_by_category.select { |r| r.scope == scope }.pluck(:value, :code) + table.tap { |t| t[scope] = scope_restrictions } + end + table.tap { |t| t[category] = grouped_by_scope } + end + end + + def deny_access(category, restriction) + Rails.logger.info("Access denied for ip #{request.remote_ip} because of #{restriction[0]} restriction") + access_error!("authz.restrict.#{category}", restriction[1]) + end + + def session + request.session + end + + # error for blacklisted routes + def access_error!(text, code) + response.status = code + response.body = { 'errors': [text] }.to_json + end + + def remote_ip + # default behaviour, IP from HTTP_X_FORWARDED_FOR + ip = request.remote_ip + + if Barong::App.config.gateway == 'akamai' + # custom header that contains only client IP + true_client_ip = request.env['HTTP_TRUE_CLIENT_IP'] + # take IP from TRUE_CLIENT_IP only if its not nil or empty + ip = true_client_ip unless true_client_ip.nil? || true_client_ip.empty? + end + + ip + end +end diff --git a/app/controllers/concerns/.keep b/app/controllers/concerns/.keep new file mode 100644 index 0000000..e69de29 diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb new file mode 100644 index 0000000..de6be79 --- /dev/null +++ b/app/helpers/application_helper.rb @@ -0,0 +1,2 @@ +module ApplicationHelper +end diff --git a/app/helpers/salted_crc32.rb b/app/helpers/salted_crc32.rb new file mode 100644 index 0000000..8a00cf0 --- /dev/null +++ b/app/helpers/salted_crc32.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class SaltedCrc32 + def self.generate_hash(value) + Zlib::crc32(value + Barong::App.config.crc32_salt) + end +end diff --git a/app/jobs/application_job.rb b/app/jobs/application_job.rb new file mode 100644 index 0000000..a009ace --- /dev/null +++ b/app/jobs/application_job.rb @@ -0,0 +1,2 @@ +class ApplicationJob < ActiveJob::Base +end diff --git a/app/mailers/application_mailer.rb b/app/mailers/application_mailer.rb new file mode 100644 index 0000000..26148f2 --- /dev/null +++ b/app/mailers/application_mailer.rb @@ -0,0 +1,4 @@ +# frozen_string_literal: true + +class ApplicationMailer < ActionMailer::Base +end diff --git a/app/mailers/postmaster.rb b/app/mailers/postmaster.rb new file mode 100644 index 0000000..95d2877 --- /dev/null +++ b/app/mailers/postmaster.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +class Postmaster < ApplicationMailer + layout 'mailer' + + def process_payload(params) + @record = params[:record] + @changes = params[:changes] + @user = params[:user] + @logo = params[:logo] + + sender = "#{Barong::App.config.sender_name} <#{Barong::App.config.sender_email}>" + + email_options = { + subject: params[:subject], + template_name: params[:template_name], + from: sender, + to: @user.email + } + + mail(email_options) + end +end diff --git a/app/models/ability.rb b/app/models/ability.rb new file mode 100644 index 0000000..ec12680 --- /dev/null +++ b/app/models/ability.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +# Full list of roles abilities could be found on docs/roles.md +class Ability + class << self + def abilities + @abilities ||= YAML.load_file("#{Rails.root}/config/abilities.yml") + end + + def admin_permissions + abilities['admin_permissions'] + end + + def roles + abilities['roles'] + end + end +end diff --git a/app/models/activity.rb b/app/models/activity.rb new file mode 100644 index 0000000..43af5e3 --- /dev/null +++ b/app/models/activity.rb @@ -0,0 +1,52 @@ +class Activity < ApplicationRecord + RESULTS = %w[succeed failed denied].freeze + CATEGORIES = %w[admin user].freeze + + belongs_to :user + has_one :target, primary_key: :target_uid, foreign_key: :uid, class_name: 'User' + + validates :user_ip, presence: true, allow_blank: false + validates :user_agent, presence: true, trusty_agent: true + validates :topic, presence: true + validates :result, presence: true, inclusion: { in: RESULTS } + validates :category, presence: true, inclusion: { in: CATEGORIES } + validate :target_user + + # this method allows to use all the methods of ::Browser module (platofrm, modern?, version etc) + def browser + Browser.new(user_agent) + end + + private + + def target_user + errors.add(:target_uid, :invalid) if target_uid.present? && User.where(uid: target_uid).empty? + errors.add(:target_uid, :not_allowed) if target_uid.present? && category.present? && category == 'user' + end + + def readonly? + !new_record? + end +end + +# == Schema Information +# +# Table name: activities +# +# id :bigint not null, primary key +# user_id :bigint not null +# target_uid :string(255) +# category :string(255) +# user_ip :string(255) not null +# user_agent :string(255) not null +# topic :string(255) not null +# action :string(255) not null +# result :string(255) not null +# data :text(65535) +# created_at :datetime +# +# Indexes +# +# index_activities_on_target_uid (target_uid) +# index_activities_on_user_id (user_id) +# diff --git a/app/models/admin_ability.rb b/app/models/admin_ability.rb new file mode 100644 index 0000000..40a13f8 --- /dev/null +++ b/app/models/admin_ability.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +class AdminAbility + include CanCan::Ability + + def initialize(user) + return if Ability.admin_permissions[user.role].nil? + + # Iterate through user permissions + Ability.admin_permissions[user.role].each do |action, models| + # Iterate through a list of user model access + models.each do |model| + can action.to_sym, model == 'all' ? model.to_sym : model.constantize + end + end + end +end diff --git a/app/models/api_key.rb b/app/models/api_key.rb new file mode 100644 index 0000000..c4ea48a --- /dev/null +++ b/app/models/api_key.rb @@ -0,0 +1,90 @@ +# frozen_string_literal: true + +class APIKey < ApplicationRecord + self.table_name = :apikeys + + include Vault::EncryptedModel + + ALGORITHMS = ['HS256'].freeze + JWT_OPTIONS = { + verify_expiration: true, + verify_iat: true, + verify_jti: true, + sub: 'api_key_jwt', + verify_sub: true, + iss: 'external', + verify_iss: true, + algorithm: 'RS256' + }.freeze + + + vault_lazy_decrypt! + + vault_attribute :secret + + serialize :scope, Array + + belongs_to :key_holder_account, polymorphic: true + + validates :kid, :secret, presence: true + validates :kid, uniqueness: true + validates :algorithm, inclusion: { in: ALGORITHMS } + + before_validation :assign_kid, if: :hmac? + before_validation :validate_key_holder_state, on: :create + before_validation :validate_api_key_state, on: :update + + scope :active, -> { where(state: 'active') } + + def assign_kid + return unless kid.blank? + + loop do + self.kid = random_kid + break unless APIKey.where(kid: kid).any? + end + end + + def random_kid + SecureRandom.hex(8) + end + + def hmac? + self.algorithm.include?('HS') + end + + def active? + self.state == 'active' + end + + private + + def validate_key_holder_state + errors.add(:key_holder_account, :invalid, message: 'non active state for key holder account') unless key_holder_account.active? + end + + def validate_api_key_state + errors.add(:state, :invalid, message: 'cant activate api key with disabled key holder account') if active? && !key_holder_account.active? + end +end + +# == Schema Information +# +# Table name: apikeys +# +# id :bigint not null, primary key +# key_holder_account_id :bigint unsigned, not null +# key_holder_account_type :string(255) default("User"), not null +# kid :string(255) not null +# algorithm :string(255) not null +# scope :string(255) +# secret_encrypted :string(1024) +# state :string(255) default("active"), not null +# created_at :datetime not null +# updated_at :datetime not null +# +# Indexes +# +# idx_apikey_on_account (key_holder_account_type,key_holder_account_id) +# index_apikeys_on_kid (kid) UNIQUE +# diff --git a/app/models/application_record.rb b/app/models/application_record.rb new file mode 100644 index 0000000..8a5259b --- /dev/null +++ b/app/models/application_record.rb @@ -0,0 +1,6 @@ +class ApplicationRecord < ActiveRecord::Base + + include Iso8601TimeFormat + + self.abstract_class = true +end diff --git a/app/models/city.rb b/app/models/city.rb new file mode 100644 index 0000000..2e46660 --- /dev/null +++ b/app/models/city.rb @@ -0,0 +1,32 @@ +class City < ApplicationRecord + belongs_to :province, required: true + has_one :profile + + validates :name, presence: true, + length: 1..255, + format: { + with: /\A[[:word:]\s\-']+\z/, + message: 'only allows letters, digits "-", "\'", and space' + } + +end + +# == Schema Information +# Schema version: 20210425062048 +# +# Table name: cities +# +# id :bigint not null, primary key +# name :string(255) +# province_id :bigint +# created_at :datetime not null +# updated_at :datetime not null +# +# Indexes +# +# index_cities_on_province_id (province_id) +# +# Foreign Keys +# +# fk_rails_ea36d40e0b (province_id => provinces.id) +# diff --git a/app/models/comment.rb b/app/models/comment.rb new file mode 100644 index 0000000..04d76d5 --- /dev/null +++ b/app/models/comment.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +class Comment < ApplicationRecord + belongs_to :user + + validates :title, :data, :author_uid, presence: true +end + +# == Schema Information +# +# Table name: comments +# +# id :bigint not null, primary key +# user_id :bigint unsigned, not null +# author_uid :string(16) not null +# title :string(64) not null +# data :text(65535) not null +# created_at :datetime not null +# updated_at :datetime not null +# +# Indexes +# +# index_comments_on_user_id (user_id) +# diff --git a/app/models/concerns/.keep b/app/models/concerns/.keep new file mode 100644 index 0000000..e69de29 diff --git a/app/models/concerns/data_is_json_validator.rb b/app/models/concerns/data_is_json_validator.rb new file mode 100644 index 0000000..2113376 --- /dev/null +++ b/app/models/concerns/data_is_json_validator.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +# Data json validation +class DataIsJsonValidator < ActiveModel::EachValidator + def validate_each(record, attribute, data) + return if data.nil? + + unless validate_data_is_json!(data) + record.errors.add(attribute, :invalid_format, message: 'data is not json compatible string') + end + end + + def validate_data_is_json!(data) + begin + JSON.parse(data) + true + rescue JSON::ParserError => e + false + end + end +end diff --git a/app/models/concerns/encryptable.rb b/app/models/concerns/encryptable.rb new file mode 100644 index 0000000..e41364d --- /dev/null +++ b/app/models/concerns/encryptable.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +module Encryptable + extend ActiveSupport::Concern + + class_methods do + def attr_encrypted(*attributes) + attributes.each do |attribute| + define_method("#{attribute}=".to_sym) do |value| + return if value.nil? + + self.public_send( + "#{attribute}_encrypted=".to_sym, + EncryptionService.encrypt(value) + ) + end + + define_method(attribute) do + value = self.public_send("#{attribute}_encrypted".to_sym) + EncryptionService.decrypt(value) if value.present? + end + end + end + end +end diff --git a/app/models/concerns/iso8601_time_format.rb b/app/models/concerns/iso8601_time_format.rb new file mode 100644 index 0000000..4d37651 --- /dev/null +++ b/app/models/concerns/iso8601_time_format.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +# Convert time to utc 8601 +module Iso8601TimeFormat + extend ActiveSupport::Concern + + def format_iso8601_time(time) + utc_time = time.respond_to?(:utc) ? time.utc : time + utc_time&.iso8601 + end +end diff --git a/app/models/concerns/model_caching.rb b/app/models/concerns/model_caching.rb new file mode 100644 index 0000000..77dc5c4 --- /dev/null +++ b/app/models/concerns/model_caching.rb @@ -0,0 +1,23 @@ +module ModelCaching + extend ActiveSupport::Concern + + def write_cache(action, value, expiration_time) + Rails.cache.write(cache_key_generator(action), value, expires_in: expiration_time.seconds) + end + + def read_cache(action) + Rails.cache.read(cache_key_generator(action)) + end + + def delete_cache(action) + Rails.cache.delete(cache_key_generator(action)) + end + + private + + def cache_key_generator(action) + class_name = self.class.name.to_s + object_id = id.to_s + "#{class_name}_#{object_id}_#{action}" + end +end diff --git a/app/models/concerns/trusty_agent_validator.rb b/app/models/concerns/trusty_agent_validator.rb new file mode 100644 index 0000000..1a83c77 --- /dev/null +++ b/app/models/concerns/trusty_agent_validator.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +# User agent validator +class TrustyAgentValidator < ActiveModel::EachValidator + def validate_each(record, _attribute, value) + browser = Browser.new(value) + return if browser.known? + + return record.data = { note: 'Detected suspicious browser' }.to_json if record.data.nil? + + record.data = JSON.parse(record.data).merge(note: 'Detected suspicious browser').to_json + end +end diff --git a/app/models/data_storage.rb b/app/models/data_storage.rb new file mode 100644 index 0000000..7277ea6 --- /dev/null +++ b/app/models/data_storage.rb @@ -0,0 +1,41 @@ +# frozen_string_literal: true + +# Data Storage model +class DataStorage < ApplicationRecord + BLACKLISTED_TITLES = %w[document label profile phone user].freeze + acts_as_eventable prefix: 'data_storage', on: %i[create update] + + belongs_to :user + + validates :title, :data, presence: true + validates_length_of :data, maximum: 5120 # maximum 5kb of data + validates :data, data_is_json: true + validates :title, uniqueness: { scope: :user_id, case_sensitive: false }, + inclusion: { in: UserStorageTitles.list }, exclusion: { in: BLACKLISTED_TITLES } + + def as_json_for_event_api + { + user: user.as_json_for_event_api, + title: title, + data: data, + created_at: format_iso8601_time(created_at), + updated_at: format_iso8601_time(updated_at) + } + end +end + +# == Schema Information +# +# Table name: data_storages +# +# id :bigint not null, primary key +# user_id :bigint unsigned, not null +# title :string(64) not null +# data :text(65535) not null +# created_at :datetime not null +# updated_at :datetime not null +# +# Indexes +# +# index_data_storages_on_user_id_and_title (user_id,title) UNIQUE +# diff --git a/app/models/document.rb b/app/models/document.rb new file mode 100644 index 0000000..15ee47d --- /dev/null +++ b/app/models/document.rb @@ -0,0 +1,100 @@ +# frozen_string_literal: true + +# User document model +class Document < ApplicationRecord + include Encryptable + + # acts_as_eventable prefix: 'document', on: %i[create] + + mount_uploader :upload, Barong::App.config.uploader + + enum state: { pending: 0, verified: 1, rejected: 2, replaced: 3 } + attr_encrypted :doc_number + + belongs_to :user + + validates :doc_type, :upload, presence: true + validates :doc_type, inclusion: { in: DocumentTypes.list } + validates :doc_category, inclusion: { in: DocumentTypes.category_list } + validates :doc_expire, presence: true, if: -> { Barong::App.config.required_docs_expire } + validates :metadata, data_is_json: true + validate :exist_verified + + validates :doc_number, length: { maximum: 128 }, + format: { + with: /\A[A-Za-z0-9\-\s]+\z/, + message: 'only allows letters and digits' + }, if: proc { |a| a.doc_number.present? } + + validate :doc_expire_not_in_the_past, if: -> { Barong::App.config.required_docs_expire } + before_save :start_document_kyc_verification, :save_doc_number_index + + attr_writer :update_labels + + def exist_verified + errors.add(:document, 'already have verified') if user.documents.find_by(state: 'verified', doc_type: doc_type).present? + end + + def as_json_for_event_api + { + user: user.as_json_for_event_api, + upload: CGI::escape(upload.url), + doc_type: doc_type, + doc_number: doc_number, + doc_expire: doc_expire, + metadata: metadata, + created_at: format_iso8601_time(created_at), + updated_at: format_iso8601_time(updated_at) + } + end + + def sub_masked_doc_number + doc_number.sub(/(?<=\A.{2})(.*)(?=.{2}\z)/) { |match| '*' * match.length } if doc_number + end + + private + + def start_document_kyc_verification + KycService.document_step(self) + end + + def update_labels + @update_labels.nil? ? true : @update_labels + end + + def doc_expire_not_in_the_past + return if doc_expire.blank? + + errors.add(:doc_expire, :invalid) if doc_expire < Date.current + end + + def save_doc_number_index + self.doc_number_index = SaltedCrc32.generate_hash(doc_number) if doc_number.present? + end +end + +# == Schema Information +# Schema version: 20210714111301 +# +# Table name: documents +# +# id :bigint not null, primary key +# user_id :bigint unsigned, not null +# upload :string(255) +# doc_type :string(255) +# doc_expire :date +# doc_number_encrypted :string(255) +# doc_number_index :bigint +# doc_issue :date +# doc_category :string(255) +# identificator :string(255) +# metadata :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# state :integer default("pending"), not null +# +# Indexes +# +# index_documents_on_doc_number_index (doc_number_index) +# index_documents_on_user_id (user_id) +# diff --git a/app/models/label.rb b/app/models/label.rb new file mode 100644 index 0000000..ff43c88 --- /dev/null +++ b/app/models/label.rb @@ -0,0 +1,142 @@ +# frozen_string_literal: true + +# Resposible for storing configurations +class Label < ApplicationRecord + # acts_as_eventable prefix: 'label', on: %i[create update] + + belongs_to :user + + SCOPES = HashWithIndifferentAccess.new(public: 'public', private: 'private') + + SCOPES.keys.each do |name| + define_method "#{name}?" do + scope == SCOPES[name] + end + end + + scope :with_private_scope, -> { where(scope: 'private') } + + validates :user_id, :key, :value, :scope, presence: true + validates :scope, + inclusion: { in: SCOPES.keys } + + validates :key, + length: 3..255, + format: { with: /\A[a-z0-9_-]+\z/ }, + uniqueness: { scope: %i[user_id scope] } + + validates :value, + length: 3..255, + format: { with: /\A[a-z0-9_-]+\z/ } + + validate :regard_kyc_steps + after_commit :update_state_if_label_defined, :update_level_if_label_defined, on: %i[create update] + after_commit :run_owner_mobile, on: %i[create update] + after_destroy :update_state_if_label_defined, :destroy_level_if_label_deleted + + before_validation :normalize_fields + + def as_json_for_event_api + { + id: id, + key: key, + value: value, + description: description, + user: user.as_json_for_event_api + } + end + + def kyc_wanted_point + point = Level.find_by(key: key) + raise "not found this key: `#{key}` in levels" unless point.present? + + [point.id, Level.sum_ex_points(point.id)] + end + + private + + def normalize_fields + self.key = key.to_s.downcase.squish + self.value = value.to_s.downcase.squish + end + + def update_state_if_label_defined + return unless scope == 'private' || previous_changes[:scope]&.include?('private') + + user.update_state + end + + def update_level_if_label_defined + return unless scope == 'private' || previous_changes[:scope]&.include?('private') + + user.update_level + # TODO must be clear witch step need notification + # send_document_review_notification if key == 'document' + end + + def destroy_level_if_label_deleted + # just kyc labels + if value == 'verified' && Level::KYC_LEVEL_KEYS.include?(key) + raise "can not delete kyc key: `#{key}`" + end + + update_level_if_label_defined + end + + # TODO: Fix it when EventAPI will be added. + def send_document_review_notification + if value == 'verified' + EventAPI.notify('system.document.verified', record: as_json_for_event_api) + elsif value == 'rejected' + EventAPI.notify('system.document.rejected', record: as_json_for_event_api) + end + end + + # level confirm by labels + # labels create from LEVEL table by key + # every key in level table has points as id + # so user must not has label out of its now level + def regard_kyc_steps + return unless scope == 'private' || previous_changes[:scope]&.include?('private') + + # just kyc labels + return unless ::BarongConfig.list['kyc_levels'].values.flatten.include?(key) + + next_level = user.level + 1 + # this means user has latest level now and dont need check it more + return if next_level > Level::LEVEL_POINTS.keys&.last&.to_i + + ask_point, ex_points = kyc_wanted_point + # check wanted point in correct area + raise 'regard steps in KYC' if (ask_point + ex_points) > Level::LEVEL_POINTS.dig(next_level.to_s) + end + + # just trigger for check owner mobile + def run_owner_mobile + return unless user.access_phone.present? + + if value == 'verified' && key == 'selfie' + KYC.const_get(Barong::App.config.kyc_provider.capitalize, false)::OwnerMobileWorker.perform_async(user.access_phone.id) + end + end +end + +# == Schema Information +# Schema version: 20210218135634 +# +# Table name: labels +# +# id :bigint not null, primary key +# user_id :bigint unsigned, not null +# key :string(255) not null +# value :string(255) not null +# scope :string(255) default("public"), not null +# description :string(255) +# created_at :datetime not null +# updated_at :datetime not null +# +# Indexes +# +# index_labels_on_user_id (user_id) +# index_labels_on_user_id_and_key_and_scope (user_id,key,scope) +# diff --git a/app/models/level.rb b/app/models/level.rb new file mode 100644 index 0000000..549efd1 --- /dev/null +++ b/app/models/level.rb @@ -0,0 +1,43 @@ +# frozen_string_literal: true + +# Label level mapping model +class Level < ApplicationRecord + validates :key, :value, :description, presence: true + validates :value, uniqueness: { scope: :key } + + # points calculate with sum ids of record + KYC_ONE_POINTS = ::BarongConfig.list['kyc_levels'][1].keys.sum + 1 + KYC_TWO_POINTS = KYC_ONE_POINTS + ::BarongConfig.list['kyc_levels'][2].keys.sum + KYC_THREE_POINTS = KYC_TWO_POINTS + ::BarongConfig.list['kyc_levels'][3].keys.sum + LEVEL_POINTS = { '1' => KYC_ONE_POINTS, '2' => KYC_TWO_POINTS, '3' => KYC_THREE_POINTS }.freeze + LEVEL_ID_BOUNDS = { '0' => 1, + '1' => ::BarongConfig.list['kyc_levels'][1].keys.last, + '2' => ::BarongConfig.list['kyc_levels'][2].keys.last, + '3' => ::BarongConfig.list['kyc_levels'][3].keys.last}.freeze + KYC_LEVEL_IDS = (1..::BarongConfig.list['kyc_levels'].values.last.keys.last).freeze + KYC_LEVEL_KEYS = ::BarongConfig.list['kyc_levels'].values.map(&:values).flatten + + scope :sum_ex_points, ->(wanted_id) { where('id < (?)', wanted_id).sum(:id) } + + class << self + def what_level(points) + return 0 if points < LEVEL_POINTS.dig('1') + + return 1 if points < LEVEL_POINTS.dig('2') + + 2 + end + end +end + +# == Schema Information +# +# Table name: levels +# +# id :bigint not null, primary key +# key :string(255) not null +# value :string(255) +# description :string(255) +# created_at :datetime not null +# updated_at :datetime not null +# diff --git a/app/models/permission.rb b/app/models/permission.rb new file mode 100644 index 0000000..14af2d8 --- /dev/null +++ b/app/models/permission.rb @@ -0,0 +1,35 @@ +# frozen_string_literal: true + +# Permissions model for RBAC +class Permission < ApplicationRecord + validates :role, :verb, :action, :path, presence: true + + before_validation :upcase_action_verb + + private + + def upcase_action_verb + return if action.blank? || verb.blank? + + self.action.upcase! + self.verb.upcase! + end +end + +# == Schema Information +# +# Table name: permissions +# +# id :bigint not null, primary key +# action :string(255) not null +# role :string(255) not null +# verb :string(255) not null +# path :string(255) not null +# topic :string(255) +# created_at :datetime not null +# updated_at :datetime not null +# +# Indexes +# +# index_permissions_on_topic (topic) +# diff --git a/app/models/phone.rb b/app/models/phone.rb new file mode 100644 index 0000000..0e9983c --- /dev/null +++ b/app/models/phone.rb @@ -0,0 +1,142 @@ +# frozen_string_literal: true + +# +# Class Phone +# +class Phone < ApplicationRecord + include Encryptable + + TWILIO_CHANNELS = %w[call sms].freeze + DEFAULT_COUNTRY_CODE_COUNT = 2 + + belongs_to :user + + enum state: { pending: 0, verified: 1, rejected: 2, replaced: 3 } + enum step: { access_phone: 0, owner_phone: 1, telephone: 2 } + enum category: { mobile: 0, landline: 1 } + + attr_encrypted :number + validates :number, phone: true + + before_create :generate_code + before_validation :parse_country + before_validation :sanitize_number + + before_save :save_number_index + after_commit :start_phone_kyc_verification, on: %i[create update] + scope :verified, -> { where.not(validated_at: nil) } + + # validate :validate_phone_number + + def validate_phone_number + return errors.add(:number, 'number is not a phone') if number.match(/\A..(9)\d+/) && self.phone? + end + + #FIXME: Clean code below + class << self + def sanitize(unsafe_phone) + unsafe_phone.to_s.gsub(/\D/, '') + end + + def parse(unsafe_phone) + Phonelib.parse self.sanitize(unsafe_phone) + end + + def valid?(unsafe_phone) + parse(unsafe_phone).valid? + end + + def valid_number(unsafe_phone) + parse(unsafe_phone).national.gsub(/\s+/, "").delete_prefix("0") + end + + def international(unsafe_phone) + parse(unsafe_phone).international(false) + end + + def find_by_number(number, attrs={}) + attrs.merge!(number_index: SaltedCrc32.generate_hash(number)) + find_by(attrs) + end + + def find_by_number!(number) + find_by!(number_index: SaltedCrc32.generate_hash(number)) + end + end + + def sub_masked_number + code_count = parse_code&.length + code_count = DEFAULT_COUNTRY_CODE_COUNT unless code_count + + if number.present? + number.sub(/(?<=\A.{#{code_count}})(.*)(?=.{4}\z)/) { |match| '*' * match.length } + else + number + end + end + + def check_owner_ship + jibit = JibitService.new + response = jibit.mobile_info(self.national_number, self.user.verified_profile.national_code) + + JSON.parse(response.body).dig('matched').present? + end + + def national_number + return if number.blank? + + ::Phonelib.parse(number).national.delete(' ').rjust(11, '0') + end + + private + + def start_phone_kyc_verification + ::KycService.phone_label_update(self) + end + + def generate_code + self.code = rand.to_s[2..6] + end + + def parse_country + # data = Phonelib.parse(number) + self.country = "IR" + end + + def parse_code + data = Phonelib.parse(number) + data.country_code + end + + def sanitize_number + self.number = Phone.sanitize(number) + end + + def save_number_index + self.number_index = SaltedCrc32.generate_hash(number) if number.present? + end +end + +# == Schema Information +# Schema version: 20210425062048 +# +# Table name: phones +# +# id :bigint not null, primary key +# user_id :integer unsigned, not null +# country :string(255) not null +# code :string(5) +# number_encrypted :string(255) not null +# number_index :bigint not null +# validated_at :datetime +# created_at :datetime not null +# updated_at :datetime not null +# category :integer not null +# state :integer default("pending") +# step :integer default("access_phone") +# +# Indexes +# +# index_phones_on_number_index (number_index) +# index_phones_on_user_id (user_id) +# diff --git a/app/models/profile.rb b/app/models/profile.rb new file mode 100644 index 0000000..4b881f1 --- /dev/null +++ b/app/models/profile.rb @@ -0,0 +1,182 @@ +# frozen_string_literal: true + +# Profile model +# in original version user has only one drafted or submitted at time but can has many verified and rejected +# but in my version user can only one verified profile too +# only drafted profile editable, so dont send confirm param in creation or update time +class Profile < ApplicationRecord + include Encryptable + + # acts_as_eventable prefix: 'profile', on: %i[create update] + + belongs_to :user + belongs_to :city, required: false + + enum state: { drafted: 0, submitted: 1, verified: 3, rejected: 4 } + + EDITABLE_PARAMS = { drafted: %w[first_name last_name dob address postcode city country metadata national_code] }.freeze + OPTIONAL_PARAMS = %w[first_name last_name dob address postcode city country national_code].freeze + + attr_encrypted :first_name + attr_encrypted :last_name + attr_encrypted :dob + attr_encrypted :address + attr_encrypted :national_code + + validates :first_name, presence: true, + length: 1..255, + format: { + with: /\A[[:word:]\s\-']+\z/, + message: 'only allows letters, digits "-", "\'", and space' + }, + if: proc { |a| a.first_name.present? } + validates :last_name, presence: true, + length: 1..255, + format: { + with: /\A[[:word:]\s\-']+\z/, + message: 'only allows letters, digits "-", "\'", and space' + }, + if: proc { |a| a.last_name.present? } + + validates :city, presence: false + + validate :validate_country_format, if: ->(p) { p.country.present? } + validates :postcode, length: 2..255, + format: { + with: /\A[[:word:]\s\-]+\z/, + message: 'only allows letters, digits, "-" and space' + }, + if: proc { |a| a.postcode.present? } + + validates :address, length: 1..255, + format: { + with: /\A[[:word:]\s\-\–\,\.~;\/:\#"\\&\')\(]+\z/, + message: 'only allows letters, digits "-", "–", "\'", ".", ",", "#", ":", ";", "&" and space' + }, + if: proc { |a| a.address.present? } + + validates :national_code, length: { is: 10 }, + format: { with: /\A\d+\z/, message: 'Ten Integer only. No sign allowed.' } + + validates :metadata, data_is_json: true + validate :profile_state!, on: :create + # validate :profile_update!, on: :update + validate :dob_not_in_the_future + + after_commit :start_profile_kyc_verification + + scope :kept, -> { joins(:user).where(users: { discarded_at: nil }) } + + before_validation do + squish_spaces + end + + def full_name + "#{first_name} #{last_name}" + end + + def reverse_full_name + "#{last_name} #{first_name}" + end + + def sub_masked_last_name + last_name.sub(/(?<=\A.{1})(.*)/) { |match| '*' * match.length } if last_name + end + + def sub_masked_national_code + national_code.sub(/(?<=\A.{5})(.*)/) { |match| '*' * match.length } if national_code + end + + def sub_masked_dob + dob.to_s.sub(/(?<=\A.{8})(.*)/) { |match| '*' * match.length } if dob + end + + def as_json_for_event_api + { + user: user.as_json_for_event_api, + first_name: first_name, + last_name: last_name, + dob: format_iso8601_time(dob), + address: address, + postcode: postcode, + city: city, + country: country, + metadata: metadata, + created_at: format_iso8601_time(created_at), + updated_at: format_iso8601_time(updated_at) + } + end + + + private + + def validate_country_format + return if ISO3166::Country.find_country_by_alpha2(country) || + ISO3166::Country.find_country_by_alpha3(country) + + errors.add(:country, 'must have alpha2 or alpha3 format') + end + + def squish_spaces + self.first_name = first_name&.squish + self.last_name = last_name&.squish + self.postcode = postcode&.squish + end + + def profile_state! + # No limits for storing drafted and rejected profiles + # return if state.in?(%w[drafted rejected]) + return if state.in?(%w[drafted rejected]) + + # This check is actual for profile states [drafted submitted] + # User cant create submitted or verified profile, when already had one of them + user_profiles_states = user.profiles.pluck(:state) + errors.add(:state, :exists, message: 'already exists') unless (user_profiles_states & %w[submitted verified]).empty? + end + + def profile_update! + # we cant update rejected or verified profile + errors.add(:state, :exists, message: 'just edit submitted') if %w[rejected verified].include?(state_was) + end + + def start_profile_kyc_verification + KycService.profile_step(self) + end + + def dob_not_in_the_future + return if dob.nil? + + self.dob = dob.to_date + return errors.add(:dob, :invalid_format, message: 'invalid date format') unless dob.is_a?(Date) + return errors.add(:dob, :invalid, message: 'cant be in future') if dob > Date.current + end +end + +# == Schema Information +# Schema version: 20210425062048 +# +# Table name: profiles +# +# id :bigint not null, primary key +# user_id :bigint +# author :string(255) +# applicant_id :string(255) +# first_name_encrypted :string(1024) +# last_name_encrypted :string(1024) +# dob_encrypted :string(255) +# address_encrypted :string(1024) +# postcode :string(255) +# city :string(255) +# country :string(255) +# state :integer default("drafted"), unsigned +# metadata :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# national_code_encrypted :string(255) +# city_id :bigint +# +# Indexes +# +# index_profiles_on_city_id (city_id) +# index_profiles_on_user_id (user_id) +# diff --git a/app/models/province.rb b/app/models/province.rb new file mode 100644 index 0000000..7c377aa --- /dev/null +++ b/app/models/province.rb @@ -0,0 +1,21 @@ +class Province < ApplicationRecord + has_many :cities + + validates :name, presence: true, + length: 1..255, + format: { + with: /\A[[:word:]\s\-']+\z/, + message: 'only allows letters, digits "-", "\'", and space' + } +end + +# == Schema Information +# Schema version: 20210420111532 +# +# Table name: provinces +# +# id :bigint not null, primary key +# name :string(255) +# created_at :datetime not null +# updated_at :datetime not null +# diff --git a/app/models/restriction.rb b/app/models/restriction.rb new file mode 100644 index 0000000..3fcbbce --- /dev/null +++ b/app/models/restriction.rb @@ -0,0 +1,56 @@ +# frozen_string_literal: true + +class Restriction < ApplicationRecord + # please, note that order in CATEGORIES contstant defines the ierarchy + CATEGORIES = %w[whitelist maintenance blacklist blocklogin].freeze + SCOPES = %w[continent country ip ip_subnet all] + # 423 Locked 403 Forbidden 401 Forbidden + DEFAULT_CODES = { continent: 423, country: 423, ip_subnet: 403, ip: 401, all: 401 }.stringify_keys.freeze + STATES = %w[enabled disabled] + SUBNET_REGEX = /\A([0-9]{1,3}\.){3}[0-9]{1,3}\/([0-9]|[1-2][0-9]|3[0-2])\z/ + + validates :scope, :value, :category, presence: true + validates :scope, inclusion: { in: SCOPES } + validates :state, inclusion: { in: STATES } + validates :category, inclusion: { in: CATEGORIES } + + validates_uniqueness_of :value, scope: %i[scope category] + + validates :value, if: -> { scope == 'ip' }, + format: { :with => Resolv::IPv4::Regex } + + validates :value, if: -> { scope == 'ip_subnet' }, + format: { :with => SUBNET_REGEX } + + before_validation :assign_code + + after_save :destroy_sessions + + private + + def destroy_sessions + if category == 'blocklogin' && state == 'enabled' + Rails.cache.delete_matched('*_session_id*') if state_previously_changed? || created_at_previously_changed? + end + end + + def assign_code + return unless code.blank? || category == 'whitelist' + + self.code = category == 'maintenance' ? 471 : DEFAULT_CODES[scope] + end +end + +# == Schema Information +# +# Table name: restrictions +# +# id :bigint not null, primary key +# category :string(255) not null +# scope :string(64) not null +# value :string(64) not null +# code :integer +# state :string(16) default("enabled"), not null +# created_at :datetime not null +# updated_at :datetime not null +# diff --git a/app/models/service_account.rb b/app/models/service_account.rb new file mode 100644 index 0000000..66d31a0 --- /dev/null +++ b/app/models/service_account.rb @@ -0,0 +1,93 @@ +# frozen_string_literal: true + +# ServiceAccount model +class ServiceAccount < ApplicationRecord + UID_PREFIX = 'SI' + + belongs_to :user, foreign_key: "owner_id", optional: true + has_many :api_keys, as: :key_holder_account, dependent: :destroy, class_name: 'APIKey' + + validate :role_exists + validate :email_n_uid_uniqueness + validates :email, email: true, presence: true, uniqueness: true + validates :uid, presence: true, uniqueness: true + + scope :active, -> { where(state: 'active') } + + after_update :disable_api_keys + before_create :assign_state, if: -> { user.present? } + # System will assign user state only if there is no changes of state during update + before_update :assign_state, if: -> { user.present? && !state_changed? } + before_validation :assign_level, if: -> { user.present? } + before_validation :assign_uid + before_validation :assign_email + + def active? + self.state == 'active' + end + + def disable_api_keys + if state_previously_changed? && state == 'disabled' + api_keys.active.each do |key| + key.update(state: 'inactive') + end + end + end + + def as_payload + as_json(only: %i[uid email role level state]) + end + + def role_exists + return if Permission.pluck(:role).include?(role) + + errors.add(:role, 'doesnt_exist') + end + + def email_n_uid_uniqueness + errors.add('email_or_uid', 'not_uniq') if User.find_by(email: email) || User.find_by(uid: uid) + end + + private + + def assign_email + return unless email.blank? + + name, domain = user.email.split('@') + self.email = "#{name}+#{self.uid}@#{domain}" + end + + def assign_uid + return unless uid.blank? + + self.uid = UIDGenerator.generate(UID_PREFIX) + end + + def assign_state + self.state = user.state + end + + def update_state + !state_changed? + end + + def assign_level + self.level = user.level + end +end + +# == Schema Information +# Schema version: 20210218135634 +# +# Table name: service_accounts +# +# id :bigint not null, primary key +# uid :string(255) not null +# owner_id :bigint unsigned +# email :string(255) not null +# role :string(255) default("service_account"), not null +# level :integer default(0), not null +# state :string(255) default("pending"), not null +# created_at :datetime not null +# updated_at :datetime not null +# diff --git a/app/models/treasury.rb b/app/models/treasury.rb new file mode 100644 index 0000000..34199a8 --- /dev/null +++ b/app/models/treasury.rb @@ -0,0 +1,129 @@ +# frozen_string_literal: true + +# Treasury model +class Treasury < ApplicationRecord + + belongs_to :user + + enum state: { drafted: 0, submitted: 1, processing: 2, verified: 3, rejected: 4, disable: 5 } + enum kind: { card: 0, iban: 2 } + + validates :title, uniqueness: { scope: [:user_id, :kind], case_sensitive: false }, allow_blank: true + + validates :data, length: { is: 16 }, if: -> { card? }, allow_blank: false, + format: { with: /\A\d+\z/, message: 'Sixteen Integer only. No sign allowed.' } + validates :data, uniqueness: true, length: { is: 26 }, if: -> { iban? }, allow_blank: false, + format: { with: /\AIR\d+\z/i, message: 'Twenty-four Integer only. No sign allowed.' } + + validate :data, :one_data_verified? + + validates :title, presence: true + + after_commit :start_treasury_kyc_verification, on: %i[create update] + before_update :check_at_least_one_verified, if: -> { state == 'disable' } + before_destroy :check_at_least_one_verified + + + scope :active, -> { where.not(state: 'disable') } + + def one_data_verified? + errors.add(:data, 'this card is already verified') if Treasury.find_by(data: data, state: 'verified').present? + end + + def sub_masked_data + data.sub(/(?<=\A.{6})(.*)/) { |match| '*' * match.length } if data + end + + # update without callback + def ownership! + if ownership + update_column(:state, 'verified') + else + update_column(:state, 'rejected') + end + end + + def ownership + # full_name = if kind == 'card' + # user.profiles.last.reverse_full_name.delete(' ') + # else + # user.profiles.last.full_name.delete(' ') + # end + return unless user.verified_profile.present? + + full_name = user.verified_profile.full_name.delete(' ') + owner_name.delete(' ').percent_match(full_name) >= 80 + end + + def jresult + return nil unless result.present? + + JSON.parse(result) + end + + def old_owner_name + return nil unless jresult.present? + + kind == 'iban' ? "#{jresult.dig('firstName')} #{jresult.dig('lastName')}" : jresult.dig('ownerName') + end + + def owner_name + return unless jresult.present? + + if kind == 'iban' + # JIBIT return array in names of owner + names = jresult.dig('ibanInfo', 'owners')&.last + "#{names.dig('firstName')} #{names.dig('lastName')}" + else + jresult.dig('cardInfo', 'ownerName') + end + end + + def disable + update(state: 'disable') + end + + def enable + update(state: 'submitted') + end + + private + + def start_treasury_kyc_verification + ::KycService.treasury_label_update(self) + end + + def check_at_least_one_verified + # return if state_was == 'verified' + + raise 'verified treasury cant be deleted' if state == 'verified' + + verified_treasuries = Treasury.where(user: user, kind: kind, state: 'verified') + raise 'at least one verified treasury' if verified_treasuries.present? && verified_treasuries.count <= 1 + + # delete Corresponding label if not verified + treasury_label = user.labels.find_by(key: kind) + treasury_label.destroy unless treasury_label.value == 'verified' + end + +end + +# == Schema Information +# Schema version: 20210811064241 +# +# Table name: treasuries +# +# id :bigint not null, primary key +# user_id :bigint unsigned, not null +# title :string(128) +# data :string(255) not null +# result :text(65535) +# state :integer default("drafted"), unsigned, not null +# kind :integer default("card"), unsigned, not null +# created_at :datetime not null +# updated_at :datetime not null +# +# Indexes +# +# index_treasuries_on_user_id (user_id) +# diff --git a/app/models/user.rb b/app/models/user.rb new file mode 100644 index 0000000..46644d0 --- /dev/null +++ b/app/models/user.rb @@ -0,0 +1,287 @@ +# frozen_string_literal: true + +# User model +class User < ApplicationRecord + acts_as_eventable prefix: 'user', on: %i[create update] + + include ModelCaching + CHANGE_PASS_ATTEMPTS = 3 + has_secure_password + + has_many :profiles, dependent: :destroy + has_many :phones, dependent: :destroy + has_many :data_storages, dependent: :destroy + has_many :comments, dependent: :destroy + has_many :documents, dependent: :destroy + has_many :labels, dependent: :destroy + has_many :activities, dependent: :destroy + has_many :service_accounts, dependent: :destroy, foreign_key: 'owner_id' + has_many :api_keys, dependent: :destroy, as: :key_holder_account, class_name: 'APIKey' + has_many :treasuries, dependent: :destroy + + validates_length_of :data, maximum: 1024 + validate :role_exists + validate :referral_exists + validates :data, data_is_json: true + validates :email, email: true, presence: true, uniqueness: true + validates :uid, presence: true, uniqueness: true + validates :password, presence: true, if: :should_validate? + validate :validate_pass! + + scope :active, -> { where(state: 'active') } + scope :with_pending_or_replaced_docs, -> { self.joins(:labels).where(labels: + { key: 'document', value: ['pending', 'replaced'], scope: 'private' }) } + + before_validation :assign_uid + before_validation :generate_password, on: :create + after_update :disable_api_keys + after_update :disable_service_accounts + before_save :notfiy_new_level, if: :level_changed? + before_save :notify_changed_otp, if: :otp_changed? + + def notfiy_new_level + ::AMQP::Queue.enqueue_event("private" , self.uid, 'kyc', {msg: "new level is #{level}"}) + end + + def notify_changed_otp + ::AMQP::Queue.enqueue_event("private" , self.uid, 'kyc', {msg: "otp state is #{otp}"}) + end + + def generate_password + self.password = SecureRandom.base64(30) unless password + end + + def validate_pass! + return unless (new_record? && password.present?) || password.present? + + validation_result = PasswordStrengthChecker.validate!(password) + errors.add(:password, validation_result) unless validation_result == 'strong' + end + + def disable_service_accounts + if state != 'active' + service_accounts.each do |account| + account.update(state: state) + end + end + end + + def disable_api_keys + if otp_previously_changed? && otp == false || state_previously_changed? && state != 'active' + service_accounts.each do |service_account| + service_account.api_keys.active.each do |key| + key.update(state: 'inactive') + end + end + api_keys.active.each do |key| + key.update(state: 'inactive') + end + end + end + + def active? + self.state == 'active' + end + + def superadmin? + self.role == 'superadmin' + end + + def role_exists + return if Permission.pluck(:role).include?(role) + + errors.add(:role, 'doesnt_exist') + end + + # Check if refferal exist for assignment + def referral_exists + errors.add(:referral_id, 'doesnt_exist') if referral_id.present? && User.find_by(id: referral_id).blank? + end + + def referral_uid + user = User.find_by(id: referral_id) + return if user.nil? + + user.uid + end + + def role + super.inquiry + end + + def should_validate? + new_record? || password.present? + end + + def kyc_info + user_points = 0 + last_level = 0 + tags = labels.with_private_scope.map { |l| [l.key, l.value].join ':' } + levels = Level.all.order(id: :asc) + levels.each do |lvl| + # lvl.value always == 'verified' + # so just verified label accepted + break unless tags.include?(lvl.key + ':' + lvl.value) + + user_points += lvl.id + last_level = lvl.id + end + { points: user_points.to_i, step: last_level.to_i, level: ::Level.what_level(user_points).to_i } + end + + def update_level + update(level: Level.what_level(kyc_info.dig(:points))) unless level == kyc_info.dig(:level) + end + + def update_state + @resulting_state = 'pending' + + # check if user has all required labels for activation + @resulting_state = 'active' if labels_include?(BarongConfig.list['activation_requirements']) + + # FIXME BarongConfig should be a feature of Barong::App + BarongConfig.list['state_triggers']&.each do |state, triggers| + triggers.each { |trigger| + # #TODO please fix it + # if my key level is bank : user become banned + labels.pluck(:key).each { |label| @resulting_state = state if label.start_with?(trigger) } + } + end + update(state: @resulting_state) if @resulting_state != self.state + end + + # check if given key: values hash is a subset of private user labels + def labels_include?(labels_hash) + labels_hash <= private_labels_to_hash + end + + # Select all key-value pairs from user labels with private scope, merge in one hash + def private_labels_to_hash + key_value_arr = self.labels.with_private_scope.map do + |l| { l.key => l.value } + end + key_value_hash = key_value_arr.inject(:merge) + key_value_hash || {} + end + + def as_json_for_event_api + { + uid: uid, + email: email, + role: role, + level: level, + otp: otp, + state: state, + referral_uid: referral_uid, + created_at: format_iso8601_time(created_at), + updated_at: format_iso8601_time(updated_at) + } + end + + def as_payload + referral_uid = self.class.find_by(referral_id: referral_id).uid if referral_id.present? + as_json(only: %i[uid email role level state otp]).merge( + 'referral_uid' => referral_uid, + 'last_change_pass' => change_pass_time, + 'cards' => cards&.pluck('data'), + 'ibans' => ibans&.pluck('data') + ) + end + + def language + if data.blank? + Barong::App.config.default_language.upcase + else + JSON.parse(data)['language'].upcase || Barong::App.config.default_language.upcase + end + end + + def verified_profile + profiles&.find_by(state: 'verified') + end + + def submitted_profile + profiles&.find_by(state: 'submitted') + end + + def drafted_profile + profiles&.where(state: 'drafted').last + end + + def front_icard + documents.where(doc_type: 'Identity card', doc_category: 'front_side')&.last + end + + def selfie + documents.where(doc_type: 'Selfie', doc_category: 'front_side')&.last + end + + def cards + treasuries.where(kind: :card, state: :verified) + end + + def ibans + treasuries.where(kind: :iban, state: :verified) + end + + def submitted_treasuries + treasuries&.where(state: 'submitted') + end + + def last_password_activity + activities.where(action: ['password reset', 'password change'], result: 'succeed', topic: 'password') + .order('created_at DESC')&.last + end + + def change_pass_time + last_password_activity&.created_at + end + + def access_phone + phones.where(step: 'access_phone', category: 'mobile')&.last + end + + def mobile(state = nil) + return phones.where(category: 'mobile').last unless state.present? + + phones.where(category: 'mobile', state: state)&.last + end + + def landline + return phones.where(category: 'landline').last unless step.present? + + phones.where(category: 'landline', step: step).last + end + + private + + def assign_uid + return unless uid.blank? + + self.uid = UIDGenerator.generate(Barong::App.config.uid_prefix) + end +end + +# == Schema Information +# Schema version: 20210425062048 +# +# Table name: users +# +# id :bigint not null, primary key +# uid :string(255) not null +# email :string(255) not null +# password_digest :string(255) not null +# role :string(255) default("member"), not null +# data :text(65535) +# level :integer default(0), not null +# otp :boolean default(FALSE) +# state :string(255) default("pending"), not null +# referral_id :bigint +# created_at :datetime not null +# updated_at :datetime not null +# +# Indexes +# +# index_users_on_email (email) UNIQUE +# index_users_on_uid (uid) UNIQUE +# diff --git a/app/services/api_keys_verifier.rb b/app/services/api_keys_verifier.rb new file mode 100644 index 0000000..7848682 --- /dev/null +++ b/app/services/api_keys_verifier.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +class APIKeysVerifier + def initialize(params = {}) + @kid = params[:kid] + @signature = params[:signature] + @nonce = params[:nonce] || nil + @api_key = APIKey.find_by!(kid: @kid) + end + + def verify_hmac_payload? + data = @nonce.to_s + @kid + algorithm = 'SHA' + @api_key.algorithm[2..4] + true_signature = OpenSSL::HMAC.hexdigest(algorithm, @api_key.secret, data) + true_signature == @signature + end +end diff --git a/app/services/captcha_service.rb b/app/services/captcha_service.rb new file mode 100644 index 0000000..86c6468 --- /dev/null +++ b/app/services/captcha_service.rb @@ -0,0 +1,66 @@ +# frozen_string_literal: true + +require 'digest' +require 'net/http' + +module CaptchaService + # Google recaptcha verifier + class RecaptchaVerifier + include Recaptcha::Adapters::ControllerMethods + + attr_reader :request + + def initialize(request:) + @request = request + end + + def response_valid?(skip_remote_ip:, response:) + # according to changes in v2 support https://github.com/ambethia/recaptcha#recaptcha-v2-api-and-usage + # method comes from Recaptcha::Adapters::ControllerMethods + # https://github.com/ambethia/recaptcha/blob/master/lib/recaptcha/adapters/controller_methods.rb#L10 + verify_recaptcha(secret_key: Barong::App.config.recaptcha_secret_key, + model: User, + skip_remote_ip: skip_remote_ip, + response: response) + end + end + + # Geetest.com captcha verifier + class GeetestVerifier + def initialize + @api = 'http://api.geetest.com' + @validate_path = '/validate.php' + @register_path = '/register.php' + @geetest_id = Barong::App.config.geetest_id + @geetest_key = Barong::App.config.geetest_key + end + + def validate(response) + md5 = Digest::MD5.hexdigest(@geetest_key + 'geetest' + response['geetest_challenge']) + if response['geetest_validate'] == md5 + back = begin + post(@api + @validate_path, seccode: response['geetest_seccode']) + rescue StandardError + '' + end + return back == Digest::MD5.hexdigest(response['geetest_seccode']) + end + false + end + + def register + challenge = get(@api + @register_path + "?gt=#{@geetest_id}") + { gt: @geetest_id, challenge: Digest::MD5.hexdigest(challenge + @geetest_key) } + rescue StandardError + '' + end + + def get(uri) + Net::HTTP.get_response(URI(uri)).body + end + + def post(uri, data) + Net::HTTP.post_form(URI(uri), data).body + end + end +end diff --git a/app/services/encryption_service.rb b/app/services/encryption_service.rb new file mode 100644 index 0000000..b5b5211 --- /dev/null +++ b/app/services/encryption_service.rb @@ -0,0 +1,75 @@ +# frozen_string_literal: true + +class EncryptionService + # Example: 202040 + # Week number starts from 0 + def self.current_salt + Time.now.strftime('%Y%W') + end + + def self.pack(salt, value) + [salt, value].join('.') + end + + def self.unpack(str) + raise "Invalid encrypted value: #{str}" unless str =~ (/(\w*)\.(.*)/) + [$1, $2] + end + + def self.encrypt(value) + # Get current salt + salt = current_salt + # Get or generate new master key from salt + current_key = get_master_key(salt) + # Encrypt attribute value + encrypted_key = encryptor(current_key).encrypt_and_sign(value) + # Add salt before encrypted value + pack(salt, encrypted_key) + end + + def self.decrypt(value) + # Unpack salt and encrypted_key + salt, encrypted_key = unpack(value) + # Get master key from salt + master_key = get_master_key(salt) + # Decrypt encrypted value for attribute + encryptor(master_key).decrypt_and_verify(encrypted_key) + end + + private + + def self.encryptor(key) + ActiveSupport::MessageEncryptor.new(key) + end + + def self.get_master_key(salt) + @cache ||= {} + # Delete keys with expired date + delete_expired_keys + + unless @cache[salt] + # Initialize hash for specific salt + @cache[salt] = {} + + # Put key value from key generator + @cache[salt]['key'] = ActiveSupport::KeyGenerator.new( + ENV.fetch('SECRET_KEY_BASE') + ).generate_key(salt, ActiveSupport::MessageEncryptor.key_len) + + # Put expire date for specific key + @cache[salt]['expire_date'] = 1.week.from_now + end + + @cache[salt]['key'] + end + + def self.delete_expired_keys + return unless @cache.is_a?(Hash) + + # Iterate through all @cache values + @cache.each do |salt, values| + # Delete key if expire date expired + @cache.delete(salt) if values['expire_date'].present? && values['expire_date'] < Time.now + end + end +end diff --git a/app/services/event_mailer.rb b/app/services/event_mailer.rb new file mode 100644 index 0000000..1c9df27 --- /dev/null +++ b/app/services/event_mailer.rb @@ -0,0 +1,219 @@ +# frozen_string_literal: true + +require 'bunny' +require 'ostruct' + +class EventMailer + Error = Class.new(StandardError) + + class VerificationError < Error; end + + def initialize(events, exchanges, keychain) + @exchanges = exchanges + @keychain = keychain + @events = events + + Kernel.at_exit { unlisten } + end + + def call + listen + end + + private + + def listen + unlisten + + @bunny_session = Bunny::Session.new(rabbitmq_credentials).tap do |session| + session.start + Kernel.at_exit { session.stop } + end + + @bunny_channel = @bunny_session.channel + # Delete old queue if some exists + @bunny_channel.queue_delete('barong.postmaster.event.mailer') if @bunny_session.queue_exists?('barong.postmaster.event.mailer') + + # Define fanout exchanges which will broadcast + # all the messages they receives to all the queues they know + retry_exchange = @bunny_channel.fanout('barong.event.mailer.retry.exchange') + main_exchange = @bunny_channel.fanout('barong.event.mailer.main.exchange') + + queue = @bunny_channel.queue('barong.event.mailer.main', auto_delete: false, durable: true, + arguments: { + :'x-dead-letter-exchange' => retry_exchange.name, + } + ) + queue.bind(main_exchange) + + retry_queue = @bunny_channel.queue('barong.event.mailer.retry', auto_delete: false, durable: true, + arguments: { + :'x-dead-letter-exchange' => main_exchange.name, + :'x-message-ttl' => 120000 # will trigger retry every 2 minutes + }) + retry_queue.bind(retry_exchange) + + @events.each do |event| + exchange_name = @exchanges[event[:exchange].to_sym][:name] + exchange = @bunny_channel.direct(exchange_name) + + queue.bind(exchange, routing_key: event[:key]) + end + + Rails.logger.info { 'Listening for events.' } + queue.subscribe(manual_ack: true, block: true, &method(:handle_message)) + end + + def unlisten + if @bunny_session || @bunny_channel + Rails.logger.info { 'No longer listening for events.' } + end + + @bunny_channel&.work_pool&.kill + @bunny_session&.stop + ensure + @bunny_channel = nil + @bunny_session = nil + end + + def algorithm_verification_options(signer) + { algorithms: @keychain[signer][:algorithm] } + end + + def jwt_public_key(signer) + OpenSSL::PKey.read(Base64.urlsafe_decode64(@keychain[signer][:value])) + end + + def rabbitmq_credentials + if Barong::App.config.event_api_rabbitmq_url.present? + Barong::App.config.event_api_rabbitmq_url + else + { + host: Barong::App.config.event_api_rabbitmq_host, + port: Barong::App.config.event_api_rabbitmq_port, + username: Barong::App.config.event_api_rabbitmq_username, + password: Barong::App.config.event_api_rabbitmq_password + } + end + end + + def handle_message(delivery_info, _metadata, payload) + Rails.logger.info { "Start handling a message" } + Rails.logger.info { "\nPayload: \n #{payload} \n\n Metadata: \n #{_metadata} \n\n Delivery info: \n #{delivery_info} \n" } + exchange = @exchanges.select { |_, ex| ex[:name] == delivery_info[:exchange] } + + # In case of retry message + # we should get exchange name from _metadata info + if exchange.empty? + exchange_name = _metadata[:headers]['x-death'][1]['exchange'] + exchange = @exchanges.select { |_, ex| ex[:name] == exchange_name } + end + + exchange_id = exchange.keys.first.to_s + signer = exchange[exchange_id.to_sym][:signer] + + result = verify_jwt(payload, signer.to_sym) + + raise VerificationError, "Failed to verify signature from #{signer}." \ + unless result[:verified].include?(signer.to_sym) + + config = @events.select do |event| + event[:key] == delivery_info[:routing_key] && + event[:exchange] == exchange_id + end.first + + event = result[:payload].fetch(:event) + obj = JSON.parse(event.to_json, object_class: OpenStruct) + + user = User.includes(:profiles).find_by(uid: obj.record.user.uid) + language = user.language.downcase.to_sym + Rails.logger.info { "User #{user.email} has '#{language}' email language" } + template_config = config[:templates].transform_keys(&:downcase) + + unless template_config.keys.include?(language) + Rails.logger.error { "Language #{language} is not supported. Skipping." } + return + end + + if config[:expression].present? && skip_event(event, config[:expression]) + Rails.logger.info { "Event #{obj.name} skipped" } + return + end + + params = { + logo: Barong::App.config.smtp_logo_link, + subject: template_config[language][:subject], + template_name: template_config[language][:template_path], + record: obj.record, + changes: obj.changes, + user: user + } + + Postmaster.process_payload(params).deliver_now + + # Acknowledges a message + # Acknowledged message is completely removed from the queue + @bunny_channel.ack(delivery_info.delivery_tag) + rescue StandardError => e + Rails.logger.error { e.inspect } + + if e.is_a?(JWT::ExpiredSignature) || e.is_a?(JWT::VerificationError) || e.is_a?(VerificationError) + # Acknowledges a message + @bunny_channel.ack(delivery_info.delivery_tag) + else + # Rejects a message + # A rejected message dropped by RabbitMQ and goes to dead letter exchange queue + @bunny_channel.reject(delivery_info.delivery_tag) + end + + unlisten if db_connection_error?(e) + end + + def verify_jwt(payload, signer) + options = algorithm_verification_options(signer) + JWT::Multisig.verify_jwt JSON.parse(payload), { signer => jwt_public_key(signer) }, + options.compact + end + + def skip_event(event, expression) + # valid operators: and / or / not + operator = expression.keys.first.downcase + # { field_name: field_value } + values = expression[operator] + + # return array of boolean [false, true] + res = values.keys.map do |field_name| + safe_dig(event, field_name.to_s.split('.')) == values[field_name] + end + + # all? works as AND operator, any? works as OR operator + return false if (operator == :and && res.all?) || (operator == :or && res.any?) || + (operator == :not && !res.all?) + + return true if operator == :not && res.all? + + true + end + + def db_connection_error?(exception) + exception.is_a?(Mysql2::Error::ConnectionError) || exception.cause.is_a?(Mysql2::Error) + end + + def safe_dig(hash, keypath, default = nil) + stringified_hash = JSON.parse(hash.to_json) + stringified_keypath = keypath.map(&:to_s) + + stringified_keypath.reduce(stringified_hash) do |accessible, key| + return default unless accessible.is_a? Hash + return default unless accessible.key? key + + accessible[key] + end + end + + class << self + def call(*args) + new(*args).call + end + end +end diff --git a/app/services/jibit_service.rb b/app/services/jibit_service.rb new file mode 100644 index 0000000..939c7c8 --- /dev/null +++ b/app/services/jibit_service.rb @@ -0,0 +1,110 @@ +class JibitService + + attr_reader :base_url + attr_reader :api_key + attr_reader :api_secret + attr_reader :conn + attr_accessor :response + attr_accessor :access_token + attr_accessor :refresh_token + attr_accessor :called_method + + # one day + JIBIT_EXPIRE_TIME = 86400 + def initialize + @base_url = Barong::App.config.jibit_api_url + @api_key = Barong::App.config.jibit_api_key + @api_secret = Barong::App.config.jibit_api_secret + @conn = Faraday.new(base_url) + conn.headers['Content-Type'] = 'application/json' + @access_token = read_access_token + end + + def retry_options + { max: 5, + retry_statuses: [401, 409, 500] } + end + + def read_access_token + return Rails.cache.read('jibit_access_token') if Rails.cache.read('jibit_access_token').present? + + generate_access_token + + raise 'please try again(jibit not create token)' unless access_token.present? + + Rails.cache.write('jibit_access_token', access_token, expires_in: JIBIT_EXPIRE_TIME) + access_token + end + + def generate_access_token + @called_method = __method__.to_s + @response = conn.post('tokens/generate') do |req| + req.body = { apiKey: api_key, secretKey: api_secret }.to_json + end + @access_token, @refresh_token = parse('accessToken', 'refreshToken') + end + + def generate_refresh_token + @called_method = __method__.to_s + @response = conn.post('tokens/refresh') do |req| + req.body = { accessToken: access_token, refreshToken: refresh_token }.to_json + end + @access_token, @refresh_token = parse('accessToken', 'refreshToken') + end + + def old_iban_info(iban) + @called_method = __method__.to_s + conn.authorization :Bearer, access_token + @response = conn.post('services/ibanInfo') do |req| + req.body = { iban: iban }.to_json + end + end + + def iban_info(iban) + @called_method = __method__.to_s + conn.authorization :Bearer, access_token + @response = conn.get('ibans') do |req| + req.params[:value] = iban + end + end + + def old_card_info(card_number) + @called_method = __method__.to_s + conn.authorization :Bearer, access_token + @response = conn.post('services/cardInfo') do |req| + req.body = { cardNumber: card_number }.to_json + end + end + + def card_info(card_number) + @called_method = __method__.to_s + conn.authorization :Bearer, access_token + @response = conn.get('cards') do |req| + req.params[:number] = card_number + end + end + + def old_mobile_info(number, national_code) + @called_method = __method__.to_s + conn.authorization :Bearer, access_token + @response = conn.post('services/matchNationalCodeAndMobileNumber') do |req| + req.body = { nationalCode: national_code, mobile: number }.to_json + end + end + + def mobile_info(number, national_code) + @called_method = __method__.to_s + conn.authorization :Bearer, access_token + @response = conn.get('services/matching') do |req| + req.params[:nationalCode] = national_code + req.params[:mobileNumber] = number + end + end + + private + + def parse(*keys) + parsed_data = JSON.parse(response.body) + keys.map { |key| parsed_data.dig(key) } + end +end diff --git a/app/services/kave_negar_sms_service.rb b/app/services/kave_negar_sms_service.rb new file mode 100644 index 0000000..1add7cc --- /dev/null +++ b/app/services/kave_negar_sms_service.rb @@ -0,0 +1,43 @@ +# frozen_string_literal: true + +# kavenegar sms sender +class KaveNegarSmsService + class << self + def send_confirmation(user) + Rails.logger.info("Sending SMS to #{user.phones.last.number}") + totp = TOTPServiceAction.new('register-mobile') + totp.create(user.uid, user.email, period: '120') + user.write_cache('register_mobile', 'true', 120) + send_sms(user.mobile('pending').number.to_s, totp.read_code(user.uid)) + end + + def send_call_confirmation(user) + Rails.logger.info("Sending call to #{user.phones.find_by(category: 'landline').number}") + totp = TOTPServiceAction.new('register-phone') + totp.create(user.uid, user.email, period: '120') + user.write_cache('register_phone', 'true', 120) + send_call(user.phones.find_by(category: 'landline').number.to_s, totp.read_code(user.uid)) + end + + def send_call(number, code) + client = KaveRestApi::Lookup.new({ receptor: number, + token: code, + template: 'phone', + type: 'call' # or call + }) + + client.call.valid? ? true : false + end + + def send_sms(number, code) + client = KaveRestApi::Lookup.new({ receptor: number, + token: code, + template: 'mobile', + type: 'sms' # or call + }) + + client.call.valid? ? true : false + end + + end +end diff --git a/app/services/kyc_service.rb b/app/services/kyc_service.rb new file mode 100644 index 0000000..caa4931 --- /dev/null +++ b/app/services/kyc_service.rb @@ -0,0 +1,65 @@ +# frozen_string_literal: true + +class KycService + # passport front + selfie OR driver license front and back + selfie IR id card front and back + selfie + REQUIRED_DOC_AMOUNT = { 'Passport': 2, 'Driver license': 3, 'Identity card': 3 }.freeze + + class << self + def profile_step(profile) + user = profile.user + profile_label = user.labels.find_by(key: :profile) + if profile_label.nil? # first profile everw + user.labels.create(key: :profile, value: profile.state, scope: :private) + else + profile_label.update(value: profile.state) # re-submitted profile + end + return unless profile.state == 'verified' + + # verify treasury after profile verified + KYC.const_get(Barong::App.config.kyc_provider.capitalize, false)::TreasuryWorker.perform_async(profile.id) + end + + def document_step(document) + user = document.user + user_document_label = user.labels.find_by(key: document.doc_type.downcase) + if user_document_label.nil? # first document ever + user.labels.create(key: document.doc_type.downcase, value: document.state, scope: :private) + else + return if user_document_label.value == 'verified' + + user_document_label.update(value: document.state) # re-submitted document + end + end + + + def kycaid_callback(params) + 422 + end + + def treasury_label_update(treasury) + user = treasury&.user + return unless user.present? + + treasury_label = user.labels.find_by(key: treasury.kind) + if treasury_label.nil? # first profile ever + user.labels.create(key: treasury.kind, value: treasury.state, scope: :private) + else + treasury.ownership! if treasury.state == 'processing' && treasury.result.present? + # user must have just one kind of treasury and new treasury like card, must not change before verified card + treasury_label.update(value: treasury.reload.state) unless treasury_label.value == 'verified' + end + end + + def phone_label_update(phone) + user = phone&.user + return unless user.present? + + phone_label = user.labels.find_by(key: phone.step) + if phone_label.nil? + user.labels.create(key: phone.step, value: phone.state, scope: :private) + else + phone_label.update(value: phone.state) + end + end + end +end diff --git a/app/services/mock_phone_verify_service.rb b/app/services/mock_phone_verify_service.rb new file mode 100644 index 0000000..887d08f --- /dev/null +++ b/app/services/mock_phone_verify_service.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +# twilio sms sender +class MockPhoneVerifyService + class << self + def send_confirmation(phone, _channel) + Rails.logger.info("Sending SMS to #{phone.number}") + + send_sms(number: phone.number, + content: Barong::App.config.sms_content_template.gsub(/{{code}}/, phone.code)) + end + + def send_sms(number:, content:) + from_phone = Barong::App.config.twilio_phone_number + client = Barong::MockSMS.new('', '') + client.messages.create(from: from_phone, to: '+' + number, body: content) + end + + # always return true + def verify_code?(number:, code:, user:) + user.phones.find_by_number(number).present? + end + end +end diff --git a/app/services/password_strength_checker.rb b/app/services/password_strength_checker.rb new file mode 100644 index 0000000..cd66a6d --- /dev/null +++ b/app/services/password_strength_checker.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +# password entropy calculation +class PasswordStrengthChecker + class < error + Rails.logger.error { error } + raise Error, error.message + end + + def read(key) + with_human_error do + Vault.logical.read(key) + end + end + + def write!(key, params) + with_human_error do + Vault.logical.write(key, value: params) + end + end + + def delete!(key) + with_human_error do + Vault.logical.delete(key) + end + end + end +end diff --git a/app/services/totp_service.rb b/app/services/totp_service.rb new file mode 100644 index 0000000..caf3f6d --- /dev/null +++ b/app/services/totp_service.rb @@ -0,0 +1,96 @@ +# frozen_string_literal: true + +class TOTPService + Error = Class.new(StandardError) + + class < e + Rails.logger.error { e } + + raise Error, '2FA server is under maintenance' if e.message.include?('connection refused') + + raise Error, 'This code was already used. Wait until the next time period' if e.message.include?('code already used') + + raise e + end + + def totp_key(uid) + "totp/keys/#{Vault.application}_#{uid}" + end + + def totp_code_key(uid) + "totp/code/#{Vault.application}_#{uid}" + end + + def read_data(key) + with_human_error do + vault.read(key) + end + end + + def read_code(uid) + read_data(totp_code_key(uid)).data[:code] + end + + + def write_data(key, params) + with_human_error do + vault.write(key, params) + end + end + + def delete_data(key) + with_human_error do + vault.delete(key) + end + end + + def vault + Vault.logical + end + end +end diff --git a/app/services/totp_service_action.rb b/app/services/totp_service_action.rb new file mode 100644 index 0000000..1f80f42 --- /dev/null +++ b/app/services/totp_service_action.rb @@ -0,0 +1,104 @@ +# frozen_string_literal: true + +class TOTPServiceAction + Error = Class.new(StandardError) + + ISSUER_NAME = 'Barong' + attr_reader :action + + def initialize(action) + raise 'Please determine action for totp code' if action.blank? + + @action = action + end + + def server_available? + read_data('sys/health').present? + rescue StandardError + false + end + + def otp_secret(otp) + CGI.parse(URI.parse(otp.data[:url]).query)['secret'][0] + end + + def safe_create(uid, email) + return if exist?(uid) + + create(uid, email) + end + + def create(uid, email, period: '120') + write_data(totp_key(uid), + generate: true, + issuer: ::Barong::App.config.app_name, + period: period, account_name: email, qr_size: 300) + end + + def exist?(uid) + read_data(totp_key(uid)).present? + end + + def validate?(uid, code) + return false unless exist?(uid) + + result = write_data(totp_code_key(uid), code: code) + return false unless result + + result.data[:valid] + end + + def safe_validate?(uid, code) + return false unless exist?(uid) + + code == read_code(uid) + end + + + def delete(uid) + delete_data(totp_key(uid)) + end + + def with_human_error + raise ArgumentError, 'Block is required' unless block_given? + + yield + rescue Vault::VaultError => e + Rails.logger.error { e } + + false + end + + def totp_key(uid) + "totp/keys/#{Vault.application}_#{@action}_#{uid}" + end + + def totp_code_key(uid) + "totp/code/#{Vault.application}_#{@action}_#{uid}" + end + + def read_data(key) + with_human_error do + vault.read(key) + end + end + + def read_code(uid) + read_data(totp_code_key(uid)).data[:code] + end + + def write_data(key, params) + with_human_error { vault.write(key, params) } + end + + def delete_data(key) + with_human_error do + vault.delete(key) + end + end + + def vault + Vault.logical + end + +end diff --git a/app/services/twilio_sms_send_service.rb b/app/services/twilio_sms_send_service.rb new file mode 100644 index 0000000..67be41e --- /dev/null +++ b/app/services/twilio_sms_send_service.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: true + +# twilio sms sender +class TwilioSmsSendService + class << self + def send_confirmation(phone, _channel) + Rails.logger.info("Sending SMS to #{phone.number}") + + send_sms(number: phone.number, + content: Barong::App.config.sms_content_template.gsub(/{{code}}/, phone.code)) + end + + def send_sms(number:, content:) + from_phone = Barong::App.config.twilio_phone_number + client = Barong::App.config.twilio_client + client.messages.create( + from: from_phone, + to: '+' + number, + body: content + ) + end + + # returns true if given code matches number in DB + def verify_code?(number:, code:, user:) + user.phones.find_by_number(number, code: code) + end + end +end diff --git a/app/services/twilio_verify_service.rb b/app/services/twilio_verify_service.rb new file mode 100644 index 0000000..0f380c8 --- /dev/null +++ b/app/services/twilio_verify_service.rb @@ -0,0 +1,35 @@ +# frozen_string_literal: true + +# twilio process verification +class TwilioVerifyService + class << self + def send_confirmation(phone, channel) + Rails.logger.info("Sending code to #{phone.number} via #{channel}") + + send_code(number: phone.number, channel: channel) + end + + def send_code(number:, channel:) + verify_client.services(@service_sid) + .verifications + .create(to: '+' + number, channel: channel) + end + + # return true if twilio accepts given code for the given number + def verify_code?(number:, code:, user:) + status = verify_client.services(@service_sid) + .verification_checks + .create(to: '+' + number, code: code) + .status + + status == 'approved' + end + + def verify_client + client = Barong::App.config.twilio_client + @service_sid = Barong::App.config.twilio_service_sid + + client.verify + end + end +end diff --git a/app/services/uid_generator.rb b/app/services/uid_generator.rb new file mode 100644 index 0000000..20e700d --- /dev/null +++ b/app/services/uid_generator.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +class UIDGenerator + def self.generate(prefix = 'ID') + loop do + uid = "%s%s" % [prefix.upcase, SecureRandom.hex(5).upcase] + return uid if User.where(uid: uid).empty? && ServiceAccount.where(uid: uid).empty? + end + end +end diff --git a/app/uploaders/ali_uploader.rb b/app/uploaders/ali_uploader.rb new file mode 100644 index 0000000..9f49144 --- /dev/null +++ b/app/uploaders/ali_uploader.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +require 'aliyun/oss' + +class AliUploader < UploadUploader + def url + bucket.object_url(Barong::App.config.storage_bucket_name + '/' + path) + end + + def bucket + @_bucket = client.get_bucket(Barong::App.config.storage_bucket_name) + end + + def client + @_client ||= Aliyun::OSS::Client.new( + endpoint: "oss-#{Barong::App.config.storage_region}.aliyuncs.com", + access_key_id: Barong::App.config.storage_access_key, + access_key_secret: Barong::App.config.storage_secret_key, + ) + end +end diff --git a/app/uploaders/upload_uploader.rb b/app/uploaders/upload_uploader.rb new file mode 100644 index 0000000..840c3ab --- /dev/null +++ b/app/uploaders/upload_uploader.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true + +# It's for upload document for Document model +class UploadUploader < CarrierWave::Uploader::Base + # if Rails.env.production? + # storage :fog + # else + # storage :file + # end + + # TODO just for alpha is file + storage :file + # Override the directory where uploaded files will be stored. + # This is a sensible default for uploaders that are meant to be mounted: + def store_dir + "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" + end + + # Add a white list of extensions which are allowed to be uploaded. + # For images you might use something like this: + def extension_whitelist + Barong::App.config.upload_extension_whitelist + end + + def size_range + # default is 1..10.megabytes + Barong::App.config.upload_size_min_range..Barong::App.config.upload_size_max_range.megabytes + end + + # Override default 'publicly visible' policy of fog + def fog_public + false # (default is true, which is not recommended for KYC documents or any user info + end + + # Set the expire time of authentification signature + def fog_authenticated_url_expiration + Barong::App.config.upload_auth_url_expiration.minutes # (default is 1.minute) + end +end diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb new file mode 100644 index 0000000..37813fb --- /dev/null +++ b/app/views/layouts/application.html.erb @@ -0,0 +1,15 @@ + + + + Barong + <%= csrf_meta_tags %> + <%= csp_meta_tag %> + + <%= stylesheet_link_tag 'application', media: 'all' %> + <%= javascript_include_tag 'application' %> + + + + <%= yield %> + + diff --git a/app/views/layouts/mailer.html.erb b/app/views/layouts/mailer.html.erb new file mode 100644 index 0000000..c104d40 --- /dev/null +++ b/app/views/layouts/mailer.html.erb @@ -0,0 +1,127 @@ + + + + + + + + + <%= yield %> + + + diff --git a/app/views/layouts/mailer.text.erb b/app/views/layouts/mailer.text.erb new file mode 100644 index 0000000..37f0bdd --- /dev/null +++ b/app/views/layouts/mailer.text.erb @@ -0,0 +1 @@ +<%= yield %> diff --git a/app/views/postmaster/deposit_accepted.en.html.erb b/app/views/postmaster/deposit_accepted.en.html.erb new file mode 100644 index 0000000..fce3b35 --- /dev/null +++ b/app/views/postmaster/deposit_accepted.en.html.erb @@ -0,0 +1,55 @@ + + + + + + + + + + + diff --git a/app/views/postmaster/email_confirmation.en.html.erb b/app/views/postmaster/email_confirmation.en.html.erb new file mode 100644 index 0000000..6407e59 --- /dev/null +++ b/app/views/postmaster/email_confirmation.en.html.erb @@ -0,0 +1,73 @@ + + + + + + + + + + + diff --git a/app/views/postmaster/email_confirmation.ru.html.erb b/app/views/postmaster/email_confirmation.ru.html.erb new file mode 100644 index 0000000..723d918 --- /dev/null +++ b/app/views/postmaster/email_confirmation.ru.html.erb @@ -0,0 +1,73 @@ + + + + + + + + + + + diff --git a/app/views/postmaster/email_confirmation_code.en.html.erb b/app/views/postmaster/email_confirmation_code.en.html.erb new file mode 100644 index 0000000..0ed9586 --- /dev/null +++ b/app/views/postmaster/email_confirmation_code.en.html.erb @@ -0,0 +1,97 @@ + + + + + + + + + + + diff --git a/app/views/postmaster/email_otp_disable_confirmation_code.en.html.erb b/app/views/postmaster/email_otp_disable_confirmation_code.en.html.erb new file mode 100644 index 0000000..324ba08 --- /dev/null +++ b/app/views/postmaster/email_otp_disable_confirmation_code.en.html.erb @@ -0,0 +1,73 @@ + + + + + + + + + + + diff --git a/app/views/postmaster/email_otp_enable_confirmation_code.en.html.erb b/app/views/postmaster/email_otp_enable_confirmation_code.en.html.erb new file mode 100644 index 0000000..3b26008 --- /dev/null +++ b/app/views/postmaster/email_otp_enable_confirmation_code.en.html.erb @@ -0,0 +1,73 @@ + + + + + + + + + + + diff --git a/app/views/postmaster/label.en.html.erb b/app/views/postmaster/label.en.html.erb new file mode 100644 index 0000000..4c16b5c --- /dev/null +++ b/app/views/postmaster/label.en.html.erb @@ -0,0 +1,76 @@ + + + + + + + + + + + diff --git a/app/views/postmaster/new_beneficiary.en.html.erb b/app/views/postmaster/new_beneficiary.en.html.erb new file mode 100644 index 0000000..4a96406 --- /dev/null +++ b/app/views/postmaster/new_beneficiary.en.html.erb @@ -0,0 +1,55 @@ + + + + + + + + + + + diff --git a/app/views/postmaster/otp_confirmation_code.en.html.erb b/app/views/postmaster/otp_confirmation_code.en.html.erb new file mode 100644 index 0000000..5fe4bbb --- /dev/null +++ b/app/views/postmaster/otp_confirmation_code.en.html.erb @@ -0,0 +1,73 @@ + + + + + + + + + + + diff --git a/app/views/postmaster/password_confirmation_code.en.html.erb b/app/views/postmaster/password_confirmation_code.en.html.erb new file mode 100644 index 0000000..bc77694 --- /dev/null +++ b/app/views/postmaster/password_confirmation_code.en.html.erb @@ -0,0 +1,73 @@ + + + + + + + + + + + diff --git a/app/views/postmaster/password_reset.en.html.erb b/app/views/postmaster/password_reset.en.html.erb new file mode 100644 index 0000000..5cff7fd --- /dev/null +++ b/app/views/postmaster/password_reset.en.html.erb @@ -0,0 +1,97 @@ + + + + + + + + + + + diff --git a/app/views/postmaster/password_reset.ru.html.erb b/app/views/postmaster/password_reset.ru.html.erb new file mode 100644 index 0000000..8385bfd --- /dev/null +++ b/app/views/postmaster/password_reset.ru.html.erb @@ -0,0 +1,73 @@ + + + + + + + + + + + diff --git a/app/views/postmaster/session_create.en.html.erb b/app/views/postmaster/session_create.en.html.erb new file mode 100644 index 0000000..a652830 --- /dev/null +++ b/app/views/postmaster/session_create.en.html.erb @@ -0,0 +1,61 @@ + + + + + + + + + + + diff --git a/app/views/postmaster/session_failed.en.html.erb b/app/views/postmaster/session_failed.en.html.erb new file mode 100644 index 0000000..7c4e3ef --- /dev/null +++ b/app/views/postmaster/session_failed.en.html.erb @@ -0,0 +1,61 @@ + + + + + + + + + + + diff --git a/app/views/postmaster/withdraw_confirmation_code.en.html.erb b/app/views/postmaster/withdraw_confirmation_code.en.html.erb new file mode 100644 index 0000000..e32ae46 --- /dev/null +++ b/app/views/postmaster/withdraw_confirmation_code.en.html.erb @@ -0,0 +1,73 @@ + + + + + + + + + + + diff --git a/app/views/postmaster/withdraw_succeed.en.html.erb b/app/views/postmaster/withdraw_succeed.en.html.erb new file mode 100644 index 0000000..1286073 --- /dev/null +++ b/app/views/postmaster/withdraw_succeed.en.html.erb @@ -0,0 +1,55 @@ + + + + + + + + + + + diff --git a/app/workers/kyc/local/owner_mobile_worker.rb b/app/workers/kyc/local/owner_mobile_worker.rb new file mode 100644 index 0000000..8d63582 --- /dev/null +++ b/app/workers/kyc/local/owner_mobile_worker.rb @@ -0,0 +1,18 @@ +require 'sidekiq' +module KYC + module Local + class OwnerMobileWorker + include Sidekiq::Worker + + def perform(mobile_id) + mobile = Phone.find_by(id: mobile_id) + return unless mobile.user.verified_profile.present? + + jibit = JibitService.new + response = jibit.mobile_info(mobile.national_number, mobile.user.verified_profile.national_code) + + mobile.update(step: 'owner_phone') if JSON.parse(response.body).dig('matched').present? + end + end + end +end diff --git a/app/workers/kyc/local/treasury_worker.rb b/app/workers/kyc/local/treasury_worker.rb new file mode 100644 index 0000000..b39342e --- /dev/null +++ b/app/workers/kyc/local/treasury_worker.rb @@ -0,0 +1,22 @@ +require 'sidekiq' +module KYC + module Local + class TreasuryWorker + include Sidekiq::Worker + + def perform(profile_id) + profile = Profile.find_by(id: profile_id) + return if profile.blank? || profile.state != 'verified' + + treasuries = profile.user.submitted_treasuries + return unless treasuries.present? + + treasuries.each do |treasury| + jibit = JibitService.new + response = treasury.kind == 'iban' ? jibit.iban_info(treasury.data) : jibit.card_info(treasury.data) + treasury.update(result: response&.body, state: 'processing') + end + end + end + end +end diff --git a/bin/bundle b/bin/bundle new file mode 100644 index 0000000..f19acf5 --- /dev/null +++ b/bin/bundle @@ -0,0 +1,3 @@ +#!/usr/bin/env ruby +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__) +load Gem.bin_path('bundler', 'bundle') diff --git a/bin/cloudflare b/bin/cloudflare new file mode 100644 index 0000000..317ee54 --- /dev/null +++ b/bin/cloudflare @@ -0,0 +1,26 @@ +#!/usr/bin/env ruby +require 'erb' +require 'pathname' +require 'fileutils' +# Open Source license key provided by Openware has some download rate and amount limits +# We strongly suggest you to create your oun key and pass via --build-arg MAXMINDDB_LICENSE_KEY +# All the guidance on how to create license key you can find here - https://blog.maxmind.com/2019/12/18/significant-changes-to-accessing-and-using-geolite2-databases/ +MAXMINDDB_LICENSE_KEY='T6ElPBlyOOuCyjzw'.freeze +MAXMINDDB_LINK="https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-Country&suffix=tar.gz&license_key=#{MAXMINDDB_LICENSE_KEY}" + +root = Pathname.new(File.expand_path('../../', __FILE__)) +# Download MaxMind Country DB +system "mkdir -p #{root}/geolite; + wget -O #{root}/geolite.tar.gz \"#{MAXMINDDB_LINK}\"; + tar xzf #{root}/geolite.tar.gz -C #{root}/geolite --strip-components 1; + rm -rf #{root}/geolite.tar.gz" + +# Download list of Cloudflare IP Ranges (v4 and v6) +system "curl https://www.cloudflare.com/ips-v4 >> #{root}/config/cloudflare_ips.yml; + echo '\n' >> #{root}/config/cloudflare_ips.yml; + curl https://www.cloudflare.com/ips-v6 >> #{root}/config/cloudflare_ips.yml" + + +system 'nohup ./bin/mailer --config=config/mailer.yml run >/dev/null 2>&1 &' + +system 'echo @@@ Geolite and Cloadfalre and Mailer finished @@@' diff --git a/bin/gendocs b/bin/gendocs new file mode 100644 index 0000000..66a7ddf --- /dev/null +++ b/bin/gendocs @@ -0,0 +1,57 @@ +#!/usr/bin/env bash + +set -e + +RAILS_ENV=development + +if [ -f tmp/pids/server.pid ]; then + kill $(cat tmp/pids/server.pid) +fi + +if [ -n "${V}" ]; then +cat > config/initializers/versioning.rb << EOF +# encoding: UTF-8 +# frozen_string_literal: true +# This file is auto-generated from the current state of VCS. +# Instead of editing this file, please use bin/gendocs. +module Barong + class Application + GIT_TAG = '${V}' + GIT_SHA = '$(git rev-parse --short HEAD)' + BUILD_DATE = '$(date --rfc-3339=seconds)' + VERSION = GIT_TAG + end +end +EOF +fi + +bundle install +bin/init_config +bundle exec rake db:drop db:create db:migrate db:seed +npm i -g swagger-markdown +npm i -g prettyjson-cli +bundle exec rails s -d +while [ ! -f tmp/pids/server.pid ] +do + sleep 1 +done +sleep 5 # Wait additional time until Rails starts listen port. + +curl http://localhost:3000/api/v2/swagger > tmp/user_api_v2_swagger.json +curl http://localhost:3000/api/v2/management/swagger > tmp/management_api_v2_swagger.json +curl http://localhost:3000/api/v2/admin/swagger > tmp/admin_api_v2_swagger.json + +mkdir -p docs/api/swagger + +swagger-markdown -i tmp/user_api_v2_swagger.json -o ./docs/api/barong_user_api_v2.md +swagger-markdown -i tmp/management_api_v2_swagger.json -o ./docs/api/barong_management_api_v2.md +swagger-markdown -i tmp/admin_api_v2_swagger.json -o ./docs/api/barong_admin_api_v2.md + +ruby -r json -e "puts JSON.pretty_generate(JSON.parse(File.read('tmp/user_api_v2_swagger.json')))" \ + > docs/api/swagger/user_api.json +ruby -r json -e "puts JSON.pretty_generate(JSON.parse(File.read('tmp/management_api_v2_swagger.json')))" \ + > docs/api/swagger/management_api.json +ruby -r json -e "puts JSON.pretty_generate(JSON.parse(File.read('tmp/admin_api_v2_swagger.json')))" \ + > docs/api/swagger/admin_api.json + +kill $(cat tmp/pids/server.pid) diff --git a/bin/init_config b/bin/init_config new file mode 100644 index 0000000..786772d --- /dev/null +++ b/bin/init_config @@ -0,0 +1,15 @@ +#!/usr/bin/env ruby + +require 'erb' +require 'pathname' +require 'fileutils' + +src_root = Pathname.new(File.expand_path('../../config/templates', __FILE__)) +dest_root = Pathname.new(File.expand_path('../../config', __FILE__)) + +Dir[src_root.join('**/*.erb').to_s].each do |f| + dest = dest_root.join(Pathname.new(f).relative_path_from(src_root)).sub(/\.erb\z/, '') + FileUtils.mkpath(dest.dirname) + puts "Copy #{f} -> #{dest}" + File.write(dest, ERB.new(File.read(f)).result) +end diff --git a/bin/init_vault b/bin/init_vault new file mode 100644 index 0000000..efbb4ea --- /dev/null +++ b/bin/init_vault @@ -0,0 +1,7 @@ +DOCKER_VAULT_ID=`docker ps | grep vault | awk '{ print $1 }'` + +docker exec ${DOCKER_VAULT_ID} sh -c \ + "vault secrets disable secret \ + && vault secrets enable -path=secret -version=1 kv \ + && vault secrets enable totp" + diff --git a/bin/install_plugins b/bin/install_plugins new file mode 100644 index 0000000..164499c --- /dev/null +++ b/bin/install_plugins @@ -0,0 +1,18 @@ +#!/usr/bin/env ruby + +require 'fileutils' +require 'yaml' + +Dir['vendor/plugins/*'].each { |d| FileUtils.rm_rf(d) } + +plugins = YAML.load_file('config/plugins.yml').yield_self { |ary| ary || [] }.map do |plugin| + [ %[git clone #{plugin.fetch('git')} vendor/plugins/#{plugin.fetch('name')}], + %[cd vendor/plugins/#{plugin.fetch('name')} && git checkout #{plugin.fetch('commit')}], + ].each do |command| + Kernel.system(command) + Kernel.exit(false) unless $?.success? + end + plugin +end + +Kernel.puts "\n#{plugins.count} plugin(s) installed to vendor/plugins." diff --git a/bin/link_config b/bin/link_config new file mode 100644 index 0000000..a2fa955 --- /dev/null +++ b/bin/link_config @@ -0,0 +1,15 @@ +#!/usr/bin/env ruby + +# frozen_string_literal: true + +require 'pathname' +require 'fileutils' + +src_root = Pathname.new('/opt/barong/config') +dest_root = Pathname.new(File.expand_path('../../config', __FILE__)) + +Dir[src_root.join('**/*.yml').to_s].each do |f| + dest = dest_root.join(Pathname.new(f).relative_path_from(src_root)) + Kernel.puts "Link #{f} -> #{dest}" + FileUtils.ln_s(f, dest, force: true) +end diff --git a/bin/mailer b/bin/mailer new file mode 100644 index 0000000..8b92c3d --- /dev/null +++ b/bin/mailer @@ -0,0 +1,28 @@ +#!/usr/bin/env ruby + +# frozen_string_literal: true + +require File.expand_path('../../config/environment', __FILE__) + +class Mailer + extend GLI::App + + program_desc 'Notification Hub' + + flag :config, desc: 'Path to mailer config file', default_value: 'config/mailer.yml' + + command :stop do |c| + c.action do + end + end + + command :run do |c| + c.desc 'Run processing email events' + c.action do |global_options, _options, _args| + config = YAML.load_file(global_options[:config]).deep_symbolize_keys + EventMailer.call(config[:events], config[:exchanges], config[:keychain]) + end + end +end + +exit Mailer.run(ARGV) diff --git a/bin/rails b/bin/rails new file mode 100644 index 0000000..5badb2f --- /dev/null +++ b/bin/rails @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +begin + load File.expand_path('../spring', __FILE__) +rescue LoadError => e + raise unless e.message.include?('spring') +end +APP_PATH = File.expand_path('../config/application', __dir__) +require_relative '../config/boot' +require 'rails/commands' diff --git a/bin/rake b/bin/rake new file mode 100644 index 0000000..d87d5f5 --- /dev/null +++ b/bin/rake @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +begin + load File.expand_path('../spring', __FILE__) +rescue LoadError => e + raise unless e.message.include?('spring') +end +require_relative '../config/boot' +require 'rake' +Rake.application.run diff --git a/bin/setup b/bin/setup new file mode 100644 index 0000000..94fd4d7 --- /dev/null +++ b/bin/setup @@ -0,0 +1,36 @@ +#!/usr/bin/env ruby +require 'fileutils' +include FileUtils + +# path to your application root. +APP_ROOT = File.expand_path('..', __dir__) + +def system!(*args) + system(*args) || abort("\n== Command #{args} failed ==") +end + +chdir APP_ROOT do + # This script is a starting point to setup your application. + # Add necessary setup steps to this file. + + puts '== Installing dependencies ==' + system! 'gem install bundler --conservative' + system('bundle check') || system!('bundle install') + + # Install JavaScript dependencies if using Yarn + # system('bin/yarn') + + # puts "\n== Copying sample files ==" + # unless File.exist?('config/database.yml') + # cp 'config/database.yml.sample', 'config/database.yml' + # end + + puts "\n== Preparing database ==" + system! 'bin/rails db:setup' + + puts "\n== Removing old logs and tempfiles ==" + system! 'bin/rails log:clear tmp:clear' + + puts "\n== Restarting application server ==" + system! 'bin/rails restart' +end diff --git a/bin/update b/bin/update new file mode 100644 index 0000000..58bfaed --- /dev/null +++ b/bin/update @@ -0,0 +1,31 @@ +#!/usr/bin/env ruby +require 'fileutils' +include FileUtils + +# path to your application root. +APP_ROOT = File.expand_path('..', __dir__) + +def system!(*args) + system(*args) || abort("\n== Command #{args} failed ==") +end + +chdir APP_ROOT do + # This script is a way to update your development environment automatically. + # Add necessary update steps to this file. + + puts '== Installing dependencies ==' + system! 'gem install bundler --conservative' + system('bundle check') || system!('bundle install') + + # Install JavaScript dependencies if using Yarn + # system('bin/yarn') + + puts "\n== Updating database ==" + system! 'bin/rails db:migrate' + + puts "\n== Removing old logs and tempfiles ==" + system! 'bin/rails log:clear tmp:clear' + + puts "\n== Restarting application server ==" + system! 'bin/rails restart' +end diff --git a/config.ru b/config.ru new file mode 100644 index 0000000..8583ebc --- /dev/null +++ b/config.ru @@ -0,0 +1,19 @@ +# This file is used by Rack-based servers to start the application. + +require_relative 'config/environment' +require 'rack/cors' +# Load CORS::Validations module +require_relative 'lib/barong/cors/validations' + +use Rack::Cors do + allow do + origins Barong::CORS::Validations.validate_origins(Barong::App.config.api_cors_origins) + resource '/api/*', + methods: %i[get post delete put patch options head], + headers: :any, + credentials: Barong::App.config.api_cors_allow_credentials, + max_age: Barong::CORS::Validations.validate_max_age(Barong::App.config.api_cors_max_age) + end +end + +run Rails.application diff --git a/config/abilities.yml b/config/abilities.yml new file mode 100644 index 0000000..0a1eb9b --- /dev/null +++ b/config/abilities.yml @@ -0,0 +1,49 @@ +roles: + - superadmin + - admin + - compliance + - support + +admin_permissions: + superadmin: + manage: + - User + - Activity + - Ability + - APIKey + - Profile + - Permission + - Label + - Restriction + - Level + - Document + admin: + read: + - Activity + - Level + - APIKey + - Permission + - Document + manage: + - User + - Activity + - Profile + - Label + - Document + compliance: + read: + - Level + - User + - Activity + manage: + - Label + update: + - Profile + support: + read: + - User + - Activity + - APIKey + - Profile + - Label + - Level diff --git a/config/amqp.yml b/config/amqp.yml new file mode 100644 index 0000000..eb24c03 --- /dev/null +++ b/config/amqp.yml @@ -0,0 +1,111 @@ +connect: + host: <%= ENV.fetch('BARONG_EVENT_API_RABBITMQ_HOST', 'localhost') %> + port: <%= ENV.fetch('RABBITMQ_PORT', '5672') %> + username: <%= ENV.fetch('RABBITMQ_USER', 'guest') %> + password: <%= ENV.fetch('RABBITMQ_PASSWORD', 'guest') %> + +exchange: + trade: + name: peatio.trade + type: headers + notification: + name: peatio.notification + type: direct + orderbook: + name: peatio.orderbook + type: fanout + events: + name: peatio.events + type: direct + matching: + name: peatio.matching + type: direct + finex-spot: + name: finex.orderapi + type: direct + opendax: + name: finex.orderapi + type: direct + +queue: + matching: + name: peatio.matching + durable: true + # You can set queue maximum length (see https://www.rabbitmq.com/maxlength.html). + # For order matching queue it is recommended to set limit about to 10000 per market. + # So in case you have 10 markets you would set 1000000. But this value is relative and depends on your business (market load). + # + # max_length: 10000 + # + # Alternatively you can pass custom arguments here (for example in case your use RabbitMQ plugins): + # + # arguments: + # x-max-length: 10000 + # + # When you change any parameter of queue definition it is required to drop it in RabbitMQ admin panel. + # In case you want this to be done transparently and automatically I recommend to set auto_delete to true. + # + # auto_delete: true + # + # In such case queue will be deleted automatically once all workers are disconnected. This should ensure queue + # is created from scratch with new configuration at next redeployment. + new_trade: + name: peatio.trade.new + durable: true + order_processor: + name: peatio.order.processor + durable: true + market_ticker: + name: peatio.trade.market_ticker + pusher_market: + name: peatio.pusher.market + pusher_member: + name: peatio.pusher.member + withdraw_coin: + name: peatio.withdraw.coin + deposit_collection_fees: + name: peatio.deposit.collection_fees + deposit_collection: + name: peatio.deposit.collection + deposit_coin_address: + name: peatio.deposit.coin.address + durable: true + influx_writer: + name: peatio.trade.writer + trade_error: + name: peatio.trades.errors + # Queue which used by third-party trading engine for updating balances and + # order submit consuming. + events_processor: + name: peatio.events.processor + +binding: + matching: + queue: matching + clean_start: true + exchange: matching + trade_executor: + queue: new_trade + exchange: matching + order_processor: + queue: order_processor + exchange: matching + withdraw_coin: + queue: withdraw_coin + deposit_coin_address: + queue: deposit_coin_address + influx_writer: + queue: influx_writer + exchange: trade + trade_error: + queue: trade_error + exchange: matching + events_processor: + queue: events_processor + exchange: events + +channel: + trade_executor: + prefetch: 5 + order_processor: + prefetch: 5 diff --git a/config/application.rb b/config/application.rb new file mode 100644 index 0000000..592edb5 --- /dev/null +++ b/config/application.rb @@ -0,0 +1,40 @@ +# frozen_string_literal: true + +require_relative 'boot' +require 'rails/all' + +# Require the gems listed in Gemfile, including any gems +# you've limited to :test, :development, or :production. +Bundler.require(*Rails.groups) + +module Barong + class Application < Rails::Application + # Initialize configuration defaults for originally generated Rails version. + config.load_defaults 5.2 + + # Configure Sentry as early as possible. + if ENV["BARONG_SENTRY_DSN_BACKEND"].present? + require "sentry-raven" + Raven.configure { |config| config.dsn = ENV["BARONG_SENTRY_DSN_BACKEND"] } + end + + # Adding Grape API + # Eager loading all app/ folder + config.eager_load_paths += Dir[Rails.root.join('app')] + config.eager_load_paths += Dir[Rails.root.join('lib/barong')] + + # Setup the logger + config.logger = Logger.new(STDOUT) + + # Load lib folder files to be visible in specs + config.paths.add 'lib', eager_load: false, autoload: true + + # Settings in config/environments/* take precedence over those specified here. + # Application configuration can go into files in config/initializers + # -- all .rb files in that directory are automatically loaded after loading + # the framework and any gems in your application. + # + env_file = File.join(Rails.root, 'barong.env') + Dotenv.load(env_file) if File.exists?(env_file) + end +end diff --git a/config/authz_rules.yml b/config/authz_rules.yml new file mode 100644 index 0000000..af19148 --- /dev/null +++ b/config/authz_rules.yml @@ -0,0 +1,18 @@ +# +# pass for whitelisted (public) routes +# block for blacklisted routes +# +rules: + pass: + - api/v2/barong/public + - api/v2/barong/identity + - api/v2/peatio/public + - api/v2/peatio/coinmarketcap + - api/v2/peatio/coingecko + - api/v2/ranger/public + - api/v2/applogic/public + - api/v2/arke/public + - api/v2/finex/public + block: + - api/v2/barong/management + - api/v2/peatio/management diff --git a/config/backend.yml b/config/backend.yml new file mode 100644 index 0000000..40608b7 --- /dev/null +++ b/config/backend.yml @@ -0,0 +1,76 @@ +version: '3' + +services: + + db: + image: mysql:5.7 + volumes: + - db_data:/var/lib/mysql + environment: + MYSQL_ALLOW_EMPTY_PASSWORD: "yes" + ports: + - "3306:3306" + + redis: + image: redis:4.0 + volumes: + - redis_data:/data + ports: + - "6379:6379" + + vault: + image: vault:0.11.4 + ports: + - "8200:8200" + environment: + SKIP_SETCAP: 1 + VAULT_TOKEN: changeme + VAULT_DEV_ROOT_TOKEN_ID: changeme + VAULT_ADDR: http://vault:8200 + + gateway: + image: quay.io/datawire/ambassador:0.40.0 + ports: + - "8080:80" + volumes: + - ./gateway:/ambassador/ambassador-config/:ro + entrypoint: + - sh + - -exc + - | + # Allow accessing host's 0.0.0.0 so we can connect to a local peatio + # from the gateway container + ip -4 route list match 0/0 | awk '{print $$3" barong.local"}' >> /etc/hosts + # Continue with the default entrypoint + ./entrypoint.sh + + minio: + image: minio/minio + volumes: + - minio-data:/data + ports: + - "9000:9000" + environment: + MINIO_ACCESS_KEY: changemeEXAMPLE + MINIO_SECRET_KEY: changemeEXAMPLEKEY + command: server /data + + rabbitmq: + image: rabbitmq:3.7.6-management + volumes: + - rabbitmq_data:/var/lib/rabbitmq + ports: + - "5672:5672" + - "15672:15672" + + mailcatcher: + image: schickling/mailcatcher + ports: + - "1080:1080" + - "1025:1025" + +volumes: + db_data: + redis_data: + rabbitmq_data: + minio-data: diff --git a/config/barong.yml b/config/barong.yml new file mode 100644 index 0000000..cb27f63 --- /dev/null +++ b/config/barong.yml @@ -0,0 +1,53 @@ +activation_requirements: + email: 'verified' +state_triggers: + banned: + - ban + - fraud + deleted: + - delete + locked: + - suspicious + - lock +document_types: + - Passport + - Identity card + - Driver license + - Utility Bill + - Residental + - Institutional + - Poa + - Selfie + +document_categories: + - front_side + - selfie + - back_side + +user_storage_titles: + # - personal ## example + # - company ## example +captcha_protected_endpoints: + - user_create + - session_create + - password_reset + - email_confirmation +profile_verification_roles: + - superadmin + # - admin + # - kyc_worker + +kyc_levels: + 1: + 2: profile + 3: access_phone + 4: card + 5: iban + 2: + 6: poa + 7: telephone + 8: selfie + 9: owner_phone + 3: + 10: vip + diff --git a/config/boot.rb b/config/boot.rb new file mode 100644 index 0000000..b9e460c --- /dev/null +++ b/config/boot.rb @@ -0,0 +1,4 @@ +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__) + +require 'bundler/setup' # Set up gems listed in the Gemfile. +require 'bootsnap/setup' # Speed up boot time by caching expensive operations. diff --git a/config/cable.yml b/config/cable.yml new file mode 100644 index 0000000..cc39bef --- /dev/null +++ b/config/cable.yml @@ -0,0 +1,10 @@ +development: + adapter: async + +test: + adapter: async + +production: + adapter: redis + url: <%= ENV.fetch("BARONG_REDIS_URL") { "redis://localhost:6379/1" } %> + channel_prefix: barong_production diff --git a/config/credentials.yml.enc b/config/credentials.yml.enc new file mode 100644 index 0000000..713e9cb --- /dev/null +++ b/config/credentials.yml.enc @@ -0,0 +1 @@ +I6tY6I6n09+uAR8G6yiX24k+SKHfx0ZTISnXmX9kupVSymzL02I41OiGqH5qWOvwmLpdvrr/BSIcqDms1tMSzgei+6IGZNyuY+nIwG9rTce33ucrMUS+9/RH8MFaSGyi7k04K3dWgf0/b/9xm9Qcv3dK7mnB46MwbsDRXf0gwbxS9YcgDzdRA5nXlgrQn/hTxwIHv4I8k6FCa9FFvrywCtVql1guo6RIzvm+iAYmHa3Ef89twIYaCUFNhJXknEUHleCCLLpWSqQ7B0gPauerlTrv+yJByPaDin1CsbNbMeykgZoL0WewauicKzQB52LWNSC0i+6cLa98XWmLiSDQDy2OsuQ+pOr0J3UzYhoj5LhiikT71sisLrRRr6CjBsIfN6Gh7SSThjnvquqpkelGlJERtsdgJFyF2ayOTUkIviKL1KaH+xF+dliTQKNfFrrA5fDQKl0vIfTwCuOGZXSnF7xHrj98kLk4Z62hQe2mhk4fznK907d+sHXd7Sdo4mZr2Mz4M9KCN7Ez734pQ1ua0cB2mOwj7x4P7Z5HLpw+AcGEnZegqJ/ZbEgvhaRx227lSh49LpIr62kH7RJi00e6gOPOJuETwRvOCD6wmb0y55n1kISoKQIX+zQuiUwo2aF2kPp2eFYvCvWd4yF0t01oe2pkYA0imFfJoitHAIo0Vw6A9W1DHx3oLVsouG2d4X3BZ1Rh1dp22K0mvcpSSrVfUGcyIWhgr8pTJpghH19pjrXv9zzRAAVH0pNJF42cjb312SowIrqjIEMaI9ved+poaF1pHdrXEbV8oacrVHtBSH/oxVTqhImVgnpW0UgPJn63wzYpCHo4Sqby3E36AZoca7hTPuHiLSYSCWcTLW9j+35RL4+FIExfG6RGWcIKHmEOEYllDdPziL7M5hPPS8vLOEMS/m82KOwO/FArSTjbcRaeJANC6hUdld/Z1CuGA180gfjpzdV0iNv483n3w0r0+vYxWvqHFS9ZJdyekP1bj2ni4928Ra4AV5vvz4Fu78w2vKl4+ZpEQO26i0oIPbCFyIvBzv2bML2D7cFeWVISzzmZc+azHhq9wzldAsW+PXwr5E4F2CRpcPIkOR8Nobed9koKCCNhHTao9YMzgX2svNQVLVnU4XUB1HIhfE31vZdU/UJ0p8d8s/3WZZ5eTVsir+GwrQ2vNaKBcLLUXaHwlImkQ9Jl6Zp3T9eLLm6o5jR9lZFluiNalZXCpG2+DzUc3TXwyPOhOuUx/2rFoKzyBXHFbvzPi8Vq7YtusKAZ1Cnp/bPB9HUpQWPvnITowUT8HI8qOKntnyokIJSk7WfvB2sME3FZQ6xwAcSJZqHm4PZYoLH6YTTdy/X7/ioFxEA8ekxtjVh09+IIfd6kIbeeO5x5G4Ps7DayDxeENLwwZK561kwy4fXLfqXH9oOWBdMpitGnEotB2U3JK72wu8+m1rLOzjKpW43zoj8HxLCBnJl7ybFvOaeblJPrsKj8LHWN/nyZKG6O0ji3fBw6g3oJlj56Zhamdd0Nu3hYygUmmPfD999mhnx+DOBxD+C2x1SQfinRGHssmiWbkqoSBBY50FC+Fkrfvno4pdfykcPG+Tc3HFYwy3hNZ538Vp6zQSCdEAAcp/qFKv+qNrH665q4qzpSlvB6BSTA6YWlu3+OGjKGOpY2qsxhWmvJ0SC7UCnGk79bBnoLyaSbcLtmC7lNGm3QlACqrvZBrprXP6ExRrwwkBSdJL9tJUEdKbdxwGx4YL4EffDDa5xUdJm/+os4QFyjj4wb/3fcH6iFlXEeCgEGo8Woegb2kDH6Xe+VqlL/kIFfbBTi/kIcs5m4+NeslTZyOQrrE4iZ4zXZncWs7xQwK5m2+2jFm3hAjBVfgiV1lUQQfiladUoEDu5rVoMFA2RSHY9Pm4nMo2LN8WLMS2mLiO+l4Ak3uiM/DskhdNmZxXvEhsV2eHtEYChtiaUEY0etsMmrTzVmg4Mzw7Ua7ioN8aV6fDrpswjHeUUG5HeYq7oVLUDeid4qwH9jpSHBA6eOGq7YbCZvwQFjhxdRIW/dAEiW5YZY0rIgFiBYFG2PVWI3ivD+/1jRkjy1yYYK7E4cNMSrIVnA38ZFEF7lvuWqA95T5Gezr1DMIve+GZQg0o9IBwK+C7LwPqgk6ntIwTSV43xuY+YuSxOc5ZDznbo9XVPvOBeEB+bJBHN/+IIpK/0dVmPKe5m10vrNt6VEGZKLHuTftljRYl4jE4MipfLQeVH+PIvLqbstBORdvPhRuFPp45BTpSGFZJaO0lZbzGQtEVDozCpClMRkfFP2pWbeikzNDMoELwTl6PSUAaNq9lUjytn23pGJLs4ExYnVMcvjzl6xtSEurQQRu4ZIO+/en4e/KHEiwhgeUuoIcJSBYmEvGsSjsNBLKmNQrVxQzF4TCLt6iGXqpk/p5YtqaVenOTF1oZm7lj9JL2u4xpXCjcjPX0uJ7Li5YZOiavDDvnJgvl0A9P9In19XcP1zHXnP6l3OXOUTE6Tv18m6/O1rV2VpQkK+gIPrYztFvBOaC7/sWdpbqsqS3DTfeuCUIA7sBfB85jSl+uukhhd3EOCjucaT8BrvcMHx0hmHAwDOedZTEdZl2K9fhR0Uhf1i+d4M60/lyQqKjG1BzcmIXIZ/z4HNB4/oCBwsZVSYMH8cM2NYb+EOxHUW2cBqPwLcmt2JfrcMZDP5YkdtqfuvQiCSzYMcssfw/i7uAan2HlSdeiguglsinJZ1efBcTD4RsPld3jCjraseIjha96j8W8Wnk7SQElbFQFoS5MLbGhWLzkMpyiRPCZrT5r8SGPdtwqEKXNF2RVWFsOvXsDicv2mv09nb4ppFem7jgwGwj0Wi2Mv7x7ZxAW/EKt1fWTtVdMgse8wJZnbOAn4Xl5G/ll3m6jytmG4rHdy6HEQL56gEYencQViWFbuqJYsPZDRTOuc6vwngTgqaoNpGC/UpbaCOxwurjw0+wszsjKtF9YC/aIxddAypHwmAA/zq/gbLpwAyilI8K8ZDUcHQbH14vubz5Kn65SQv44VbwOe4k6HPrnkWjrEN+IOukv0NJhIcln0yOBwAjru4q2A1aNmeJaoCPpmqMb+95/vC5BNKyFJnyr6of9bDIlNdQABH8vBzFwyUcPN+SXCZbRDiDmL4+Iw4lNxfV2XGDCob3K9Jh2Fo85xsNUkCuVsvU5iBD9YoctB+oWcGd5mDFNJsX0M+Ft5rBbznYv/syk8lurM27L1RWKMz6KbGEQoK4ov2Jz+PlkxrX7WzznolxXtwEGZdU2LeVbqUj5HGYnntWDjoF9AASLLFDo7V67wyHu9ZL+YXEOVgsAbNjJfyqJInmPMdGHyjHpBXqGse+l44qBPsI2fwdj0NbkkFM+sScBrx9S3gfVB3iOOUcHo5MkvbmsauTRwwg67YzhMTbFGSSjiX4QI5iwDP--JL81g7CbhrdSINC1--OBdY+ZocetafB3jJoROfRA== \ No newline at end of file diff --git a/config/database.yml b/config/database.yml new file mode 100644 index 0000000..e1b7f66 --- /dev/null +++ b/config/database.yml @@ -0,0 +1,20 @@ +default: &default + adapter: <%= ENV.fetch('DATABASE_ADAPTER', 'mysql2') %> + encoding: utf8 + pool: <%= ENV.fetch("RAILS_MAX_THREADS", 6).to_i * ENV.fetch("WEB_CONCURRENCY", 1).to_i %> + host: <%= ENV.fetch('DATABASE_HOST', '127.0.0.1') %> + port: <%= ENV.fetch('DATABASE_PORT', 3306) %> + username: <%= ENV.fetch('DATABASE_USER', 'root') %> + password: <%= ENV.fetch('DATABASE_PASS', 'changeme') %> + +development: + <<: *default + database: barong_development + +test: + <<: *default + database: barong_test + +production: + <<: *default + database: <%= ENV.fetch('DATABASE_NAME', 'barong_production') %> diff --git a/config/environment.rb b/config/environment.rb new file mode 100644 index 0000000..426333b --- /dev/null +++ b/config/environment.rb @@ -0,0 +1,5 @@ +# Load the Rails application. +require_relative 'application' + +# Initialize the Rails application. +Rails.application.initialize! diff --git a/config/environments/development.rb b/config/environments/development.rb new file mode 100644 index 0000000..060b64a --- /dev/null +++ b/config/environments/development.rb @@ -0,0 +1,63 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # In the development environment your application's code is reloaded on + # every request. This slows down response time but is perfect for development + # since you don't have to restart the web server when you make code changes. + config.cache_classes = false + + # Do not eager load code on boot. + config.eager_load = false + + # Show full error reports. + config.consider_all_requests_local = true + + # Standard rails dev caching behaviour + # if Rails.root.join('tmp', 'caching-dev.txt').exist? + # config.action_controller.perform_caching = true + # config.cache_store = :memory_store + # config.public_file_server.headers = { + # 'Cache-Control' => "public, max-age=#{2.days.to_i}" + # } + # else + # config.action_controller.perform_caching = false + # config.cache_store = :null_store + # end + + # Using cache for sessions and permissions forces to use redis cache_store as mandatory store + # Here we use ENV.fetch instead of Barong::App.config, because environment/* files loads before lib and initializers + config.cache_store = :redis_cache_store, { driver: :hiredis, url: ENV.fetch('BARONG_REDIS_URL', 'redis://localhost:6379/1') } + + # Store uploaded files on the local file system (see config/storage.yml for options) + config.active_storage.service = :local + + # Don't care if the mailer can't send. + config.action_mailer.raise_delivery_errors = false + + config.action_mailer.perform_caching = false + + # Print deprecation notices to the Rails logger. + config.active_support.deprecation = :log + + # Raise an error on page load if there are pending migrations. + config.active_record.migration_error = :page_load + + # Highlight code that triggered database queries in logs. + config.active_record.verbose_query_logs = true + + # Debug mode disables concatenation and preprocessing of assets. + # This option may cause significant delays in view rendering with a large + # number of complex assets. + config.assets.debug = true + + # Suppress logger output for asset requests. + config.assets.quiet = true + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true + + # Use an evented file watcher to asynchronously detect changes in source code, + # routes, locales, etc. This feature depends on the listen gem. + config.file_watcher = ActiveSupport::EventedFileUpdateChecker + config.web_console.whitelisted_ips = '172.0.0.0/16' +end diff --git a/config/environments/production.rb b/config/environments/production.rb new file mode 100644 index 0000000..be8e803 --- /dev/null +++ b/config/environments/production.rb @@ -0,0 +1,106 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # Code is not reloaded between requests. + config.cache_classes = true + + # Eager load code on boot. This eager loads most of Rails and + # your application in memory, allowing both threaded web servers + # and those relying on copy on write to perform better. + # Rake tasks automatically ignore this option for performance. + config.eager_load = true + + # Full error reports are disabled and caching is turned on. + config.consider_all_requests_local = false + config.action_controller.perform_caching = true + + # Ensures that a master key has been made available in either ENV["RAILS_MASTER_KEY"] + # or in config/master.key. This key is used to decrypt credentials (and other encrypted files). + # config.require_master_key = true + + # Disable serving static files from the `/public` folder by default since + # Apache or NGINX already handles this. + config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present? + + # Compress JavaScripts and CSS. + config.assets.js_compressor = :uglifier + # config.assets.css_compressor = :sass + + # Do not fallback to assets pipeline if a precompiled asset is missed. + config.assets.compile = false + + # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb + + # Enable serving of images, stylesheets, and JavaScripts from an asset server. + # config.action_controller.asset_host = 'http://assets.example.com' + + # Specifies the header that your server uses for sending files. + # config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache + # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX + + # Store uploaded files on the local file system (see config/storage.yml for options) + config.active_storage.service = :local + + # Mount Action Cable outside main process or domain + # config.action_cable.mount_path = nil + # config.action_cable.url = 'wss://example.com/cable' + # config.action_cable.allowed_request_origins = [ 'http://example.com', /http:\/\/example.*/ ] + + # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. + # config.force_ssl = true + + # Use the lowest log level to ensure availability of diagnostic information + # when problems arise. + config.log_level = ENV.fetch('LOG_LEVEL', 'info') + + # Prepend all log lines with the following tags. + config.log_tags = [ :request_id ] + + # Use a different cache store in production. + # config.cache_store = :mem_cache_store + + # Using cache for sessions and permissions forces to use redis cache_store as mandatory store + # Here we use ENV.fetch instead of Barong::App.config, because environment/* files loads before lib and initializers + if ENV.true?('BARONG_REDIS_CLUSTER') + config.cache_store = :redis_cache_store, { driver: :hiredis, cluster: [ENV.fetch('BARONG_REDIS_URL')], password: ENV.fetch('BARONG_REDIS_PASSWORD') } + else + config.cache_store = :redis_cache_store, { driver: :hiredis, url: ENV.fetch('BARONG_REDIS_URL', 'redis://localhost:6379/1') } + end + + # Use a real queuing backend for Active Job (and separate queues per environment) + # config.active_job.queue_adapter = :resque + # config.active_job.queue_name_prefix = "barong_#{Rails.env}" + + config.action_mailer.perform_caching = false + + # Ignore bad email addresses and do not raise email delivery errors. + # Set this to true and configure the email server for immediate delivery to raise delivery errors. + config.action_mailer.raise_delivery_errors = true + + # Enable locale fallbacks for I18n (makes lookups for any locale fall back to + # the I18n.default_locale when a translation cannot be found). + config.i18n.fallbacks = true + + # Send deprecation notices to registered listeners. + config.active_support.deprecation = :notify + + # Use default logging formatter so that PID and timestamp are not suppressed. + config.log_formatter = JSONLogFormatter.new + + # Use a different logger for distributed setups. + # require 'syslog/logger' + # config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new 'app-name') + + output = STDERR if ENV["RAILS_LOG_TO_STDERR"].present? + output = STDOUT if ENV["RAILS_LOG_TO_STDOUT"].present? + + unless output.nil? + logger = ActiveSupport::Logger.new(output) + config.logger = ActiveSupport::TaggedLogging.new(logger) + end + + config.logger.formatter = config.log_formatter + + # Do not dump schema after migrations. + config.active_record.dump_schema_after_migration = false +end diff --git a/config/environments/test.rb b/config/environments/test.rb new file mode 100644 index 0000000..042680e --- /dev/null +++ b/config/environments/test.rb @@ -0,0 +1,46 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + config.log_level = :fatal + # The test environment is used exclusively to run your application's + # test suite. You never need to work with it otherwise. Remember that + # your test database is "scratch space" for the test suite and is wiped + # and recreated between test runs. Don't rely on the data there! + config.cache_classes = true + + # Do not eager load code on boot. This avoids loading your whole application + # just for the purpose of running a single test. If you are using a tool that + # preloads Rails for running tests, you may have to set it to true. + config.eager_load = false + + # Configure public file server for tests with Cache-Control for performance. + config.public_file_server.enabled = true + config.public_file_server.headers = { + 'Cache-Control' => "public, max-age=#{1.hour.to_i}" + } + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Raise exceptions instead of rendering exception templates. + config.action_dispatch.show_exceptions = false + + # Disable request forgery protection in test environment. + config.action_controller.allow_forgery_protection = false + + # Store uploaded files on the local file system in a temporary directory + config.active_storage.service = :test + + config.action_mailer.perform_caching = false + + # Tell Action Mailer not to deliver emails to the real world. + # The :test delivery method accumulates sent emails in the + # ActionMailer::Base.deliveries array. + config.action_mailer.delivery_method = :test + + # Print deprecation notices to the stderr. + config.active_support.deprecation = :stderr + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true +end diff --git a/config/initializers/api_pagination.rb b/config/initializers/api_pagination.rb new file mode 100644 index 0000000..15060b7 --- /dev/null +++ b/config/initializers/api_pagination.rb @@ -0,0 +1,27 @@ +ApiPagination.configure do |config| + # If you have more than one gem included, you can choose a paginator. + config.paginator = :kaminari # or :will_paginate + + # By default, this is set to 'Total' + # config.total_header = 'X-Total' + + # By default, this is set to 'Per-Page' + # config.per_page_header = 'X-Per-Page' + + # Optional: set this to add a header with the current page number. + config.page_header = 'Page' + + # Optional: set this to add other response format. Useful with tools that define :jsonapi format + # config.response_formats = [:json, :xml, :jsonapi] + + # Optional: what parameter should be used to set the page option + config.page_param = :page + + # Optional: what parameter should be used to set the per page option + config.per_page_param = :limit + + # Optional: Include the total and last_page link header + # By default, this is set to true + # Note: When using kaminari, this prevents the count call to the database + # config.include_total = false +end diff --git a/config/initializers/application_controller_renderer.rb b/config/initializers/application_controller_renderer.rb new file mode 100644 index 0000000..89d2efa --- /dev/null +++ b/config/initializers/application_controller_renderer.rb @@ -0,0 +1,8 @@ +# Be sure to restart your server when you modify this file. + +# ActiveSupport::Reloader.to_prepare do +# ApplicationController.renderer.defaults.merge!( +# http_host: 'example.org', +# https: false +# ) +# end diff --git a/config/initializers/assets.rb b/config/initializers/assets.rb new file mode 100644 index 0000000..4b828e8 --- /dev/null +++ b/config/initializers/assets.rb @@ -0,0 +1,14 @@ +# Be sure to restart your server when you modify this file. + +# Version of your assets, change this if you want to expire all your assets. +Rails.application.config.assets.version = '1.0' + +# Add additional assets to the asset load path. +# Rails.application.config.assets.paths << Emoji.images_path +# Add Yarn node_modules folder to the asset load path. +Rails.application.config.assets.paths << Rails.root.join('node_modules') + +# Precompile additional assets. +# application.js, application.css, and all non-JS/CSS in the app/assets +# folder are already added. +# Rails.application.config.assets.precompile += %w( admin.js admin.css ) diff --git a/config/initializers/backtrace_silencers.rb b/config/initializers/backtrace_silencers.rb new file mode 100644 index 0000000..59385cd --- /dev/null +++ b/config/initializers/backtrace_silencers.rb @@ -0,0 +1,7 @@ +# Be sure to restart your server when you modify this file. + +# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. +# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } + +# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. +# Rails.backtrace_cleaner.remove_silencers! diff --git a/config/initializers/barong.rb b/config/initializers/barong.rb new file mode 100644 index 0000000..c9cfe50 --- /dev/null +++ b/config/initializers/barong.rb @@ -0,0 +1,157 @@ +# frozen_string_literal: true + + +# 1/ check if ENV key exist then validate and set +# 2/ if no check in credentials then validate and set +# 3/ if no generate display warning, raise error in production, and set + +require 'barong/app' +require 'barong/keystore' +require 'barong/string' + +private_key_path = ENV['JWT_PRIVATE_KEY_PATH'] + +if !private_key_path.nil? + pkey = Barong::KeyStore.open!(private_key_path) + Rails.logger.error('Loading private key from: ' + private_key_path) + +elsif Rails.application.credentials.has?(:private_key) + pkey = Barong::KeyStore.read!(Rails.application.credentials.private_key) + Rails.logger.info('Loading private key from credentials.yml.enc') + +elsif !Rails.env.production? + # Generates private key + key = Barong::KeyStore.generate + pkey = key.to_pem + pub_key = key.public_key.to_pem + + # Save private/public keys + Barong::KeyStore.save!(pkey, 'config/rsa-key') + Barong::KeyStore.save!(pub_key, 'config/rsa-key.pub') + + Rails.logger.warn('Warning !! Generating private key') +else + raise 'Private key not found or invalid' +end + +kstore = Barong::KeyStore.new(pkey) + +# Define default value for secret_key_base in test and development mode +ENV['SECRET_KEY_BASE'] = '' unless Rails.env.production? + +Barong::App.define do |config| + # General configuration --------------------------------------------- + # https://www.openware.com/sdk/docs/barong/configuration.html#general-configuration + config.set(:app_name, 'Fibitex') + config.set(:domain, 'fibitex.com') + config.set(:uid_prefix, 'ID', regex: /^[A-z]{2,6}$/) + config.set(:session_name, '_dalan_session') + config.set(:session_expire_time, '1800', type: :integer) + config.set(:kyc_provider, 'kycaid', values: %w[kycaid local]) + config.set(:required_docs_expire, 'false', type: :bool) + config.set(:doc_num_limit, '10', type: :integer) + config.set(:geoip_lang, 'en', values: %w[en de es fr ja ru]) + config.set(:csrf_protection, 'true', type: :bool) + config.set(:apikey_nonce_lifetime, '50000', type: :integer) + config.set(:gateway, 'cloudflare', values: %w[akamai cloudflare]) + config.set(:jwt_expire_time, '3600', type: :integer) + config.set(:profile_double_verification, 'false', type: :bool) + config.set(:crc32_salt, '') + config.set(:api_data_masking_enabled, 'true', type: :bool) + config.set(:first_registration_superadmin, 'true', type: :bool) + config.set(:mgn_api_keys_user, 'false', type: :bool) + config.set(:mgn_api_keys_sa, 'false', type: :bool) + + + # Password configuration ----------------------------------------------- + # https://www.openware.com/sdk/docs/barong/configuration.html#password-configuration + config.set(:password_regexp, '^(?=.*[[:lower:]])(?=.*[[:upper:]])(?=.*[[:digit:]])(?=.*[[:graph:]]).{8,80}$', type: :regexp) + config.set(:password_min_entropy, '14', type: :integer) + config.set(:password_use_dictionary, 'true', type: :bool) + + # CAPTCHA configuration --------------------------------------------- + # https://www.openware.com/sdk/docs/barong/configuration.html#captcha-configuration + config.set(:captcha, 'none', values: %w[none recaptcha geetest]) + config.set(:geetest_id, '') + config.set(:geetest_key, '') + config.set(:recaptcha_site_key, '') + config.set(:recaptcha_secret_key, '') + + # Dependencies configuration (vault, redis, rabbitmq) --------------- + # https://www.openware.com/sdk/docs/barong/configuration.html#dependencies-configuration-vault-redis-rabbitmq + config.set(:event_api_rabbitmq_host, 'localhost') + config.set(:event_api_rabbitmq_port, '5672') + config.set(:event_api_rabbitmq_username, 'guest') + config.set(:event_api_rabbitmq_password, 'guest') + config.set(:vault_address, 'http://localhost:8200') + config.set(:vault_token, '') + config.set(:redis_cluster, 'false', type: :bool) + config.set(:redis_url, 'redis://localhost:6379/1') + config.set(:redis_password, '') + config.set(:vault_app_name, 'barong') + + # CORS configuration ----------------------------------------------- + # https://www.openware.com/sdk/docs/barong/configuration.html#api-cors-configuration + config.set(:api_cors_origins, '*') + config.set(:api_cors_max_age, '3600') + config.set(:api_cors_allow_credentials, 'false', type: :bool) + + # Config files configuration ---------------------------------------- + # https://www.openware.com/sdk/docs/barong/configuration.html#config-files-configuration + config.set(:config, 'config/barong.yml', type: :path) + config.set(:maxminddb_path, 'geolite/GeoLite2-Country.mmdb', type: :path) + config.set(:seeds_file, Rails.root.join('config', 'seeds.yml'), type: :path) + config.set(:authz_rules_file, Rails.root.join('config', 'authz_rules.yml'), type: :path) + + # SMTP configuration ------------------------------------------------ + # https://github.com/openware/barong/blob/master/docs/general/env_configuration.md#smtp-configuration + config.set(:sender_email, 'noreply@barong.io') + config.set(:sender_name, 'Barong') + config.set(:smtp_password, '') + config.set(:smtp_port, 1025) + config.set(:smtp_host, 'localhost') + config.set(:smtp_user, '') + config.set(:smtp_logo_link, 'https://storage.cloud.google.com/public_peatio/logo.png') + config.set(:default_language, 'en') + config.set(:smtp_domain, 'test.com') + config.set(:smtp_enable_starttls_auto, 'true', type: :bool) + config.set(:smtp_openssl_verify_mode, 'peer') + config.set(:smtp_auth, 'plain') + + # KYCAID ------------------------------------------------------------ + config.set(:kycaid_authorization_token, '') + config.set(:kycaid_sandbox_mode, 'true', type: :bool) + config.set(:kycaid_api_endpoint, 'https://api.kycaid.com/') + + # Auth0 configuration ----------------------------------------------- + config.set(:auth0_domain, '') + config.set(:auth0_client_id, '') + + # jibit configuration ---------------------------------------- + config.set(:jibit_api_url, '') + config.set(:jibit_api_key, '') + config.set(:jibit_api_secret, '') +end + +# KYCAID configuring +KYCAID.configure do |config| + config.authorization_token = Barong::App.config.kycaid_authorization_token + config.sandbox_mode = Barong::App.config.kycaid_sandbox_mode + config.api_endpoint = Barong::App.config.kycaid_api_endpoint +end + +ActionMailer::Base.smtp_settings = { + address: Barong::App.config.smtp_host, + port: Barong::App.config.smtp_port, + user_name: Barong::App.config.smtp_user, + authentication: Barong::App.config.smtp_auth, + domain: Barong::App.config.smtp_domain, + enable_starttls_auto: Barong::App.config.smtp_enable_starttls_auto, + openssl_verify_mode: Barong::App.config.smtp_openssl_verify_mode, + password: Barong::App.config.smtp_password +} + +Barong::GeoIP.lang = Barong::App.config.geoip_lang + +Rails.application.config.x.keystore = kstore +Barong::App.config.keystore = kstore diff --git a/config/initializers/barong_config.rb b/config/initializers/barong_config.rb new file mode 100644 index 0000000..d9a744d --- /dev/null +++ b/config/initializers/barong_config.rb @@ -0,0 +1,17 @@ +# FIXME BarongConfig should be a feature of Barong::App +class BarongConfig + class << self + + def list + @hash ||= read_from_yaml + end + + private + + def read_from_yaml + conf = YAML.load_file(Barong::App.config.config) + conf['activation_requirements'] = {'email' => 'verified'} unless conf['activation_requirements'] + conf + end + end +end diff --git a/config/initializers/carrierwave.rb b/config/initializers/carrierwave.rb new file mode 100644 index 0000000..5f64789 --- /dev/null +++ b/config/initializers/carrierwave.rb @@ -0,0 +1,60 @@ +# frozen_string_literal: true + +require 'carrierwave/storage/abstract' +require 'carrierwave/storage/file' +require 'carrierwave/storage/fog' + +Barong::App.define do |config| + # Storage configuration + # https://www.openware.com/sdk/docs/barong/configuration.html#storage-configuration + + config.set(:storage_provider, 'local') + config.set(:storage_bucket_name, 'local') + config.set(:storage_access_key, '') + config.set(:storage_secret_key, '') + config.set(:storage_endpoint, '') # optional (AWS, AliCloud) + config.set(:storage_signature_version, '4') # optional (AWS) + config.set(:storage_region, '') # optional (AWS, AliCloud) + config.set(:storage_pathstyle, 'false', type: :bool) # optional (AWS, AliCloud) + # Carrierwave defaults configuration + config.write(:uploader, UploadUploader) + config.set(:upload_size_min_range, '1', type: :integer) # in megabytes + config.set(:upload_size_max_range, '10', type: :integer) # in megabytes + config.set(:upload_auth_url_expiration, '1', type: :integer) # in minutes + config.set(:upload_extension_whitelist, 'jpg, jpeg, png, pdf', type: :array) +end + +CarrierWave.configure do |config| + if 'Google'.casecmp?(Barong::App.config.storage_provider) + config.fog_credentials = { + provider: 'Google', + google_storage_access_key_id: Barong::App.config.storage_access_key, + google_storage_secret_access_key: Barong::App.config.storage_secret_key + } + config.fog_directory = Barong::App.config.storage_bucket_name + elsif 'AWS'.casecmp?(Barong::App.config.storage_provider) + config.fog_credentials = { + provider: 'AWS', + aws_signature_version: Barong::App.config.storage_signature_version, + aws_access_key_id: Barong::App.config.storage_access_key, + aws_secret_access_key: Barong::App.config.storage_secret_key, + region: Barong::App.config.storage_region, + endpoint: Barong::App.config.storage_endpoint, + path_style: Barong::App.config.storage_pathstyle + } + config.fog_directory = Barong::App.config.storage_bucket_name + elsif 'AliCloud'.casecmp?(Barong::App.config.storage_provider) + Barong::App.write(:uploader, AliUploader) + config.fog_credentials = { + provider: 'aliyun', + aliyun_accesskey_id: Barong::App.config.storage_access_key, + aliyun_accesskey_secret: Barong::App.config.storage_secret_key, + aliyun_oss_bucket: Barong::App.config.storage_bucket_name, + aliyun_region_id: Barong::App.config.storage_region, + aliyun_oss_endpoint: "oss-#{Barong::App.config.storage_region}.aliyuncs.com" + } + config.fog_directory = Barong::App.config.storage_bucket_name + else + config.storage :file + end +end diff --git a/config/initializers/content_security_policy.rb b/config/initializers/content_security_policy.rb new file mode 100644 index 0000000..d3bcaa5 --- /dev/null +++ b/config/initializers/content_security_policy.rb @@ -0,0 +1,25 @@ +# Be sure to restart your server when you modify this file. + +# Define an application-wide content security policy +# For further information see the following documentation +# https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy + +# Rails.application.config.content_security_policy do |policy| +# policy.default_src :self, :https +# policy.font_src :self, :https, :data +# policy.img_src :self, :https, :data +# policy.object_src :none +# policy.script_src :self, :https +# policy.style_src :self, :https + +# # Specify URI for violation reports +# # policy.report_uri "/csp-violation-report-endpoint" +# end + +# If you are using UJS then enable automatic nonce generation +# Rails.application.config.content_security_policy_nonce_generator = -> request { SecureRandom.base64(16) } + +# Report CSP violations to a specified URI +# For further information see the following documentation: +# https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy-Report-Only +# Rails.application.config.content_security_policy_report_only = true diff --git a/config/initializers/cookies_serializer.rb b/config/initializers/cookies_serializer.rb new file mode 100644 index 0000000..ccd9e0d --- /dev/null +++ b/config/initializers/cookies_serializer.rb @@ -0,0 +1,7 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.action_dispatch.signed_cookie_digest = 'SHA256' + +# Specify a serializer for the signed and encrypted cookie jars. +# Valid options are :json, :marshal, and :hybrid. +Rails.application.config.action_dispatch.cookies_serializer = :json diff --git a/config/initializers/document_types.rb b/config/initializers/document_types.rb new file mode 100644 index 0000000..aa92226 --- /dev/null +++ b/config/initializers/document_types.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +# document types definitions +class DocumentTypes + class << self + def list + @list ||= YAML.load_file(Barong::App.config.config)['document_types'] + end + + def category_list + @category_list ||= YAML.load_file(Barong::App.config.config)['document_categories'] + end + end +end diff --git a/config/initializers/event_api.rb b/config/initializers/event_api.rb new file mode 100644 index 0000000..0d57ace --- /dev/null +++ b/config/initializers/event_api.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +require_dependency 'barong/event_api' + +ActiveSupport.on_load(:active_record) do + ActiveRecord::Base.include ::EventAPI::ActiveRecord::Extension +end diff --git a/config/initializers/exception_reporting.rb b/config/initializers/exception_reporting.rb new file mode 100644 index 0000000..a098138 --- /dev/null +++ b/config/initializers/exception_reporting.rb @@ -0,0 +1,25 @@ +def catch_and_report_exception(options = {}) + begin + yield + nil + rescue options.fetch(:class) { StandardError } => e + report_exception(e) + e + end +end + +def report_exception(exception, report_to_ets = true) + report_exception_to_screen(exception) + report_exception_to_ets(exception) if report_to_ets +end + +def report_exception_to_screen(exception) + Rails.logger.unknown exception.inspect + Rails.logger.unknown exception.backtrace.join("\n") if exception.respond_to?(:backtrace) +end + +def report_exception_to_ets(exception) + Raven.capture_exception(exception) if defined?(Raven) +rescue => ets_exception + report_exception(ets_exception, false) +end \ No newline at end of file diff --git a/config/initializers/filter_parameter_logging.rb b/config/initializers/filter_parameter_logging.rb new file mode 100644 index 0000000..25469a2 --- /dev/null +++ b/config/initializers/filter_parameter_logging.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Configure sensitive parameters which will be filtered from the log file. +Rails.application.config.filter_parameters += %i[password upload] diff --git a/config/initializers/inflections.rb b/config/initializers/inflections.rb new file mode 100644 index 0000000..ac033bf --- /dev/null +++ b/config/initializers/inflections.rb @@ -0,0 +1,16 @@ +# Be sure to restart your server when you modify this file. + +# Add new inflection rules using the following format. Inflections +# are locale specific, and you may define rules for as many different +# locales as you wish. All of these examples are active by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.plural /^(ox)$/i, '\1en' +# inflect.singular /^(ox)en/i, '\1' +# inflect.irregular 'person', 'people' +# inflect.uncountable %w( fish sheep ) +# end + +# These inflection rules are supported but not enabled by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.acronym 'RESTful' +# end diff --git a/config/initializers/jwt.rb b/config/initializers/jwt.rb new file mode 100644 index 0000000..718ca93 --- /dev/null +++ b/config/initializers/jwt.rb @@ -0,0 +1,26 @@ +require 'yaml' +require 'openssl' + +(YAML.load_file('config/management_api.yml') || {}).deep_symbolize_keys!.tap do |x| + x.fetch(:keychain).each do |id, key| + key = OpenSSL::PKey.read(Base64.urlsafe_decode64(key.fetch(:value))) + if key.private? + raise ArgumentError, 'keychain.' + id.to_s + ' was set to private key, ' \ + 'however it should be public (in config/management_api.yml).' + end + x[:keychain][id][:value] = key + end + + x.fetch(:scopes).values.each do |scope| + %i[permitted_signers mandatory_signers].each do |list| + scope[list] = scope.fetch(list, []).map(&:to_sym) + scope[list] = scope.fetch(list, []).map(&:to_sym) + if list == :mandatory_signers && scope[list].empty? + raise ArgumentError, 'scopes.' + scope.to_s + '.' + list.to_s + ' is empty, ' \ + 'however it should contain at least one value (in config/management_api.yml).' + end + end + end + + API::V2::Management::JWTAuthenticationMiddleware.security_configuration = x +end diff --git a/config/initializers/kavenegar-ruby_initializer.rb b/config/initializers/kavenegar-ruby_initializer.rb new file mode 100644 index 0000000..89e4b3e --- /dev/null +++ b/config/initializers/kavenegar-ruby_initializer.rb @@ -0,0 +1,18 @@ +KaveRestApi.configure do |config| + + # To completely ignore debug mode events(No Errors) uncomment this line *optional + # config.debugmode = false #by default it's true + + # It is recommended that you pull your API keys from environment settings. *required + config.api_key = ENV.fetch("KAVENEGAR_API_KEY", 'changeme') + + # Default response format is json (you can use xml too). *optional + config.format = 'json' + + #If you don't set your sender number in your request, this is the default number used instead *required + config.default_sender = ENV.fetch("KAVENEGAR_SENDER", 'changeme') + + # You can remove problematic emojis (like android emojis) and replace with standard emojis listed here:(https://www.webpagefx.com/tools/emoji-cheat-sheet/) + # config.strip_emoji = 'false' # can include false , true and matcher + +end diff --git a/config/initializers/mime_types.rb b/config/initializers/mime_types.rb new file mode 100644 index 0000000..dc18996 --- /dev/null +++ b/config/initializers/mime_types.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Add new mime types for use in respond_to blocks: +# Mime::Type.register "text/richtext", :rtf diff --git a/config/initializers/open_uri.rb b/config/initializers/open_uri.rb new file mode 100644 index 0000000..3d915e4 --- /dev/null +++ b/config/initializers/open_uri.rb @@ -0,0 +1,4 @@ +# Don't allow downloaded files to be created as StringIO. Create a tempfile instead + +OpenURI::Buffer.send :remove_const, 'StringMax' if OpenURI::Buffer.const_defined?('StringMax') +OpenURI::Buffer.const_set 'StringMax', 0 diff --git a/config/initializers/phone.rb b/config/initializers/phone.rb new file mode 100644 index 0000000..e603316 --- /dev/null +++ b/config/initializers/phone.rb @@ -0,0 +1,50 @@ +# frozen_string_literal: true + +require_dependency 'barong/mock_sms' + +Barong::App.define do |config| + # Twilio configuration ---------------------- + # https://www.openware.com/sdk/docs/barong/configuration.html#twilio-configuration + + # config.write(:twilio_provider, TwilioSmsSendService) + + # config.set(:phone_verification, 'mock') + # config.set(:twilio_phone_number, '+15005550000') + # config.set(:twilio_account_sid, '') + # config.set(:twilio_auth_token, '') + # config.set(:twilio_service_sid, '') + # config.set(:sms_content_template, 'Your verification code for Barong: {{code}}') + + +end + +# sid = Barong::App.config.twilio_account_sid +# token = Barong::App.config.twilio_auth_token +# service_sid = Barong::App.config.twilio_service_sid + +# case Barong::App.config.phone_verification +# when 'twilio_sms' +# raise 'Invalid twilio config' if sid.to_s.empty? || token.to_s.empty? + +# client = Twilio::REST::Client.new(sid, token) +# Barong::App.write(:twilio_provider, TwilioSmsSendService) + +# when 'twilio_verify' +# raise 'Invalid twilio config' if sid.to_s.empty? || token.to_s.empty? + +# client = Twilio::REST::Client.new(sid, token) +# service = client.verify.services.create(friendly_name: Barong::App.config.app_name) unless service_sid.present? +# Barong::App.write(:twilio_provider, TwilioVerifyService) +# when 'mock' +# if Rails.env.production? +# Rails.logger.info("WARNING! Don't use mock phone verification service in production") +# end +# Barong::App.write(:twilio_provider, MockPhoneVerifyService) + +# else +# raise "Unknown phone verification service #{Barong::App.config.phone_verification}" +# end + +# Barong::App.set(:twilio_client, client) if client +# Barong::App.set(:twilio_service_sid, service.sid) if service +# Phonelib.strict_check = true diff --git a/config/initializers/redis.rb b/config/initializers/redis.rb new file mode 100644 index 0000000..fea17aa --- /dev/null +++ b/config/initializers/redis.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +begin + if Rails.env.production? + redis_url = ENV.fetch('BARONG_REDIS_URL', 'redis://localhost:6379/1') + r = Redis.new(url: redis_url) + r.ping + end +rescue Redis::CannotConnectError + Rails.logger.fatal("Error connecting to Redis on #{redis_url} (Errno::ECONNREFUSED)") + raise 'FATAL: connection to Redis refused' +end diff --git a/config/initializers/redis_store.rb b/config/initializers/redis_store.rb new file mode 100644 index 0000000..e697705 --- /dev/null +++ b/config/initializers/redis_store.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +module Rack + module Session + # redis store configuration class to act as session_store (cache_store) + class Redis + def set_session(env, session_id, new_session, options) + with_lock env, false do + with do |c| + new_options = if env['api_v2.session_lifetime'] + x = ActionDispatch::Request::Session::Options.new \ + options.instance_variable_get(:@by), + options.instance_variable_get(:@env), + options.instance_variable_get(:@delegate) + x[:expire_after] = env['api_v2.session_lifetime'] + x + else + options + end + c.set(session_id, new_session, new_options) + end + session_id + end + end + end + end +end diff --git a/config/initializers/sessions_store.rb b/config/initializers/sessions_store.rb new file mode 100644 index 0000000..e36efa6 --- /dev/null +++ b/config/initializers/sessions_store.rb @@ -0,0 +1,4 @@ +# frozen_string_literal: true + +# Use cache_store as session_store for Rails sessions. Key default is '_barong_session' +Rails.application.config.session_store :cache_store, key: Barong::App.config.session_name, expire_after: 24.hours.seconds diff --git a/config/initializers/sidekiq.rb b/config/initializers/sidekiq.rb new file mode 100644 index 0000000..8ef303e --- /dev/null +++ b/config/initializers/sidekiq.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +Sidekiq.configure_server do |config| + config.redis = { url: ENV.fetch('BARONG_REDIS_URL', 'redis://localhost:6379/1') } +end + +Sidekiq.configure_client do |config| + config.redis = { url: ENV.fetch('BARONG_REDIS_URL', 'redis://localhost:6379/1') } +end diff --git a/config/initializers/trusted_proxies.rb b/config/initializers/trusted_proxies.rb new file mode 100644 index 0000000..4312bab --- /dev/null +++ b/config/initializers/trusted_proxies.rb @@ -0,0 +1,8 @@ +# Extend default list of trusted proxies with generic private and cloudflare proxy list + +# Cloudflare proxies list +# config/cloudflare_ips.yml fetches every time you build an image. Check Dockerfile l54, l55 +cloudflare_ips = File.read('config/cloudflare_ips.yml').split(/\R+/) +extend_proxies = cloudflare_ips.map { |proxy| IPAddr.new(proxy) } + +Rails.application.config.action_dispatch.trusted_proxies = ActionDispatch::RemoteIp::TRUSTED_PROXIES + extend_proxies diff --git a/config/initializers/user_storage_titles.rb b/config/initializers/user_storage_titles.rb new file mode 100644 index 0000000..2be9296 --- /dev/null +++ b/config/initializers/user_storage_titles.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +# whitelisted data storage titles definitions +class UserStorageTitles + class << self + def list + @list ||= YAML.load_file(Barong::App.config.config)['user_storage_titles'] || [] + end + end +end diff --git a/config/initializers/vault.rb b/config/initializers/vault.rb new file mode 100644 index 0000000..f4129ed --- /dev/null +++ b/config/initializers/vault.rb @@ -0,0 +1,42 @@ +# frozen_string_literal: true + +require 'vault/rails' + +Vault::Rails.configure do |config| + config.enabled = Rails.env.production? + config.address = Barong::App.config.vault_address + config.token = Barong::App.config.vault_token + config.ssl_verify = false + config.timeout = 60 + config.application = Barong::App.config.vault_app_name +end + +if Barong::App.config.vault_token.to_s != '' + def renew_process + token = Vault.auth_token.lookup(Vault.token) + time = token.data[:ttl] * (1 + rand) * 0.1 + Rails.logger.debug '[VAULT] Token will renew in %.0f sec' % time + sleep(time) + Vault.auth_token.renew(token.data[:id]) + Rails.logger.info '[VAULT] Token renewed' + end + + # where connect to vault + token = Vault.auth_token.lookup(Vault.token) + + if token.data[:renewable] + Rails.logger.info '[VAULT] Starting token renew thread' + Thread.new do + loop do + renew_process + rescue StandardError => e + report_exception(e) + sleep 60 + end + end + else + Rails.logger.info '[VAULT] Token is not renewable' + end +else + Rails.logger.warn 'Environment variable BARONG_VAULT_TOKEN is missing' +end diff --git a/config/initializers/versioning.rb b/config/initializers/versioning.rb new file mode 100644 index 0000000..49dca88 --- /dev/null +++ b/config/initializers/versioning.rb @@ -0,0 +1,12 @@ +# encoding: UTF-8 +# frozen_string_literal: true +# This file is auto-generated from the current state of VCS. +# Instead of editing this file, please use bin/gendocs. +module Barong + class Application + GIT_TAG = '2.7.0' + GIT_SHA = '3d7fe81' + BUILD_DATE = '2020-12-08 15:09:53+02:00' + VERSION = GIT_TAG + end +end diff --git a/config/initializers/wrap_parameters.rb b/config/initializers/wrap_parameters.rb new file mode 100644 index 0000000..bbfc396 --- /dev/null +++ b/config/initializers/wrap_parameters.rb @@ -0,0 +1,14 @@ +# Be sure to restart your server when you modify this file. + +# This file contains settings for ActionController::ParamsWrapper which +# is enabled by default. + +# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. +ActiveSupport.on_load(:action_controller) do + wrap_parameters format: [:json] +end + +# To enable root element in JSON for ActiveRecord objects. +# ActiveSupport.on_load(:active_record) do +# self.include_root_in_json = true +# end diff --git a/config/locales/en.yml b/config/locales/en.yml new file mode 100644 index 0000000..decc5a8 --- /dev/null +++ b/config/locales/en.yml @@ -0,0 +1,33 @@ +# Files in the config/locales directory are used for internationalization +# and are automatically loaded by Rails. If you want to use locales other +# than English, add the necessary files in this directory. +# +# To use the locales, use `I18n.t`: +# +# I18n.t 'hello' +# +# In views, this is aliased to just `t`: +# +# <%= t('hello') %> +# +# To use a different locale, set it with `I18n.locale`: +# +# I18n.locale = :es +# +# This would use the information in config/locales/es.yml. +# +# The following keys must be escaped otherwise they will not be retrieved by +# the default I18n backend: +# +# true, false, on, off, yes, no +# +# Instead, surround them with single quotes. +# +# en: +# 'true': 'foo' +# +# To learn more, please read the Rails Internationalization guide +# available at http://guides.rubyonrails.org/i18n.html. + +en: + hello: "Hello world" diff --git a/config/management_api_v1.yml b/config/management_api_v1.yml new file mode 100644 index 0000000..b58b77a --- /dev/null +++ b/config/management_api_v1.yml @@ -0,0 +1,54 @@ +# Be sure to restart your server when you modify this file. +# +# This file keeps all the security configuration variables for «Management API v1». +# +# Keeps all the public keys used to validate signatures. +# All values must be presented in PEM format and be URL-safe Base64 encoded. +# +# Example: +# +# keychain: +# backend-1.mycompany.example: +# algorithm: RS256 +# value: LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUF3UjNPT1RQbzZvZE8wM3hXVDRNawp6TXJuM2pQS2pVdW0rVkc5dUZWODZNejVnMm1ueXdSRDc4MEY4aXVaZm41SGtROFpTUlFHYlRHNnB1dlVWWDFCClA0MWIrUW52VHFtWFhHcE9aSklzV3V2cHA4dHpZenFOejUvcTRRdUZQWDlrczdtaVV2dkNzbmo5S21Wb08yMU4KUVgyOWZUNkRJYldkUnJvWU1IOHloVmRrSjRVQnhYeHlSWmZ4VnN4UFVwckNodEgxN1JwNnQvYVRTR0VZNndQNwpKbEVCZi9Gb0djQk15OU5BOWhqZFMyMWxGcmVYeXdaUzZYdmhrN3dydGJWT2didU5EajdVeWhjS0RCaHA4c2VjCkV4TlB6d2p4ckhGTzhZaitFejBCMmZKQ1FDWW9SVG1kTzVEQS9kRTFHQmtqeXRCZjhDdGVIdExXcmZIU2g5em0KNlFJREFRQUIKLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg== +# backend-2.mycompany.example: +# algorithm: HS384 +# value: LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUFyZm53OXpGMDRCaFlZTk5mblVKawppK2YwWUE2RitDdlZtMGozOEV1c2E2ZHdkRnBaMEFhK0dzRjlEWGpuOXgzTjdpZzlxNnFmbTN5TzdJbmxqZmdZCmp4eU12MmdXcTNTZmhySmZpUWd3dmh2NHJiMzJiTmc3ckxPTVJmenVDeUQ2aFBQU2FueTM3ZnhSNmxKR3E5SUcKUTRJa3JPNmZIOGozUllQVDBGUVlJcXg1a2pNbU9wczFlV2xTR1RYbDZWSDNtVWxxTWVMSjJjL1NMZ3Y3dUxDagpmMVpDTXFELzB4VERWZ0ZxbzJSSlRucEcvUzlXRHdpZ3U0aTdyY1VkeDcrQUMvK2lNSGpNL1VZekRtWHJDQkpaCjBnSUVPV1ZwM2dMMzNocmRZci9uNU11SFRiMXpJUHdJQW1ySHpmWFpwOEQxNVVUdGtENktXU1FINWQ5SnAvVncKN3dJREFRQUIKLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg== +# backend-3.mycompany.example: +# algorithm: RS512 +# value: LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQ0lqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FnOEFNSUlDQ2dLQ0FnRUEzL2VIUUd1V2NFUHhwY2pxaVN5SQpLYmFlTFhnNHhrTFcwMU12eHlPVENMeHNrbVk5T0ViVTBQa2ptaFk1bWhiOXpmVjJqMVBmbXdXQmp5bXJ2alJJCmlWMDdxczA1OUx3UGhyL0JZc0lnYk13bWVEZUp5VHlxTmFvckNkVklhamxMVHhGSklNOGtXTUg1TUcrR2U0b2wKc1VWblEwRDNZdURvNCtPSzJiSDBOY3M5ZEFTWGx4T0lsenpZTlFkUTNCSUxZbFE3MW9CRDNmTWRyaXQwSktVYwphb25jTXJ0RlB2WlRuZjZROUhVM2VpR3NxTHhWczVZRTBGUlVsd0Z4TjZzbnZNQW9rNEpRT3A5cUExUi96WHMwCnRWdUVpeEJ1Sm5jSjZSYlp5UVp5YWg3YzAxd1NLcks1UTRudVh3VlhXUkhvd0gxOTZHMU9TODhoYmVZNHNneTkKdForZ3NsdlZIYWJmK1JqK0JtZmNOYmx2T1lQWlI4K3dVQ2pOWW43L1BWRjQ0NDRzUCtTZkEyejdvaU1OVStrVwpGVHM5dVdRNGxzQ0RIQnd6ZXNFMDc0dmZLMHF4c0NNN0hWeHhVc2gvNGx3aGppZTgrTFNqdzliWTlrcjJxWWFmClRMRnpoVWl2clJMaEpWdnZkQmRRYlBIUFVybnJ2TnFqblRYOWtFcWR4bktrbWluWmhtbU1pakpKa1dGREgwbmgKNmR4ZlZwZ2puYXUzWmoyZkNSNFV6aXNXK25MaExUc1Fadzd0b0NaVUo2aWV6N0psOEpJYWdBVWJ5OW8ycUN4ZgpWcTBwK3pwRlZKUFZzelVQNkZMTzh3Tjd5aThVT3l4T3VmdmEvOHgySmRJTzJ4emlPc2ZLVnhIZTFZRkZtWVdtCnZKaWZ1ZGUrdCtBbS9EM1FMSjlpK2JNQ0F3RUFBUT09Ci0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLQo= +# +# +keychain: {} + +# +# Keeps all the JWT verification options. +# The documentation is available at https://github.com/jwt/ruby-jwt#support-for-reserved-claim-names. +# Check lib/jwt/default_options.rb for the default options. +# +jwt: {} + +# +# Keep all the API security scopes. +# +# The API security scope consists of scope name, list of permitted and mandatory signers. +# The scope name is associated with API actions. For example, write_labels is associated with +# ability to create private labels, edit and remove them. The scopes which have «write» in the name are supposed +# to be dangerous so they must require more signatures then read-only scopes +# +# Each scope must include list of permitted and mandatory signers. +# Barong validates JWT signatures against permitted keys and doesn't trust +# JWTs which don't include signatures from all mandatory signers. +# +# Example: +# +# scopes: +# write_labels: +# permitted_signers: ['backend-1.mycompany.example', 'backend-2.mycompany.example'] +# mandatory_signers: ['backend-1.mycompany.example', 'backend-2.mycompany.example'] +# +# The available scopes include: +# – write_labels +# - otp_sign +# +scopes: {} diff --git a/config/plugins.yml b/config/plugins.yml new file mode 100644 index 0000000..d2068d2 --- /dev/null +++ b/config/plugins.yml @@ -0,0 +1,22 @@ +# Be sure to run "bin/install_plugins" when you modify this file. +# +# This file is used for listing Barong plugins. +# The plugins must be listed as an array. Each element of array described the plugin using the next variables: +# +# * name +# Mandatory. Specify plugin name. The name must be compatible with filesystem rules. +# +# * git +# Mandatory. Specify Git repository URL. +# +# * commit +# Mandatory. Specify commit hash which Barong will checkout via "bin/install_plugins". +# +# * require +# Optional. Specify relative path to file from vendor/plugins which should be required by Barong. +# You may set this value to "false" if you don't want Barong to require the plugin. + +# Example configuration: +#- name: peatio-plugin-example +# git: https://github.com/rubykube/peatio-plugin-example.git +# commit: 11edd2e7c0bef229516f42fde79615a68a008d45 diff --git a/config/puma.rb b/config/puma.rb new file mode 100644 index 0000000..033b41a --- /dev/null +++ b/config/puma.rb @@ -0,0 +1,37 @@ +# Puma can serve each request in a thread from an internal thread pool. +# The `threads` method setting takes two numbers: a minimum and maximum. +# Any libraries that use thread pools should be configured to match +# the maximum value specified for Puma. Default is set to 5 threads for minimum +# and maximum; this matches the default thread size of Active Record. +# + +min_threads_count = ENV.fetch("RAILS_MIN_THREADS") { 1 } +max_threads_count = ENV.fetch("RAILS_MAX_THREADS") { 6 } + +threads min_threads_count, max_threads_count + +# Specifies the `port` that Puma will listen on to receive requests; default is 3000. +# +port ENV.fetch("PORT") { 3000 } + +# Specifies the `environment` that Puma will run in. +# +environment ENV.fetch("RAILS_ENV") { "development" } + +# Specifies the number of `workers` to boot in clustered mode. +# Workers are forked webserver processes. If using threads and workers together +# the concurrency of the application would be max `threads` * `workers`. +# Workers do not work on JRuby or Windows (both of which do not support +# processes). +# +workers ENV.fetch("WEB_CONCURRENCY") { 1 } + +# Use the `preload_app!` method when specifying a `workers` number. +# This directive tells Puma to first boot the application and load code +# before forking the application. This takes advantage of Copy On Write +# process behavior so workers use less memory. +# +# preload_app! + +# Allow puma to be restarted by `rails restart` command. +plugin :tmp_restart diff --git a/config/routes.rb b/config/routes.rb new file mode 100644 index 0000000..2edee4b --- /dev/null +++ b/config/routes.rb @@ -0,0 +1,4 @@ +Rails.application.routes.draw do + match '/api/v2/auth/*path', to: AuthorizeController.action(:authorize), via: :all + mount API::Base, at: '/api' +end diff --git a/config/spring.rb b/config/spring.rb new file mode 100644 index 0000000..9fa7863 --- /dev/null +++ b/config/spring.rb @@ -0,0 +1,6 @@ +%w[ + .ruby-version + .rbenv-vars + tmp/restart.txt + tmp/caching-dev.txt +].each { |path| Spring.watch(path) } diff --git a/config/storage.yml b/config/storage.yml new file mode 100644 index 0000000..d32f76e --- /dev/null +++ b/config/storage.yml @@ -0,0 +1,34 @@ +test: + service: Disk + root: <%= Rails.root.join("tmp/storage") %> + +local: + service: Disk + root: <%= Rails.root.join("storage") %> + +# Use rails credentials:edit to set the AWS secrets (as aws:access_key_id|secret_access_key) +# amazon: +# service: S3 +# access_key_id: <%= Rails.application.credentials.dig(:aws, :access_key_id) %> +# secret_access_key: <%= Rails.application.credentials.dig(:aws, :secret_access_key) %> +# region: us-east-1 +# bucket: your_own_bucket + +# Remember not to checkin your GCS keyfile to a repository +# google: +# service: GCS +# project: your_project +# credentials: <%= Rails.root.join("path/to/gcs.keyfile") %> +# bucket: your_own_bucket + +# Use rails credentials:edit to set the Azure Storage secret (as azure_storage:storage_access_key) +# microsoft: +# service: AzureStorage +# storage_account_name: your_account_name +# storage_access_key: <%= Rails.application.credentials.dig(:azure_storage, :storage_access_key) %> +# container: your_container_name + +# mirror: +# service: Mirror +# primary: local +# mirrors: [ amazon, google, microsoft ] diff --git a/config/templates/management_api_v1.yml.erb b/config/templates/management_api_v1.yml.erb new file mode 100644 index 0000000..b58b77a --- /dev/null +++ b/config/templates/management_api_v1.yml.erb @@ -0,0 +1,54 @@ +# Be sure to restart your server when you modify this file. +# +# This file keeps all the security configuration variables for «Management API v1». +# +# Keeps all the public keys used to validate signatures. +# All values must be presented in PEM format and be URL-safe Base64 encoded. +# +# Example: +# +# keychain: +# backend-1.mycompany.example: +# algorithm: RS256 +# value: LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUF3UjNPT1RQbzZvZE8wM3hXVDRNawp6TXJuM2pQS2pVdW0rVkc5dUZWODZNejVnMm1ueXdSRDc4MEY4aXVaZm41SGtROFpTUlFHYlRHNnB1dlVWWDFCClA0MWIrUW52VHFtWFhHcE9aSklzV3V2cHA4dHpZenFOejUvcTRRdUZQWDlrczdtaVV2dkNzbmo5S21Wb08yMU4KUVgyOWZUNkRJYldkUnJvWU1IOHloVmRrSjRVQnhYeHlSWmZ4VnN4UFVwckNodEgxN1JwNnQvYVRTR0VZNndQNwpKbEVCZi9Gb0djQk15OU5BOWhqZFMyMWxGcmVYeXdaUzZYdmhrN3dydGJWT2didU5EajdVeWhjS0RCaHA4c2VjCkV4TlB6d2p4ckhGTzhZaitFejBCMmZKQ1FDWW9SVG1kTzVEQS9kRTFHQmtqeXRCZjhDdGVIdExXcmZIU2g5em0KNlFJREFRQUIKLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg== +# backend-2.mycompany.example: +# algorithm: HS384 +# value: LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUFyZm53OXpGMDRCaFlZTk5mblVKawppK2YwWUE2RitDdlZtMGozOEV1c2E2ZHdkRnBaMEFhK0dzRjlEWGpuOXgzTjdpZzlxNnFmbTN5TzdJbmxqZmdZCmp4eU12MmdXcTNTZmhySmZpUWd3dmh2NHJiMzJiTmc3ckxPTVJmenVDeUQ2aFBQU2FueTM3ZnhSNmxKR3E5SUcKUTRJa3JPNmZIOGozUllQVDBGUVlJcXg1a2pNbU9wczFlV2xTR1RYbDZWSDNtVWxxTWVMSjJjL1NMZ3Y3dUxDagpmMVpDTXFELzB4VERWZ0ZxbzJSSlRucEcvUzlXRHdpZ3U0aTdyY1VkeDcrQUMvK2lNSGpNL1VZekRtWHJDQkpaCjBnSUVPV1ZwM2dMMzNocmRZci9uNU11SFRiMXpJUHdJQW1ySHpmWFpwOEQxNVVUdGtENktXU1FINWQ5SnAvVncKN3dJREFRQUIKLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg== +# backend-3.mycompany.example: +# algorithm: RS512 +# value: LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQ0lqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FnOEFNSUlDQ2dLQ0FnRUEzL2VIUUd1V2NFUHhwY2pxaVN5SQpLYmFlTFhnNHhrTFcwMU12eHlPVENMeHNrbVk5T0ViVTBQa2ptaFk1bWhiOXpmVjJqMVBmbXdXQmp5bXJ2alJJCmlWMDdxczA1OUx3UGhyL0JZc0lnYk13bWVEZUp5VHlxTmFvckNkVklhamxMVHhGSklNOGtXTUg1TUcrR2U0b2wKc1VWblEwRDNZdURvNCtPSzJiSDBOY3M5ZEFTWGx4T0lsenpZTlFkUTNCSUxZbFE3MW9CRDNmTWRyaXQwSktVYwphb25jTXJ0RlB2WlRuZjZROUhVM2VpR3NxTHhWczVZRTBGUlVsd0Z4TjZzbnZNQW9rNEpRT3A5cUExUi96WHMwCnRWdUVpeEJ1Sm5jSjZSYlp5UVp5YWg3YzAxd1NLcks1UTRudVh3VlhXUkhvd0gxOTZHMU9TODhoYmVZNHNneTkKdForZ3NsdlZIYWJmK1JqK0JtZmNOYmx2T1lQWlI4K3dVQ2pOWW43L1BWRjQ0NDRzUCtTZkEyejdvaU1OVStrVwpGVHM5dVdRNGxzQ0RIQnd6ZXNFMDc0dmZLMHF4c0NNN0hWeHhVc2gvNGx3aGppZTgrTFNqdzliWTlrcjJxWWFmClRMRnpoVWl2clJMaEpWdnZkQmRRYlBIUFVybnJ2TnFqblRYOWtFcWR4bktrbWluWmhtbU1pakpKa1dGREgwbmgKNmR4ZlZwZ2puYXUzWmoyZkNSNFV6aXNXK25MaExUc1Fadzd0b0NaVUo2aWV6N0psOEpJYWdBVWJ5OW8ycUN4ZgpWcTBwK3pwRlZKUFZzelVQNkZMTzh3Tjd5aThVT3l4T3VmdmEvOHgySmRJTzJ4emlPc2ZLVnhIZTFZRkZtWVdtCnZKaWZ1ZGUrdCtBbS9EM1FMSjlpK2JNQ0F3RUFBUT09Ci0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLQo= +# +# +keychain: {} + +# +# Keeps all the JWT verification options. +# The documentation is available at https://github.com/jwt/ruby-jwt#support-for-reserved-claim-names. +# Check lib/jwt/default_options.rb for the default options. +# +jwt: {} + +# +# Keep all the API security scopes. +# +# The API security scope consists of scope name, list of permitted and mandatory signers. +# The scope name is associated with API actions. For example, write_labels is associated with +# ability to create private labels, edit and remove them. The scopes which have «write» in the name are supposed +# to be dangerous so they must require more signatures then read-only scopes +# +# Each scope must include list of permitted and mandatory signers. +# Barong validates JWT signatures against permitted keys and doesn't trust +# JWTs which don't include signatures from all mandatory signers. +# +# Example: +# +# scopes: +# write_labels: +# permitted_signers: ['backend-1.mycompany.example', 'backend-2.mycompany.example'] +# mandatory_signers: ['backend-1.mycompany.example', 'backend-2.mycompany.example'] +# +# The available scopes include: +# – write_labels +# - otp_sign +# +scopes: {} diff --git a/config/templates/plugins.yml.erb b/config/templates/plugins.yml.erb new file mode 100644 index 0000000..d2068d2 --- /dev/null +++ b/config/templates/plugins.yml.erb @@ -0,0 +1,22 @@ +# Be sure to run "bin/install_plugins" when you modify this file. +# +# This file is used for listing Barong plugins. +# The plugins must be listed as an array. Each element of array described the plugin using the next variables: +# +# * name +# Mandatory. Specify plugin name. The name must be compatible with filesystem rules. +# +# * git +# Mandatory. Specify Git repository URL. +# +# * commit +# Mandatory. Specify commit hash which Barong will checkout via "bin/install_plugins". +# +# * require +# Optional. Specify relative path to file from vendor/plugins which should be required by Barong. +# You may set this value to "false" if you don't want Barong to require the plugin. + +# Example configuration: +#- name: peatio-plugin-example +# git: https://github.com/rubykube/peatio-plugin-example.git +# commit: 11edd2e7c0bef229516f42fde79615a68a008d45 diff --git a/db/migrate/20181101143041_create_all_tables.rb b/db/migrate/20181101143041_create_all_tables.rb new file mode 100644 index 0000000..21a1965 --- /dev/null +++ b/db/migrate/20181101143041_create_all_tables.rb @@ -0,0 +1,81 @@ +class CreateAllTables < ActiveRecord::Migration[5.2] + def change + + create_table :users do |t| + t.string :uid, null: false + t.string :email, null: false + t.string :password_digest, null: false + t.string :role, default: "member", null: false + t.integer :level, default: 0, null: false + t.boolean :otp, default: false + t.string :state, default: "pending", null: false + t.timestamps + end + add_index :users, :uid, unique: true + add_index :users, :email, unique: true + + create_table :apikeys do |t| + t.bigint :user_id, null: false, unsigned: true + t.string :kid, null: false + t.string :algorithm, null: false + t.string :scope + t.string :state, default: "active", null: false + t.timestamps + t.index [:user_id] + end + + create_table :documents do |t| + t.bigint :user_id, null: false, unsigned: true + t.string :upload + t.string :doc_type + t.string :doc_number + t.date :doc_expire + t.text :metadata + t.timestamps + t.index [:user_id] + end + + create_table :labels do |t| + t.bigint :user_id, null: false, unsigned: true + t.string :key, null: false + t.string :value, null: false + t.string :scope, default: "public", null: false + t.timestamps + t.index [:user_id] + t.index [:user_id, :key, :scope] + end + + create_table :levels do |t| + t.string :key, null: false + t.string :value + t.string :description + t.timestamps + end + + create_table :phones do |t| + t.integer :user_id, null: false, unsigned: true + t.string :country, null: false + t.string :number, null: false + t.string :code, limit: 5 + t.datetime :validated_at + t.timestamps + t.index [:user_id] + t.index [:number] + end + + create_table :profiles do |t| + t.bigint :user_id + t.string :first_name + t.string :last_name + t.date :dob + t.string :address + t.string :postcode + t.string :city + t.string :country + t.text :metadata + t.timestamps + t.index [:user_id] + end + + end +end diff --git a/db/migrate/20181115100105_create_activities.rb b/db/migrate/20181115100105_create_activities.rb new file mode 100644 index 0000000..1d5ca42 --- /dev/null +++ b/db/migrate/20181115100105_create_activities.rb @@ -0,0 +1,15 @@ +class CreateActivities < ActiveRecord::Migration[5.2] + def change + create_table :activities do |t| + t.references :user, null: false + t.string :user_ip, null: false + t.string :user_agent, null: false + t.string :topic, null: false + t.string :action, null: false + t.string :result, null: false + t.text :data, null: true + + t.timestamp :created_at # avoid updated_at as records not supposed to be updated + end + end +end diff --git a/db/migrate/20190108115333_add_referral_id_to_users_table.rb b/db/migrate/20190108115333_add_referral_id_to_users_table.rb new file mode 100644 index 0000000..2ad4e79 --- /dev/null +++ b/db/migrate/20190108115333_add_referral_id_to_users_table.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +# Add new field due to referral - affiliate relation +class AddReferralIdToUsersTable < ActiveRecord::Migration[5.2] + def change + add_column :users, :referral_id, :bigint, after: :state + end +end diff --git a/db/migrate/20190318133453_create_permissions.rb b/db/migrate/20190318133453_create_permissions.rb new file mode 100644 index 0000000..44956fc --- /dev/null +++ b/db/migrate/20190318133453_create_permissions.rb @@ -0,0 +1,13 @@ +class CreatePermissions < ActiveRecord::Migration[5.2] + def change + create_table :permissions do |t| + + t.string :action, null: false + t.string :role, null: false + t.string :verb, null: false + t.string :path, null: false + + t.timestamps + end + end +end diff --git a/db/migrate/20190529114214_changes_in_activities_table.rb b/db/migrate/20190529114214_changes_in_activities_table.rb new file mode 100644 index 0000000..200cb9f --- /dev/null +++ b/db/migrate/20190529114214_changes_in_activities_table.rb @@ -0,0 +1,10 @@ +class ChangesInActivitiesTable < ActiveRecord::Migration[5.2] + def change + add_column :activities, :target_uid, :string, after: :user_id + add_column :activities, :category, :string, after: :target_uid + add_column :permissions, :topic, :string, after: :path + + add_index :activities, :target_uid + add_index :permissions, :topic + end +end diff --git a/db/migrate/20190813112503_create_restrictions.rb b/db/migrate/20190813112503_create_restrictions.rb new file mode 100644 index 0000000..2fe163d --- /dev/null +++ b/db/migrate/20190813112503_create_restrictions.rb @@ -0,0 +1,12 @@ +class CreateRestrictions < ActiveRecord::Migration[5.2] + def change + create_table :restrictions do |t| + + t.string :scope, limit: 64, null: false + t.string :value, limit: 64, null: false + t.string :state, limit: 16, default: 'enabled', null: false + + t.timestamps + end + end +end diff --git a/db/migrate/20190827080317_add_data_field_to_users_table.rb b/db/migrate/20190827080317_add_data_field_to_users_table.rb new file mode 100644 index 0000000..2771543 --- /dev/null +++ b/db/migrate/20190827080317_add_data_field_to_users_table.rb @@ -0,0 +1,5 @@ +class AddDataFieldToUsersTable < ActiveRecord::Migration[5.2] + def change + add_column :users, :data, :text, null: true, after: :role + end +end diff --git a/db/migrate/20190902032709_add_state_profiles.rb b/db/migrate/20190902032709_add_state_profiles.rb new file mode 100644 index 0000000..8258806 --- /dev/null +++ b/db/migrate/20190902032709_add_state_profiles.rb @@ -0,0 +1,5 @@ +class AddStateProfiles < ActiveRecord::Migration[5.2] + def change + add_column :profiles, :state, :integer, unsigned: true, limit: 1, after: :country + end +end diff --git a/db/migrate/20191122151630_create_data_storages.rb b/db/migrate/20191122151630_create_data_storages.rb new file mode 100644 index 0000000..b43c19e --- /dev/null +++ b/db/migrate/20191122151630_create_data_storages.rb @@ -0,0 +1,12 @@ +class CreateDataStorages < ActiveRecord::Migration[5.2] + def change + create_table :data_storages do |t| + t.bigint :user_id, null: false, unsigned: true + t.string :title, limit: 64, null: false + t.text :data, limit: 5120, null: false + + t.timestamps + t.index [:user_id, :title], unique: true + end + end +end diff --git a/db/migrate/20191210090006_add_description_to_labels.rb b/db/migrate/20191210090006_add_description_to_labels.rb new file mode 100644 index 0000000..bf24a35 --- /dev/null +++ b/db/migrate/20191210090006_add_description_to_labels.rb @@ -0,0 +1,5 @@ +class AddDescriptionToLabels < ActiveRecord::Migration[5.2] + def change + add_column :labels, :description, :string, null: true, after: :scope + end +end diff --git a/db/migrate/20200318152130_add_default_state_to_profiles_table.rb b/db/migrate/20200318152130_add_default_state_to_profiles_table.rb new file mode 100644 index 0000000..0134757 --- /dev/null +++ b/db/migrate/20200318152130_add_default_state_to_profiles_table.rb @@ -0,0 +1,5 @@ +class AddDefaultStateToProfilesTable < ActiveRecord::Migration[5.2] + def change + change_column_default :profiles, :state, 'drafted' + end +end diff --git a/db/migrate/20200429082843_add_code_and_type_in_restrictions_table.rb b/db/migrate/20200429082843_add_code_and_type_in_restrictions_table.rb new file mode 100644 index 0000000..ac37912 --- /dev/null +++ b/db/migrate/20200429082843_add_code_and_type_in_restrictions_table.rb @@ -0,0 +1,6 @@ +class AddCodeAndTypeInRestrictionsTable < ActiveRecord::Migration[5.2] + def change + add_column :restrictions, :code, :integer, null: true, after: :value + add_column :restrictions, :category, :string, null: false, after: :id + end +end diff --git a/db/migrate/20200507104423_add_encrypted_secret.rb b/db/migrate/20200507104423_add_encrypted_secret.rb new file mode 100644 index 0000000..c0056a5 --- /dev/null +++ b/db/migrate/20200507104423_add_encrypted_secret.rb @@ -0,0 +1,5 @@ +class AddEncryptedSecret < ActiveRecord::Migration[5.2] + def change + add_column :apikeys, :secret_encrypted, :string, limit: 1024, after: :scope + end +end diff --git a/db/migrate/20200514123908_add_identificator_to_documents_table.rb b/db/migrate/20200514123908_add_identificator_to_documents_table.rb new file mode 100644 index 0000000..f4f3eb6 --- /dev/null +++ b/db/migrate/20200514123908_add_identificator_to_documents_table.rb @@ -0,0 +1,7 @@ +class AddIdentificatorToDocumentsTable < ActiveRecord::Migration[5.2] + def change + add_column :documents, :identificator, :string, after: :doc_expire + add_column :documents, :doc_issue, :date, before: :doc_expire + add_column :profiles, :applicant_id, :string, after: :user_id + end +end diff --git a/db/migrate/20200602075906_add_author_to_profiles.rb b/db/migrate/20200602075906_add_author_to_profiles.rb new file mode 100644 index 0000000..6e076b0 --- /dev/null +++ b/db/migrate/20200602075906_add_author_to_profiles.rb @@ -0,0 +1,5 @@ +class AddAuthorToProfiles < ActiveRecord::Migration[5.2] + def change + add_column :profiles, :author, :string, null: true, after: :user_id + end +end diff --git a/db/migrate/20200609144734_create_comments.rb b/db/migrate/20200609144734_create_comments.rb new file mode 100644 index 0000000..ed16c36 --- /dev/null +++ b/db/migrate/20200609144734_create_comments.rb @@ -0,0 +1,13 @@ +class CreateComments < ActiveRecord::Migration[5.2] + def change + create_table :comments do |t| + t.bigint :user_id, null: false, unsigned: true + t.string :author_uid, limit: 16, null: false + t.string :title, limit: 64, null: false + t.text :data, limit: 5120, null: false + + t.timestamps + t.index :user_id + end + end +end diff --git a/db/migrate/20200701115721_add_doc_category_to_documents.rb b/db/migrate/20200701115721_add_doc_category_to_documents.rb new file mode 100644 index 0000000..93605a3 --- /dev/null +++ b/db/migrate/20200701115721_add_doc_category_to_documents.rb @@ -0,0 +1,5 @@ +class AddDocCategoryToDocuments < ActiveRecord::Migration[5.2] + def change + add_column :documents, :doc_category, :string + end +end diff --git a/db/migrate/20200902125225_make_api_key_kid_unique.rb b/db/migrate/20200902125225_make_api_key_kid_unique.rb new file mode 100644 index 0000000..55de1c2 --- /dev/null +++ b/db/migrate/20200902125225_make_api_key_kid_unique.rb @@ -0,0 +1,18 @@ +class MakeApiKeyKidUnique < ActiveRecord::Migration[5.2] + class APIKey < ActiveRecord::Base + self.table_name = :apikeys + end + + def up + duplicated_records = APIKey.select(:kid).group(:kid).having("count(*) > 1") + duplicated_records.each do |api_key| + APIKey.where(kid: api_key.kid).destroy_all + end + + add_index :apikeys, :kid, unique: true unless index_exists?(:apikeys, :kid) + end + + def down + remove_index :apikeys, :kid if index_exists?(:apikeys, :kid) + end +end diff --git a/db/migrate/20200904153034_add_service_accounts_and_related_changes.rb b/db/migrate/20200904153034_add_service_accounts_and_related_changes.rb new file mode 100644 index 0000000..c023ed3 --- /dev/null +++ b/db/migrate/20200904153034_add_service_accounts_and_related_changes.rb @@ -0,0 +1,50 @@ +class AddServiceAccountsAndRelatedChanges < ActiveRecord::Migration[5.2] + class APIKey < ActiveRecord::Base + self.table_name = :apikeys + end + + def up + create_table :service_accounts do |t| + t.string :uid, null: false + t.bigint :owner_id, null: false, unsigned: true + t.string :email, null: false + t.string :role, default: "service_account", null: false + t.integer :level, default: 0, null: false + t.string :state, default: "pending", null: false + + t.timestamps + end + + add_column :apikeys, :key_holder_account_id, :bigint, null: false, unsigned: true, after: :id + add_column :apikeys, :key_holder_account_type, :string, null: false, default: "User", after: :key_holder_account_id + + APIKey.find_each do |api_key| + api_key.key_holder_account_type = 'User' + api_key.key_holder_account_id = api_key.user_id + api_key.save! + end + + remove_column :apikeys, :user_id + add_index :apikeys, [:key_holder_account_type, :key_holder_account_id], name: :idx_apikey_on_account unless index_exists?(:service_accounts, [:key_holder_account_type, :key_holder_account_id]) + end + + def down + add_column :apikeys, :user_id, :bigint, unsigned: true, null: false, after: :key_holder_account_id + + APIKey.find_each do |api_key| + if api_key.key_holder_account_type == 'ServiceAccount' + api_key.destroy! + next + end + + api_key.user_id = api_key.key_holder_account_id + api_key.save! + end + + remove_column :apikeys, :key_holder_account_id + remove_column :apikeys, :key_holder_account_type + + remove_index :service_accounts, column: [:key_holder_account_type, :key_holder_account_id] if index_exists?(:service_accounts, [:key_holder_account_type, :key_holder_account_id]) + drop_table :service_accounts + end +end diff --git a/db/migrate/20200929143711_add_encrypted_values_to_phones_profiles_documents.rb b/db/migrate/20200929143711_add_encrypted_values_to_phones_profiles_documents.rb new file mode 100644 index 0000000..c22e573 --- /dev/null +++ b/db/migrate/20200929143711_add_encrypted_values_to_phones_profiles_documents.rb @@ -0,0 +1,57 @@ +class AddEncryptedValuesToPhonesProfilesDocuments < ActiveRecord::Migration[5.2] + def up + # Phones Table + add_column :phones, :number_encrypted, :string, null: false, after: :code + add_column :phones, :number_index, :bigint, null: false, after: :number_encrypted + add_index :phones, [:number_index] + + remove_column :phones, :number, :string + + # Profiles Table + add_column :profiles, :first_name_encrypted, :string, limit: 1024, after: :applicant_id + add_column :profiles, :last_name_encrypted, :string, limit: 1024, after: :first_name_encrypted + add_column :profiles, :dob_encrypted, :string, after: :last_name_encrypted + add_column :profiles, :address_encrypted, :string, limit: 1024, after: :dob_encrypted + + + remove_column :profiles, :first_name, :string + remove_column :profiles, :last_name, :string + remove_column :profiles, :dob, :date + remove_column :profiles, :address, :string + + # Documents table + add_column :documents, :doc_number_encrypted, :string, after: :doc_expire + add_column :documents, :doc_number_index, :bigint, after: :doc_number_encrypted + add_index :documents, [:doc_number_index] + + remove_column :documents, :doc_number, :string + end + + def down + # Phones Table + add_column :phones, :number, :string, null: false, after: :country + + remove_index :phones, column: :number_index + remove_column :phones, :number_encrypted, :string + remove_column :phones, :number_index, :bigint + + # Profiles Table + add_column :profiles, :first_name, :string, after: :applicant_id + add_column :profiles, :last_name, :string, after: :first_name + add_column :profiles, :dob, :date, after: :last_name + add_column :profiles, :address, :string, after: :dob + + + remove_column :profiles, :first_name_encrypted, :string + remove_column :profiles, :last_name_encrypted, :string + remove_column :profiles, :dob_encrypted, :string + remove_column :profiles, :address_encrypted, :string + + # Documents table + add_column :documents, :doc_number, :string, after: :doc_type + + remove_index :documents, column: :doc_number_index + remove_column :documents, :doc_number_encrypted, :string + remove_column :documents, :doc_number_index, :bigint + end +end diff --git a/db/migrate/20201001112814_change_document_fields_position.rb b/db/migrate/20201001112814_change_document_fields_position.rb new file mode 100644 index 0000000..d185780 --- /dev/null +++ b/db/migrate/20201001112814_change_document_fields_position.rb @@ -0,0 +1,11 @@ +class ChangeDocumentFieldsPosition < ActiveRecord::Migration[5.2] + def up + change_column :documents, :doc_issue, :date, after: :doc_number_index + change_column :documents, :doc_category, :string, after: :doc_issue + end + + def down + change_column :documents, :doc_issue, :date, after: :updated_at + change_column :documents, :doc_category, :string, after: :doc_issue + end +end diff --git a/db/migrate/20210218135634_change_owner_id_requirement.rb b/db/migrate/20210218135634_change_owner_id_requirement.rb new file mode 100644 index 0000000..78b58ea --- /dev/null +++ b/db/migrate/20210218135634_change_owner_id_requirement.rb @@ -0,0 +1,9 @@ +class ChangeOwnerIdRequirement < ActiveRecord::Migration[5.2] + def up + change_column :service_accounts, :owner_id, :bigint, null: true, unsigned: true + end + + def down + change_column :service_accounts, :owner_id, :bigint, null: false, unsigned: true + end +end diff --git a/db/migrate/20210413065736_add_national_code_to_profiles.rb b/db/migrate/20210413065736_add_national_code_to_profiles.rb new file mode 100644 index 0000000..858ba4c --- /dev/null +++ b/db/migrate/20210413065736_add_national_code_to_profiles.rb @@ -0,0 +1,5 @@ +class AddNationalCodeToProfiles < ActiveRecord::Migration[5.2] + def change + add_column :profiles, :national_code_encrypted, :string + end +end diff --git a/db/migrate/20210418085508_create_treasuries.rb b/db/migrate/20210418085508_create_treasuries.rb new file mode 100644 index 0000000..5c1c867 --- /dev/null +++ b/db/migrate/20210418085508_create_treasuries.rb @@ -0,0 +1,21 @@ +class CreateTreasuries < ActiveRecord::Migration[5.2] + def down + drop_table :treasuries + end + + def up + create_table :treasuries do |t| + t.bigint :user_id, null: false, unsigned: true + t.string :title, limit: 128, null: true + t.string :data, null: false + t.text :result + t.integer :state, default: 0, null: false, unsigned: true + t.integer :kind, default: 0, null: false, unsigned: true + t.timestamps + end + add_index :treasuries, :user_id + add_index :treasuries, :data, unique: true + add_index :treasuries, %i[user_id title], unique: true + end +end + diff --git a/db/migrate/20210420111532_create_provinces.rb b/db/migrate/20210420111532_create_provinces.rb new file mode 100644 index 0000000..cca2f28 --- /dev/null +++ b/db/migrate/20210420111532_create_provinces.rb @@ -0,0 +1,12 @@ +class CreateProvinces < ActiveRecord::Migration[5.2] + def down + drop_table :provinces + end + + def up + create_table :provinces do |t| + t.string :name + t.timestamps + end + end +end diff --git a/db/migrate/20210420111629_create_cities.rb b/db/migrate/20210420111629_create_cities.rb new file mode 100644 index 0000000..86582d2 --- /dev/null +++ b/db/migrate/20210420111629_create_cities.rb @@ -0,0 +1,14 @@ +class CreateCities < ActiveRecord::Migration[5.2] + def down + drop_table :cities + end + def up + create_table :cities do |t| + t.string :name + t.references :province, foreign_key: true + t.timestamps + end + end +end + + diff --git a/db/migrate/20210420113539_change_city_in_profile.rb b/db/migrate/20210420113539_change_city_in_profile.rb new file mode 100644 index 0000000..0825440 --- /dev/null +++ b/db/migrate/20210420113539_change_city_in_profile.rb @@ -0,0 +1,5 @@ +class ChangeCityInProfile < ActiveRecord::Migration[5.2] + def change + add_reference :profiles, :city + end +end diff --git a/db/migrate/20210425062048_add_step_to_phone.rb b/db/migrate/20210425062048_add_step_to_phone.rb new file mode 100644 index 0000000..cb447c6 --- /dev/null +++ b/db/migrate/20210425062048_add_step_to_phone.rb @@ -0,0 +1,13 @@ +class AddStepToPhone < ActiveRecord::Migration[5.2] + def up + add_column :phones, :category, :integer, null: false + add_column :phones, :state, :integer, null: true, default: 0 + add_column :phones, :step, :integer, null: true, default: 0 + end + + def down + remove_column :phones, :category + remove_column :phones, :state + remove_column :phones, :step + end +end diff --git a/db/migrate/20210714111301_add_state_to_documents.rb b/db/migrate/20210714111301_add_state_to_documents.rb new file mode 100644 index 0000000..0e62cb2 --- /dev/null +++ b/db/migrate/20210714111301_add_state_to_documents.rb @@ -0,0 +1,9 @@ +class AddStateToDocuments < ActiveRecord::Migration[5.2] + def up + add_column :documents, :state, :integer, null: false, default: 0 + end + + def down + remove_column :documents, :state + end +end diff --git a/db/migrate/20210811064241_remove_index_data_from_treasuries.rb b/db/migrate/20210811064241_remove_index_data_from_treasuries.rb new file mode 100644 index 0000000..b40237d --- /dev/null +++ b/db/migrate/20210811064241_remove_index_data_from_treasuries.rb @@ -0,0 +1,7 @@ +class RemoveIndexDataFromTreasuries < ActiveRecord::Migration[5.2] + def change + remove_index :treasuries, name: 'index_treasuries_on_data' + remove_index :treasuries, name: 'index_treasuries_on_user_id_and_title' + end + +end diff --git a/db/schema.rb b/db/schema.rb new file mode 100644 index 0000000..6fa47c9 --- /dev/null +++ b/db/schema.rb @@ -0,0 +1,213 @@ +# This file is auto-generated from the current state of the database. Instead +# of editing this file, please use the migrations feature of Active Record to +# incrementally modify your database, and then regenerate this schema definition. +# +# Note that this schema.rb definition is the authoritative source for your +# database schema. If you need to create the application database on another +# system, you should be using db:schema:load, not running all the migrations +# from scratch. The latter is a flawed and unsustainable approach (the more migrations +# you'll amass, the slower it'll run and the greater likelihood for issues). +# +# It's strongly recommended that you check this file into your version control system. + +ActiveRecord::Schema.define(version: 2021_08_11_064241) do + + create_table "activities", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t| + t.bigint "user_id", null: false + t.string "target_uid" + t.string "category" + t.string "user_ip", null: false + t.string "user_agent", null: false + t.string "topic", null: false + t.string "action", null: false + t.string "result", null: false + t.text "data" + t.timestamp "created_at" + t.index ["target_uid"], name: "index_activities_on_target_uid" + t.index ["user_id"], name: "index_activities_on_user_id" + end + + create_table "apikeys", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t| + t.bigint "key_holder_account_id", null: false, unsigned: true + t.string "key_holder_account_type", default: "User", null: false + t.string "kid", null: false + t.string "algorithm", null: false + t.string "scope" + t.string "secret_encrypted", limit: 1024 + t.string "state", default: "active", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["key_holder_account_type", "key_holder_account_id"], name: "idx_apikey_on_account" + t.index ["kid"], name: "index_apikeys_on_kid", unique: true + end + + create_table "cities", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t| + t.string "name" + t.bigint "province_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["province_id"], name: "index_cities_on_province_id" + end + + create_table "comments", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t| + t.bigint "user_id", null: false, unsigned: true + t.string "author_uid", limit: 16, null: false + t.string "title", limit: 64, null: false + t.text "data", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["user_id"], name: "index_comments_on_user_id" + end + + create_table "data_storages", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t| + t.bigint "user_id", null: false, unsigned: true + t.string "title", limit: 64, null: false + t.text "data", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["user_id", "title"], name: "index_data_storages_on_user_id_and_title", unique: true + end + + create_table "documents", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t| + t.bigint "user_id", null: false, unsigned: true + t.string "upload" + t.string "doc_type" + t.date "doc_expire" + t.string "doc_number_encrypted" + t.bigint "doc_number_index" + t.date "doc_issue" + t.string "doc_category" + t.string "identificator" + t.text "metadata" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.integer "state", default: 0, null: false + t.index ["doc_number_index"], name: "index_documents_on_doc_number_index" + t.index ["user_id"], name: "index_documents_on_user_id" + end + + create_table "labels", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t| + t.bigint "user_id", null: false, unsigned: true + t.string "key", null: false + t.string "value", null: false + t.string "scope", default: "public", null: false + t.string "description" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["user_id", "key", "scope"], name: "index_labels_on_user_id_and_key_and_scope" + t.index ["user_id"], name: "index_labels_on_user_id" + end + + create_table "levels", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t| + t.string "key", null: false + t.string "value" + t.string "description" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + create_table "permissions", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t| + t.string "action", null: false + t.string "role", null: false + t.string "verb", null: false + t.string "path", null: false + t.string "topic" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["topic"], name: "index_permissions_on_topic" + end + + create_table "phones", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t| + t.integer "user_id", null: false, unsigned: true + t.string "country", null: false + t.string "code", limit: 5 + t.string "number_encrypted", null: false + t.bigint "number_index", null: false + t.datetime "validated_at" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.integer "category", null: false + t.integer "state", default: 0 + t.integer "step", default: 0 + t.index ["number_index"], name: "index_phones_on_number_index" + t.index ["user_id"], name: "index_phones_on_user_id" + end + + create_table "profiles", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t| + t.bigint "user_id" + t.string "author" + t.string "applicant_id" + t.string "first_name_encrypted", limit: 1024 + t.string "last_name_encrypted", limit: 1024 + t.string "dob_encrypted" + t.string "address_encrypted", limit: 1024 + t.string "postcode" + t.string "city" + t.string "country" + t.integer "state", limit: 1, default: 0, unsigned: true + t.text "metadata" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.string "national_code_encrypted" + t.bigint "city_id" + t.index ["city_id"], name: "index_profiles_on_city_id" + t.index ["user_id"], name: "index_profiles_on_user_id" + end + + create_table "provinces", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t| + t.string "name" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + create_table "restrictions", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t| + t.string "category", null: false + t.string "scope", limit: 64, null: false + t.string "value", limit: 64, null: false + t.integer "code" + t.string "state", limit: 16, default: "enabled", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + create_table "service_accounts", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t| + t.string "uid", null: false + t.bigint "owner_id", unsigned: true + t.string "email", null: false + t.string "role", default: "service_account", null: false + t.integer "level", default: 0, null: false + t.string "state", default: "pending", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + create_table "treasuries", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t| + t.bigint "user_id", null: false, unsigned: true + t.string "title", limit: 128 + t.string "data", null: false + t.text "result" + t.integer "state", default: 0, null: false, unsigned: true + t.integer "kind", default: 0, null: false, unsigned: true + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["user_id"], name: "index_treasuries_on_user_id" + end + + create_table "users", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t| + t.string "uid", null: false + t.string "email", null: false + t.string "password_digest", null: false + t.string "role", default: "member", null: false + t.text "data" + t.integer "level", default: 0, null: false + t.boolean "otp", default: false + t.string "state", default: "pending", null: false + t.bigint "referral_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["email"], name: "index_users_on_email", unique: true + t.index ["uid"], name: "index_users_on_uid", unique: true + end + + add_foreign_key "cities", "provinces" +end diff --git a/db/seeds.rb b/db/seeds.rb new file mode 100644 index 0000000..0d8ce92 --- /dev/null +++ b/db/seeds.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +require_dependency 'barong/seed' + +seed = Barong::Seed.new +seed.seed_levels +seed.seed_permissions +seed.seed_users + +seed.seed_superadmin +seed.seed_restrictions +# seed.seed_provinces +# seed.seed_cities +puts seed.inspect diff --git a/db/structure.sql b/db/structure.sql new file mode 100644 index 0000000..39610e0 --- /dev/null +++ b/db/structure.sql @@ -0,0 +1,266 @@ + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; +DROP TABLE IF EXISTS `activities`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `activities` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `user_id` bigint(20) NOT NULL, + `target_uid` varchar(255) DEFAULT NULL, + `category` varchar(255) DEFAULT NULL, + `user_ip` varchar(255) NOT NULL, + `user_agent` varchar(255) NOT NULL, + `topic` varchar(255) NOT NULL, + `action` varchar(255) NOT NULL, + `result` varchar(255) NOT NULL, + `data` text, + `created_at` timestamp NULL DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `index_activities_on_user_id` (`user_id`), + KEY `index_activities_on_target_uid` (`target_uid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `apikeys`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `apikeys` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `user_id` bigint(20) unsigned NOT NULL, + `kid` varchar(255) NOT NULL, + `algorithm` varchar(255) NOT NULL, + `scope` varchar(255) DEFAULT NULL, + `state` varchar(255) NOT NULL DEFAULT 'active', + `created_at` datetime NOT NULL, + `updated_at` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `index_apikeys_on_user_id` (`user_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ar_internal_metadata`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `ar_internal_metadata` ( + `key` varchar(255) NOT NULL, + `value` varchar(255) DEFAULT NULL, + `created_at` datetime NOT NULL, + `updated_at` datetime NOT NULL, + PRIMARY KEY (`key`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `comments`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `comments` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `user_id` bigint(20) unsigned NOT NULL, + `author_uid` varchar(16) NOT NULL, + `title` varchar(64) NOT NULL, + `data` text NOT NULL, + `created_at` datetime NOT NULL, + `updated_at` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `index_comments_on_user_id` (`user_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `data_storages`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `data_storages` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `user_id` bigint(20) unsigned NOT NULL, + `title` varchar(64) NOT NULL, + `data` text NOT NULL, + `created_at` datetime NOT NULL, + `updated_at` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `index_data_storages_on_user_id_and_title` (`user_id`,`title`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `documents`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `documents` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `user_id` bigint(20) unsigned NOT NULL, + `upload` varchar(255) DEFAULT NULL, + `doc_type` varchar(255) DEFAULT NULL, + `doc_number` varchar(255) DEFAULT NULL, + `doc_expire` date DEFAULT NULL, + `identificator` varchar(255) DEFAULT NULL, + `metadata` text, + `created_at` datetime NOT NULL, + `updated_at` datetime NOT NULL, + `doc_issue` date DEFAULT NULL, + `doc_category` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `index_documents_on_user_id` (`user_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `labels`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `labels` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `user_id` bigint(20) unsigned NOT NULL, + `key` varchar(255) NOT NULL, + `value` varchar(255) NOT NULL, + `scope` varchar(255) NOT NULL DEFAULT 'public', + `description` varchar(255) DEFAULT NULL, + `created_at` datetime NOT NULL, + `updated_at` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `index_labels_on_user_id` (`user_id`), + KEY `index_labels_on_user_id_and_key_and_scope` (`user_id`,`key`,`scope`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `levels`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `levels` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `key` varchar(255) NOT NULL, + `value` varchar(255) DEFAULT NULL, + `description` varchar(255) DEFAULT NULL, + `created_at` datetime NOT NULL, + `updated_at` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `permissions`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `permissions` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `action` varchar(255) NOT NULL, + `role` varchar(255) NOT NULL, + `verb` varchar(255) NOT NULL, + `path` varchar(255) NOT NULL, + `topic` varchar(255) DEFAULT NULL, + `created_at` datetime NOT NULL, + `updated_at` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `index_permissions_on_topic` (`topic`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `phones`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `phones` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `user_id` int(10) unsigned NOT NULL, + `country` varchar(255) NOT NULL, + `number` varchar(255) NOT NULL, + `code` varchar(5) DEFAULT NULL, + `validated_at` datetime DEFAULT NULL, + `created_at` datetime NOT NULL, + `updated_at` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `index_phones_on_user_id` (`user_id`), + KEY `index_phones_on_number` (`number`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `profiles`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `profiles` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `user_id` bigint(20) DEFAULT NULL, + `author` varchar(255) DEFAULT NULL, + `applicant_id` varchar(255) DEFAULT NULL, + `first_name` varchar(255) DEFAULT NULL, + `last_name` varchar(255) DEFAULT NULL, + `dob` date DEFAULT NULL, + `address` varchar(255) DEFAULT NULL, + `postcode` varchar(255) DEFAULT NULL, + `city` varchar(255) DEFAULT NULL, + `country` varchar(255) DEFAULT NULL, + `state` tinyint(3) unsigned DEFAULT '0', + `metadata` text, + `created_at` datetime NOT NULL, + `updated_at` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `index_profiles_on_user_id` (`user_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `restrictions`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `restrictions` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `category` varchar(255) NOT NULL, + `scope` varchar(64) NOT NULL, + `value` varchar(64) NOT NULL, + `code` int(11) DEFAULT NULL, + `state` varchar(16) NOT NULL DEFAULT 'enabled', + `created_at` datetime NOT NULL, + `updated_at` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `schema_migrations`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `schema_migrations` ( + `version` varchar(255) NOT NULL, + PRIMARY KEY (`version`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `users`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `users` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `uid` varchar(255) NOT NULL, + `email` varchar(255) NOT NULL, + `password_digest` varchar(255) NOT NULL, + `role` varchar(255) NOT NULL DEFAULT 'member', + `data` text, + `level` int(11) NOT NULL DEFAULT '0', + `otp` tinyint(1) DEFAULT '0', + `state` varchar(255) NOT NULL DEFAULT 'pending', + `referral_id` bigint(20) DEFAULT NULL, + `created_at` datetime NOT NULL, + `updated_at` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `index_users_on_uid` (`uid`), + UNIQUE KEY `index_users_on_email` (`email`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +INSERT INTO `schema_migrations` (version) VALUES +('20181101143041'), +('20181115100105'), +('20190108115333'), +('20190318133453'), +('20190529114214'), +('20190813112503'), +('20190827080317'), +('20190902032709'), +('20191122151630'), +('20191210090006'), +('20200318152130'), +('20200429082843'), +('20200514123908'), +('20200602075906'), +('20200609144734'), +('20200701115721'); + + diff --git a/docs/api/barong_admin_api_v2.md b/docs/api/barong_admin_api_v2.md new file mode 100644 index 0000000..23521e0 --- /dev/null +++ b/docs/api/barong_admin_api_v2.md @@ -0,0 +1,976 @@ +# Barong +RESTful AdminAPI for barong OAuth server + +## Version: 2.7.0 + +### Security +**BearerToken** + +|basic|*Basic*| +|---|---| +|Description|Bearer Token authentication| +|Name|Authorization| +|In|header| + +### /api/v2/barong/admin/users/data_storage + +#### DELETE +##### Description + +Deletes user's data storage record + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| uid | query | user uniq id | Yes | string | +| title | query | data storage uniq title | Yes | string | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 204 | Deletes user's data storage record | [API_V2_Admin_Entities_UserWithKYC](#api_v2_admin_entities_userwithkyc) | +| 401 | Invalid bearer token | | + +### /api/v2/barong/admin/users/{uid} + +#### GET +##### Description + +Returns user info + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| uid | path | user uniq id | Yes | string | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 200 | Returns user info | [API_V2_Admin_Entities_UserWithKYC](#api_v2_admin_entities_userwithkyc) | +| 401 | Invalid bearer token | | + +### /api/v2/barong/admin/users/documents/pending + +#### GET +##### Description + +Returns array of users with pending or replaced documents as paginated collection + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| extended | query | When true endpoint returns full information about users | No | boolean | +| uid | query | | No | string | +| email | query | | No | string | +| role | query | | No | string | +| first_name | query | | No | string | +| last_name | query | | No | string | +| country | query | | No | string | +| level | query | | No | integer | +| state | query | | No | string | +| range | query | | No | string | +| from | query | An integer represents the seconds elapsed since Unix epoch.If set, only records FROM the time will be retrieved. | No | integer | +| to | query | An integer represents the seconds elapsed since Unix epoch.If set, only records BEFORE the time will be retrieved. | No | integer | +| page | query | Page number (defaults to 1). | No | integer | +| limit | query | Number of users per page (defaults to 100, maximum is 100). | No | integer | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 200 | Returns array of users with pending or replaced documents as paginated collection | [API_V2_Entities_User](#api_v2_entities_user) | +| 401 | Invalid bearer token | | + +### /api/v2/barong/admin/users + +#### PUT +##### Description + +Update user attributes + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| uid | formData | user uniq id | Yes | string | +| email | formData | User Email | No | string | +| state | formData | user state | No | string | +| otp | formData | user 2fa status | No | boolean | + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 200 | User attributes were created | +| 401 | Invalid bearer token | + +#### GET +##### Description + +Returns array of users as paginated collection + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| extended | query | When true endpoint returns full information about users | No | boolean | +| uid | query | | No | string | +| email | query | | No | string | +| role | query | | No | string | +| country | query | | No | string | +| level | query | | No | integer | +| state | query | | No | string | +| range | query | | No | string | +| ordering | query | If set, returned values will be sorted in specific order, defaults to 'asc'. | No | string | +| order_by | query | Name of the field, which result will be ordered by. | No | string | +| from | query | An integer represents the seconds elapsed since Unix epoch.If set, only records FROM the time will be retrieved. | No | integer | +| to | query | An integer represents the seconds elapsed since Unix epoch.If set, only records BEFORE the time will be retrieved. | No | integer | +| page | query | Page number (defaults to 1). | No | integer | +| limit | query | Number of users per page (defaults to 100, maximum is 100). | No | integer | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 200 | Returns array of users as paginated collection | [API_V2_Entities_User](#api_v2_entities_user) | +| 401 | Invalid bearer token | | + +### /api/v2/barong/admin/users/role + +#### POST +##### Description + +Update user role + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| uid | formData | user uniq id | Yes | string | +| role | formData | user role | Yes | string | + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 200 | User role was created | +| 401 | Invalid bearer token | + +### /api/v2/barong/admin/users/update + +#### POST +##### Description + +Update user attributes + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| uid | formData | user uniq id | Yes | string | +| state | formData | user state | No | string | +| otp | formData | user 2fa status | No | boolean | + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 200 | User attributes were updated | +| 401 | Invalid bearer token | + +### /api/v2/barong/admin/users/labels + +#### DELETE +##### Description + +Deletes label for user + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| uid | query | user uniq id | Yes | string | +| key | query | label key. [a-z0-9_-]+ should be used. Min - 3, max - 255 characters. | Yes | string | +| scope | query | label key. [a-z0-9_-]+ should be used. Min - 3, max - 255 characters. | Yes | string | + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 204 | Label was deleted | +| 401 | Invalid bearer token | + +#### PUT +##### Description + +Update user label scope + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| uid | formData | user uniq id | Yes | string | +| key | formData | Label key. | Yes | string | +| scope | formData | label key. [a-z0-9_-]+ should be used. Min - 3, max - 255 characters. | Yes | string | +| description | formData | label description. [A-Za-z0-9_-] should be used. max - 255 characters. | No | string | +| value | formData | Label value. | Yes | string | + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 200 | Label was updated | +| 400 | Required params are empty | +| 401 | Invalid bearer token | +| 404 | Record is not found | +| 422 | Validation errors | + +#### POST +##### Description + +Add label for user + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| uid | formData | user uniq id | Yes | string | +| key | formData | label key. [a-z0-9_-]+ should be used. Min - 3, max - 255 characters. | Yes | string | +| value | formData | label value. [A-Za-z0-9_-] should be used. Min - 3, max - 255 characters. | Yes | string | +| description | formData | label description. [A-Za-z0-9_-] should be used. max - 255 characters. | No | string | +| scope | formData | Label scope: 'public' or 'private'. Default is public | No | string | + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 200 | Label was created | +| 401 | Invalid bearer token | + +#### GET +##### Description + +Returns array of users as paginated collection + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| key | query | Label key | Yes | string | +| value | query | Label value | Yes | string | +| page | query | Page number (defaults to 1). | No | integer | +| limit | query | Number of users per page (defaults to 100, maximum is 100). | No | integer | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 200 | Returns array of users as paginated collection | [API_V2_Entities_User](#api_v2_entities_user) | +| 401 | Invalid bearer token | | + +### /api/v2/barong/admin/users/labels/update + +#### POST +##### Description + +Update user label value + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| uid | formData | user uniq id | Yes | string | +| key | formData | Label key. | Yes | string | +| scope | formData | label key. [a-z0-9_-]+ should be used. Min - 3, max - 255 characters. | Yes | string | +| value | formData | Label value. | Yes | string | +| description | formData | label description. [A-Za-z0-9_-] should be used. max - 255 characters. | No | string | +| replace | formData | When true label will be created if not exist | No | boolean | + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 200 | Label was updated | +| 400 | Required params are empty | +| 401 | Invalid bearer token | +| 404 | Record is not found | +| 422 | Validation errors | + +### /api/v2/barong/admin/users/labels/list + +#### GET +##### Description + +Returns existing labels keys and values + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 200 | Returns existing labels keys and values | +| 401 | Invalid bearer token | + +### /api/v2/barong/admin/users/comments + +#### DELETE +##### Description + +Delete user's comment + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| id | query | comment uniq id | Yes | integer | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 204 | Delete user's comment | [API_V2_Admin_Entities_UserWithKYC](#api_v2_admin_entities_userwithkyc) | +| 401 | Invalid bearer token | | + +#### PUT +##### Description + +Edit user's comment + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| id | formData | comment uniq id | Yes | integer | +| title | formData | comment title | No | string | +| data | formData | comment data | No | string | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 200 | Edit user's comment | [API_V2_Admin_Entities_UserWithKYC](#api_v2_admin_entities_userwithkyc) | +| 401 | Invalid bearer token | | + +#### POST +##### Description + +Adds new user's comment + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| uid | formData | user uniq id | Yes | string | +| title | formData | comment uniq title | Yes | string | +| data | formData | comment data | Yes | string | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 201 | Adds new user's comment | [API_V2_Admin_Entities_UserWithKYC](#api_v2_admin_entities_userwithkyc) | +| 401 | Invalid bearer token | | + +### /api/v2/barong/admin/api_keys + +#### GET +##### Description + +List all api keys for selected account. + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| uid | query | user uniq id | Yes | string | +| ordering | query | If set, returned values will be sorted in specific order, defaults to 'asc'. | No | string | +| order_by | query | Name of the field, which result will be ordered by. | No | string | +| page | query | Page number (defaults to 1). | No | integer | +| limit | query | Number of users per page (defaults to 100, maximum is 100). | No | integer | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 200 | List all api keys for selected account. | [API_V2_Entities_APIKey](#api_v2_entities_apikey) | +| 401 | Invalid bearer token | | + +### /api/v2/barong/admin/permissions + +#### PUT +##### Description + +Update Permission + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| id | formData | Permission id | Yes | integer | +| role | formData | permission field - role | No | string | +| verb | formData | permission field - request verb | No | string | +| path | formData | permission field - request path | No | string | +| action | formData | | No | string | +| topic | formData | | No | string | + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 200 | Permission was updated | +| 401 | Invalid bearer token | + +#### DELETE +##### Description + +Deletes permission + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| id | query | permission id | Yes | integer | + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 204 | Permission was deleted | +| 401 | Invalid bearer token | + +#### POST +##### Description + +Create permission + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| role | formData | | Yes | string | +| verb | formData | | Yes | string | +| path | formData | | Yes | string | +| action | formData | | Yes | string | +| topic | formData | | No | string | + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 200 | Permission was created | +| 401 | Invalid bearer token | + +#### GET +##### Description + +Returns array of permissions as paginated collection + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| page | query | Page number (defaults to 1). | No | integer | +| limit | query | Number of users per page (defaults to 100, maximum is 100). | No | integer | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 200 | Returns array of permissions as paginated collection | [API_V2_Entities_Permission](#api_v2_entities_permission) | +| 401 | Invalid bearer token | | + +### /api/v2/barong/admin/activities/admin + +#### GET +##### Description + +Returns array of activities as paginated collection + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| topic | query | | No | string | +| action | query | | No | string | +| uid | query | | No | string | +| email | query | | No | string | +| from | query | An integer represents the seconds elapsed since Unix epoch.If set, only records FROM the time will be retrieved. | No | integer | +| to | query | An integer represents the seconds elapsed since Unix epoch.If set, only records BEFORE the time will be retrieved. | No | integer | +| page | query | Page number (defaults to 1). | No | integer | +| limit | query | Number of users per page (defaults to 100, maximum is 100). | No | integer | +| target_uid | query | | No | string | +| range | query | | No | string | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 200 | Returns array of activities as paginated collection | [API_V2_Admin_Entities_AdminActivity](#api_v2_admin_entities_adminactivity) | +| 401 | Invalid bearer token | | + +### /api/v2/barong/admin/activities + +#### GET +##### Description + +Returns array of activities as paginated collection + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| topic | query | | No | string | +| action | query | | No | string | +| uid | query | | No | string | +| email | query | | No | string | +| from | query | An integer represents the seconds elapsed since Unix epoch.If set, only records FROM the time will be retrieved. | No | integer | +| to | query | An integer represents the seconds elapsed since Unix epoch.If set, only records BEFORE the time will be retrieved. | No | integer | +| page | query | Page number (defaults to 1). | No | integer | +| limit | query | Number of users per page (defaults to 100, maximum is 100). | No | integer | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 200 | Returns array of activities as paginated collection | [API_V2_Admin_Entities_ActivityWithUser](#api_v2_admin_entities_activitywithuser) | +| 401 | Invalid bearer token | | + +### /api/v2/barong/admin/metrics + +#### GET +##### Description + +Returns main statistic in the given time period + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| created_from | query | | No | string | +| created_to | query | | No | string | + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 200 | Returns main statistic in the given time period | +| 401 | Invalid bearer token | + +### /api/v2/barong/admin/restrictions + +#### DELETE +##### Description + +Delete restriction + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| id | query | Restriction id | Yes | integer | + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 204 | Restriction was deleted | +| 401 | Invalid bearer token | + +#### PUT +##### Description + +Update restriction + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| id | formData | Restriction id | Yes | integer | +| scope | formData | | No | string | +| category | formData | | No | string | +| value | formData | | No | string | +| state | formData | | No | string | +| code | formData | | No | integer | + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 200 | Restriction was updated | +| 401 | Invalid bearer token | + +#### POST +##### Description + +Create restriction + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| scope | formData | | Yes | string | +| value | formData | | Yes | string | +| category | formData | | Yes | string | +| state | formData | | No | string | +| code | formData | | No | integer | + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 200 | Restriction was created | +| 401 | Invalid bearer token | + +#### GET +##### Description + +Returns array of restrictions as a paginated collection + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| scope | query | | No | string | +| category | query | | No | string | +| range | query | | No | string | +| page | query | Page number (defaults to 1). | No | integer | +| limit | query | Number of users per page (defaults to 100, maximum is 100). | No | integer | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 200 | Returns array of restrictions as a paginated collection | [API_V2_Entities_Restriction](#api_v2_entities_restriction) | +| 401 | Invalid bearer token | | + +### /api/v2/barong/admin/restrictions/whitelink + +#### POST +##### Description + +Create whitelink + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| expire_time | formData | link will be active for (Time.now + expire_time in following range) | No | integer | +| range | formData | In combination with expire_time gives full controll over token expiration | No | string | + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 200 | Created whitelink | +| 401 | Invalid bearer token | + +### /api/v2/barong/admin/profiles + +#### POST +##### Description + +Create a profile for user + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| uid | formData | | Yes | string | +| first_name | formData | | No | string | +| last_name | formData | | No | string | +| dob | formData | | No | date | +| address | formData | | No | string | +| postcode | formData | | No | string | +| city | formData | | No | string | +| country | formData | | No | string | +| metadata | formData | Any additional key: value pairs in json string format | No | string | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 201 | Create a profile for user | [API_V2_Admin_Entities_Profile](#api_v2_admin_entities_profile) | +| 400 | Required params are empty | | +| 401 | Invalid bearer token | | +| 422 | Validation errors | | + +#### PUT +##### Description + +Verify user's profile + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| uid | formData | | Yes | string | +| state | formData | | Yes | string | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 200 | Verify user's profile | [API_V2_Admin_Entities_Profile](#api_v2_admin_entities_profile) | +| 400 | Required params are empty | | +| 401 | Invalid bearer token | | +| 422 | Validation errors | | + +#### GET +##### Description + +Return all profiles + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| page | query | Page number (defaults to 1). | No | integer | +| limit | query | Number of users per page (defaults to 100, maximum is 100). | No | integer | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 200 | Return all profiles | [API_V2_Admin_Entities_Profile](#api_v2_admin_entities_profile) | +| 401 | Invalid bearer token | | + +### /api/v2/barong/admin/levels + +#### GET +##### Description + +Returns array of permissions as paginated collection + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 200 | Returns array of permissions as paginated collection | [API_V2_Entities_Level](#api_v2_entities_level) | +| 401 | Invalid bearer token | | + +### /api/v2/barong/admin/abilities + +#### GET +##### Description + +Get all roles and admin_permissions of barong cancan. + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 200 | Get all roles and admin_permissions of barong cancan. | + +### Models + +#### API_V2_Admin_Entities_UserWithKYC + +Adds new user's comment + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| email | string | User Email | No | +| uid | string | User UID | No | +| role | string | User role | No | +| level | integer | User level | No | +| otp | boolean | is 2FA enabled for account | No | +| state | string | User state: active, pending, inactive | No | +| referral_uid | string | UID of referrer | No | +| data | string | Additional phone and profile info | No | +| profiles | [API_V2_Admin_Entities_Profile](#api_v2_admin_entities_profile) | | No | +| labels | [API_V2_Entities_AdminLabelView](#api_v2_entities_adminlabelview) | | No | +| phones | [API_V2_Admin_Entities_Phone](#api_v2_admin_entities_phone) | | No | +| documents | [API_V2_Admin_Entities_Document](#api_v2_admin_entities_document) | | No | +| data_storages | [API_V2_Entities_DataStorage](#api_v2_entities_datastorage) | | No | +| comments | [API_V2_Entities_Comment](#api_v2_entities_comment) | | No | +| created_at | string | | No | +| updated_at | string | | No | + +#### API_V2_Admin_Entities_Profile + +Return all profiles + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| first_name | string | First Name | No | +| last_name | string | Last name | No | +| dob | date | Birth date | No | +| address | string | Address | No | +| postcode | string | Address Postcode | No | +| city | string | City name | No | +| country | string | Country name | No | +| state | string | Profile state: drafted, submitted, verified, rejected | No | +| metadata | object | Profile additional fields | No | +| created_at | string | | No | +| updated_at | string | | No | + +#### API_V2_Entities_AdminLabelView + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| key | string | Label key. [a-z0-9_-]+ should be used. Min - 3, max - 255 characters. | No | +| value | string | Label value. [A-Za-z0-9_-] should be used. Min - 3, max - 255 characters. | No | +| scope | string | Label scope: 'public' or 'private' | No | +| description | string | Label desc: json string with any additional information | No | +| created_at | string | | No | +| updated_at | string | | No | + +#### API_V2_Admin_Entities_Phone + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| country | string | Phone country | No | +| number | string | Phone number | No | +| validated_at | s (g) | Phone validation date | No | + +#### API_V2_Admin_Entities_Document + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| upload | string | File url | No | +| doc_type | string | Document type: passport, driver license, utility bill, identity card, institutional, address, residental | No | +| doc_number | string | document number: AB123123 type | No | +| doc_expire | string | Expire date of uploaded documents | No | +| metadata | string | Any additional stored data | No | +| created_at | string | | No | +| updated_at | string | | No | + +#### API_V2_Entities_DataStorage + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| title | string | Any additional data title | No | +| data | string | Any additional data json key:value pairs | No | +| created_at | string | | No | +| updated_at | string | | No | + +#### API_V2_Entities_Comment + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| id | integer | Comment id | No | +| author_uid | string | Comment author UID | No | +| title | string | Comment title | No | +| data | string | Comment plain text | No | +| created_at | string | | No | +| updated_at | string | | No | + +#### API_V2_Entities_User + +Returns array of users as paginated collection + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| email | string | User Email | No | +| uid | string | User UID | No | +| role | string | User role | No | +| level | integer | User level | No | +| otp | boolean | is 2FA enabled for account | No | +| state | string | User state: active, pending, inactive | No | +| referral_uid | string | UID of referrer | No | +| data | string | Additional phone and profile info | No | + +#### API_V2_Entities_APIKey + +List all api keys for selected account. + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| kid | string | JWT public key | No | +| algorithm | string | Cryptographic hash function type | No | +| scope | string | Serialized array of scopes | No | +| state | string | active/non-active state of key | No | +| secret | string | Api key secret | No | +| created_at | string | | No | +| updated_at | string | | No | + +#### API_V2_Entities_Permission + +Returns array of permissions as paginated collection + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| id | integer | Permission id | No | +| action | string | Permission action: accept (allow access (drop access), audit (record activity) | No | +| role | string | Permission user role | No | +| verb | string | Permission verb: put, post, delete, get | No | +| path | string | API path | No | +| topic | string | Permission topic: general, session etc | No | +| created_at | string | | No | +| updated_at | string | | No | + +#### API_V2_Admin_Entities_AdminActivity + +Returns array of activities as paginated collection + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| user_ip | string | User IP | No | +| user_agent | string | User Browser Agent | No | +| topic | string | Defined topic (session, adjustments) or general by default | No | +| action | string | API action: POST => 'create', PUT => 'update', GET => 'read', DELETE => 'delete', PATCH => 'update' or system if there is no match of HTTP method | No | +| result | string | Status of API response: succeed, failed, denied | No | +| data | string | Parameters which was sent to specific API endpoint | No | +| admin | [API_V2_Entities_User](#api_v2_entities_user) | | No | +| target | [API_V2_Entities_User](#api_v2_entities_user) | | No | +| created_at | string | | No | + +#### API_V2_Admin_Entities_ActivityWithUser + +Returns array of activities as paginated collection + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| user_ip | string | User IP | No | +| user_agent | string | User Browser Agent | No | +| topic | string | Defined topic (session, adjustments) or general by default | No | +| action | string | API action: POST => 'create', PUT => 'update', GET => 'read', DELETE => 'delete', PATCH => 'update' or system if there is no match of HTTP method | No | +| result | string | Status of API response: succeed, failed, denied | No | +| data | string | Parameters which was sent to specific API endpoint | No | +| user | [API_V2_Entities_User](#api_v2_entities_user) | | No | +| created_at | string | | No | + +#### API_V2_Entities_Restriction + +Returns array of restrictions as a paginated collection + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| id | integer | Restriction id | No | +| category | string | Restriction categories: blacklist, maintenance, whitelist, blocklogin | No | +| scope | string | Restriction scopes: continent, country, ip, ip_subnet, all | No | +| value | string | Restriction value: IP address, country abbreviation, all | No | +| code | integer | Restriction codes: {"continent"=>423, "country"=>423, "ip_subnet"=>403, "ip"=>401, "all"=>401} | No | +| state | string | Restriction states: disabled, enabled | No | +| created_at | string | | No | +| updated_at | string | | No | + +#### API_V2_Entities_Level + +Returns array of permissions as paginated collection + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| id | integer | Level identifier, level number | No | +| key | string | Label key. [A-Za-z0-9_-] should be used. Min - 3, max - 255 characters. | No | +| value | string | Label value. [A-Za-z0-9_-] should be used. Min - 3, max - 255 characters. | No | + +#### API_V2_Admin_Entities_UserWithProfile + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| email | string | User Email | No | +| uid | string | User UID | No | +| role | string | User role | No | +| level | integer | User level | No | +| otp | boolean | is 2FA enabled for account | No | +| state | string | User state: active, pending, inactive | No | +| referral_uid | string | UID of referrer | No | +| data | string | Additional phone and profile info | No | +| profiles | [API_V2_Admin_Entities_Profile](#api_v2_admin_entities_profile) | | No | +| created_at | string | | No | +| updated_at | string | | No | diff --git a/docs/api/barong_management_api_v2.md b/docs/api/barong_management_api_v2.md new file mode 100644 index 0000000..9194a54 --- /dev/null +++ b/docs/api/barong_management_api_v2.md @@ -0,0 +1,678 @@ +# Barong +Management API for barong OAuth server + +## Version: 2.7.0 + +### Security +**SecurityScope** + +|basic|*Basic*| +|---|---| +|Description|JWT should have signature keychains| +|Name|Authorization| + +### /api/v2/barong/management/labels/delete + +#### POST +##### Description + +Delete a label with 'private' scope + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| user_uid | formData | User uid | Yes | string | +| key | formData | Label key. | Yes | string | + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 201 | Delete a label with 'private' scope | + +### /api/v2/barong/management/labels + +#### PUT +##### Description + +Update a label with 'private' scope + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| user_uid | formData | User uid | Yes | string | +| key | formData | Label key. | Yes | string | +| value | formData | Label value. | Yes | string | +| description | formData | Label desc. | No | string | +| replace | formData | When true label will be created if not exist | No | boolean | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 200 | Update a label with 'private' scope | [API_V2_Entities_Label](#api_v2_entities_label) | + +#### POST +##### Description + +Create a label with 'private' scope and assigns to users + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| user_uid | formData | User uid | Yes | string | +| key | formData | Label key. | Yes | string | +| value | formData | Label value. | Yes | string | +| description | formData | Label desc. | No | string | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 201 | Create a label with 'private' scope and assigns to users | [API_V2_Entities_Label](#api_v2_entities_label) | + +### /api/v2/barong/management/labels/list + +#### POST +##### Description + +Get user collection filtered on label attributes + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| user_uid | formData | User uid | Yes | string | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 201 | Get user collection filtered on label attributes | [API_V2_Entities_AdminLabelView](#api_v2_entities_adminlabelview) | + +### /api/v2/barong/management/labels/filter/users + +#### POST +##### Description + +Get all labels assigned to users + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| key | formData | Label key. | Yes | string | +| value | formData | Label value. | No | string | +| scope | formData | Label scope. | No | string | +| extended | formData | When true endpoint returns full information about users | No | boolean | +| range | formData | | No | string | +| page | formData | Page number (defaults to 1). | No | integer | +| limit | formData | Number of users per page (defaults to 100, maximum is 100). | No | integer | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 201 | Get all labels assigned to users | [API_V2_Entities_User](#api_v2_entities_user) | + +### /api/v2/barong/management/users/import + +#### POST +##### Description + +Imports an existing user + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| email | formData | User Email | Yes | string | +| password_digest | formData | User Password Hash | Yes | string | +| referral_uid | formData | Referral uid | No | string | +| phone | formData | Phone | No | string | +| first_name | formData | First Name | No | string | +| last_name | formData | Last Name | No | string | +| dob | formData | Birth date | No | date | +| address | formData | Address | No | string | +| postcode | formData | Postcode | No | string | +| city | formData | City | No | string | +| country | formData | Country | No | string | +| state | formData | State | No | string | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 201 | Imports an existing user | [API_V2_Management_Entities_UserWithProfile](#api_v2_management_entities_userwithprofile) | + +### /api/v2/barong/management/users/update + +#### POST +##### Description + +Updates role and data fields of existing user + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| uid | formData | User Uid | Yes | string | +| role | formData | User Role | No | string | +| data | formData | Any additional key:value pairs in json format | No | string | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 201 | Updates role and data fields of existing user | [API_V2_Management_Entities_UserWithProfile](#api_v2_management_entities_userwithprofile) | + +### /api/v2/barong/management/users + +#### POST +##### Description + +Creates new user + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| email | formData | User Email | Yes | string | +| password | formData | User Password | Yes | string | +| referral_uid | formData | Referral uid | No | string | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 201 | Creates new user | [API_V2_Management_Entities_UserWithProfile](#api_v2_management_entities_userwithprofile) | + +### /api/v2/barong/management/users/list + +#### POST +##### Description + +Returns array of users as collection + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| extended | formData | When true endpoint returns full information about users | No | boolean | +| range | formData | | No | string | +| from | formData | An integer represents the seconds elapsed since Unix epoch.If set, only records FROM the time will be retrieved. | No | integer | +| to | formData | An integer represents the seconds elapsed since Unix epoch.If set, only records BEFORE the time will be retrieved. | No | integer | +| page | formData | Page number (defaults to 1). | No | integer | +| limit | formData | Number of users per page (defaults to 100, maximum is 100). | No | integer | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 201 | Returns array of users as collection | [API_V2_Entities_User](#api_v2_entities_user) | + +### /api/v2/barong/management/users/get + +#### POST +##### Description + +Get users and profile information + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| uid | formData | User uid | No | string | +| email | formData | User email | No | string | +| phone_num | formData | User phone number | No | string | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 201 | Get users and profile information | [API_V2_Management_Entities_UserWithKYC](#api_v2_management_entities_userwithkyc) | + +### /api/v2/barong/management/profiles + +#### POST +##### Description + +Imports a profile for user + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| uid | formData | User Uid | Yes | string | +| first_name | formData | First Name | No | string | +| last_name | formData | Last Name | No | string | +| dob | formData | Birth date | No | date | +| address | formData | Address | No | string | +| postcode | formData | Postcode | No | string | +| city | formData | City | No | string | +| country | formData | Country | No | string | +| state | formData | State | No | string | +| metadata | formData | Metadata | No | string | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 201 | Imports a profile for user | [API_V2_Management_Entities_UserWithProfile](#api_v2_management_entities_userwithprofile) | + +### /api/v2/barong/management/phones/delete + +#### POST +##### Description + +Delete phone number for user + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| uid | formData | User uid | Yes | string | +| number | formData | User phone number | Yes | string | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 201 | Delete phone number for user | [API_V2_Management_Entities_Phone](#api_v2_management_entities_phone) | + +### /api/v2/barong/management/phones + +#### POST +##### Description + +Create phone number for user + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| uid | formData | User uid | Yes | string | +| number | formData | User phone number | Yes | string | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 201 | Create phone number for user | [API_V2_Management_Entities_Phone](#api_v2_management_entities_phone) | + +### /api/v2/barong/management/phones/get + +#### POST +##### Description + +Get user phone numbers + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| uid | formData | User uid | Yes | string | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 201 | Get user phone numbers | [API_V2_Management_Entities_Phone](#api_v2_management_entities_phone) | + +### /api/v2/barong/management/otp/sign + +#### POST +##### Description + +Sign request with barong signature + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| user_uid | formData | Account UID | Yes | string | +| otp_code | formData | Code from Google Authenticator | Yes | string | + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 201 | Sign request with barong signature | + +### /api/v2/barong/management/documents + +#### POST +##### Description + +Push documents to barong DB + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| uid | formData | User uid | Yes | string | +| doc_type | formData | Document type | Yes | string | +| doc_number | formData | Document number | Yes | string | +| filename | formData | Document name | Yes | string | +| file_ext | formData | Document file extension | Yes | string | +| upload | formData | Base64 encoded document | Yes | string | +| doc_expire | formData | Document expiration date | No | date | +| update_labels | formData | If set to false, user label will not be created/updated | No | boolean | +| metadata | formData | Any additional key: value pairs in json string format | No | string | + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 201 | Push documents to barong DB | + +### /api/v2/barong/management/service_accounts/delete + +#### POST +##### Description + +Delete specific service_account + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| uid | formData | service_account uid | Yes | string | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 201 | Delete specific service_account | [API_V2_Entities_ServiceAccounts](#api_v2_entities_serviceaccounts) | + +### /api/v2/barong/management/service_accounts/create + +#### POST +##### Description + +Create service_account + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| owner_uid | formData | owner uid | Yes | string | +| service_account_role | formData | service_account role | Yes | string | +| service_account_uid | formData | service_account uid | No | string | +| service_account_email | formData | service_account email | No | string | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 201 | Create service_account | [API_V2_Entities_ServiceAccounts](#api_v2_entities_serviceaccounts) | + +### /api/v2/barong/management/service_accounts/list + +#### POST +##### Description + +Get service_accounts as a paginated collection + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| page | formData | Page number (defaults to 1). | No | integer | +| limit | formData | Number of users per page (defaults to 100, maximum is 100). | No | integer | +| owner_uid | formData | owner uid | No | string | +| owner_email | formData | owner email | No | string | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 201 | Get service_accounts as a paginated collection | [API_V2_Entities_ServiceAccounts](#api_v2_entities_serviceaccounts) | + +### /api/v2/barong/management/service_accounts/get + +#### POST +##### Description + +Get specific service_account information + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| uid | formData | service_account uid | No | string | +| email | formData | service_account email | No | string | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 201 | Get specific service_account information | [API_V2_Entities_ServiceAccounts](#api_v2_entities_serviceaccounts) | + +### /api/v2/barong/management/timestamp + +#### POST +##### Description + +Returns server time in seconds since Unix epoch. + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 201 | Returns server time in seconds since Unix epoch. | + +### Models + +#### API_V2_Entities_Label + +Create a label with 'private' scope and assigns to users + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| key | string | Label key. [a-z0-9_-]+ should be used. Min - 3, max - 255 characters. | No | +| value | string | Label value. [A-Za-z0-9_-] should be used. Min - 3, max - 255 characters. | No | +| scope | string | Label scope: 'public' or 'private' | No | +| created_at | string | | No | +| updated_at | string | | No | + +#### API_V2_Entities_AdminLabelView + +Get user collection filtered on label attributes + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| key | string | Label key. [a-z0-9_-]+ should be used. Min - 3, max - 255 characters. | No | +| value | string | Label value. [A-Za-z0-9_-] should be used. Min - 3, max - 255 characters. | No | +| scope | string | Label scope: 'public' or 'private' | No | +| description | string | Label desc: json string with any additional information | No | +| created_at | string | | No | +| updated_at | string | | No | + +#### API_V2_Entities_User + +Returns array of users as collection + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| email | string | User Email | No | +| uid | string | User UID | No | +| role | string | User role | No | +| level | integer | User level | No | +| otp | boolean | is 2FA enabled for account | No | +| state | string | User state: active, pending, inactive | No | +| referral_uid | string | UID of referrer | No | +| data | string | Additional phone and profile info | No | + +#### API_V2_Management_Entities_UserWithProfile + +Imports a profile for user + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| email | string | User Email | No | +| uid | string | User UID | No | +| role | string | User role | No | +| level | integer | User level | No | +| otp | boolean | is 2FA enabled for account | No | +| state | string | User state: active, pending, inactive | No | +| referral_uid | string | UID of referrer | No | +| data | string | Additional phone and profile info | No | +| profiles | [API_V2_Management_Entities_Profile](#api_v2_management_entities_profile) | | No | +| created_at | string | | No | +| updated_at | string | | No | + +#### API_V2_Management_Entities_Profile + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| first_name | string | First Name | No | +| last_name | string | Last name | No | +| dob | date | Birth date | No | +| address | string | Address | No | +| postcode | string | Address Postcode | No | +| city | string | City name | No | +| country | string | Country name | No | +| state | string | Profile state: drafted, submitted, verified, rejected | No | +| metadata | object | Profile additional fields | No | +| created_at | string | | No | +| updated_at | string | | No | + +#### API_V2_Management_Entities_UserWithKYC + +Get users and profile information + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| email | string | User Email | No | +| uid | string | User UID | No | +| role | string | User role | No | +| level | integer | User level | No | +| otp | boolean | is 2FA enabled for account | No | +| state | string | User state: active, pending, inactive | No | +| referral_uid | string | UID of referrer | No | +| data | string | Additional phone and profile info | No | +| profiles | [API_V2_Management_Entities_Profile](#api_v2_management_entities_profile) | | No | +| labels | [API_V2_Entities_AdminLabelView](#api_v2_entities_adminlabelview) | | No | +| phones | [API_V2_Management_Entities_Phone](#api_v2_management_entities_phone) | | No | +| documents | [API_V2_Management_Entities_Document](#api_v2_management_entities_document) | | No | +| data_storages | [API_V2_Entities_DataStorage](#api_v2_entities_datastorage) | | No | +| comments | [API_V2_Entities_Comment](#api_v2_entities_comment) | | No | +| created_at | string | | No | +| updated_at | string | | No | + +#### API_V2_Management_Entities_Phone + +Get user phone numbers + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| country | string | Phone country | No | +| number | string | Phone Number | No | +| validated_at | s (g) | Phone validation date | No | + +#### API_V2_Management_Entities_Document + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| upload | string | File url | No | +| doc_type | string | Document type: passport, driver license, utility bill, identity card, institutional, address, residental | No | +| doc_number | string | Document number: AB123123 type | No | +| doc_expire | string | Expire date of uploaded documents | No | +| metadata | string | Any additional stored data | No | +| created_at | string | | No | +| updated_at | string | | No | + +#### API_V2_Entities_DataStorage + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| title | string | Any additional data title | No | +| data | string | Any additional data json key:value pairs | No | +| created_at | string | | No | +| updated_at | string | | No | + +#### API_V2_Entities_Comment + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| id | integer | Comment id | No | +| author_uid | string | Comment author UID | No | +| title | string | Comment title | No | +| data | string | Comment plain text | No | +| created_at | string | | No | +| updated_at | string | | No | + +#### API_V2_Entities_ServiceAccounts + +Get specific service_account information + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| email | string | User Email | No | +| uid | string | User UID | No | +| role | string | Service Account Role | No | +| level | integer | User Level | No | +| state | string | Service Account State: active, disabled | No | +| user | [API_V2_Entities_User](#api_v2_entities_user) | | No | +| created_at | string | | No | +| updated_at | string | | No | + +#### API_V2_Entities_APIKey + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| kid | string | JWT public key | No | +| algorithm | string | Cryptographic hash function type | No | +| scope | string | Serialized array of scopes | No | +| state | string | active/non-active state of key | No | +| secret | string | Api key secret | No | +| created_at | string | | No | +| updated_at | string | | No | + +#### API_V2_Entities_UserWithFullInfo + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| email | string | User Email | No | +| uid | string | User UID | No | +| role | string | User role | No | +| level | integer | User level | No | +| otp | boolean | is 2FA enabled for account | No | +| state | string | User state: active, pending, inactive | No | +| referral_uid | string | UID of referrer | No | +| data | string | Additional phone and profile info | No | +| csrf_token | string | Сsrf protection token | No | +| labels | [API_V2_Entities_Label](#api_v2_entities_label) | | No | +| phones | [API_V2_Entities_Phone](#api_v2_entities_phone) | | No | +| profiles | [API_V2_Entities_Profile](#api_v2_entities_profile) | | No | +| data_storages | [API_V2_Entities_DataStorage](#api_v2_entities_datastorage) | | No | +| created_at | string | | No | +| updated_at | string | | No | + +#### API_V2_Entities_Phone + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| country | string | Phone country | No | +| number | string | Submasked phone number | No | +| validated_at | s (g) | Phone validation date | No | + +#### API_V2_Entities_Profile + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| first_name | string | First Name | No | +| last_name | string | Submasked last name | No | +| dob | date | Submasked birth date | No | +| address | string | Address | No | +| postcode | string | Address Postcode | No | +| city | string | City name | No | +| country | string | Country name | No | +| state | string | Profile state: drafted, submitted, verified, rejected | No | +| metadata | object | Profile additional fields | No | +| created_at | string | | No | +| updated_at | string | | No | diff --git a/docs/api/barong_user_api_v2.md b/docs/api/barong_user_api_v2.md new file mode 100644 index 0000000..2ea2493 --- /dev/null +++ b/docs/api/barong_user_api_v2.md @@ -0,0 +1,1317 @@ +# Barong +RESTful API for barong OAuth server + +## Version: 2.7.0 + +### /api/v2/barong/identity/users/password/confirm_code + +#### POST +##### Description + +Sets new account password + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| reset_password_token | formData | Token from email | Yes | string | +| password | formData | User password | Yes | string | +| confirm_password | formData | User password | Yes | string | + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 201 | Resets password | +| 400 | Required params are empty | +| 404 | Record is not found | +| 422 | Validation errors | + +### /api/v2/barong/identity/users/password/generate_code + +#### POST +##### Description + +Send password reset instructions + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| email | formData | Account email | Yes | string | +| captcha_response | formData | Response from captcha widget | No | string | + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 201 | Generated password reset code | +| 400 | Required params are missing | +| 404 | User doesn't exist | +| 422 | Validation errors | + +### /api/v2/barong/identity/users/email/confirm_code + +#### POST +##### Description + +Confirms an account + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| token | formData | Token from email | Yes | string | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 201 | Confirms an account | [API_V2_Entities_UserWithFullInfo](#api_v2_entities_userwithfullinfo) | +| 400 | Required params are missing | | +| 422 | Validation errors | | + +### /api/v2/barong/identity/users/email/generate_code + +#### POST +##### Description + +Send confirmations instructions + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| email | formData | Account email | Yes | string | +| captcha_response | formData | Response from captcha widget | No | string | + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 201 | Generated verification code | +| 400 | Required params are missing | +| 422 | Validation errors | + +### /api/v2/barong/identity/users/register_geetest + +#### GET +##### Description + +Register Geetest captcha + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 200 | Register Geetest captcha | + +### /api/v2/barong/identity/users + +#### POST +##### Description + +Creates new user + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| email | formData | User Email | Yes | string | +| password | formData | User Password | Yes | string | +| refid | formData | Referral uid | No | string | +| captcha_response | formData | Response from captcha widget | No | string | +| data | formData | Any additional key: value pairs in json string format | No | string | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 201 | Creates new user | [API_V2_Entities_UserWithFullInfo](#api_v2_entities_userwithfullinfo) | +| 400 | Required params are missing | | +| 422 | Validation errors | | + +### /api/v2/barong/identity/users/access + +#### POST +##### Description + +Creates new whitelist restriction + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| whitelink_token | formData | | Yes | string | + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 200 | Whitelist restriction was created | +| 400 | Required params are missing | +| 422 | Validation errors | + +### /api/v2/barong/identity/sessions + +#### DELETE +##### Description + +Destroy current session + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 204 | Session was destroyed | +| 400 | Required params are empty | +| 404 | Record is not found | + +#### POST +##### Description + +Start a new session + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| email | formData | | Yes | string | +| password | formData | | Yes | string | +| captcha_response | formData | Response from captcha widget | No | string | +| otp_code | formData | Code from Google Authenticator | No | string | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 201 | Start a new session | [API_V2_Entities_UserWithFullInfo](#api_v2_entities_userwithfullinfo) | +| 400 | Required params are empty | | +| 404 | Record is not found | | + +### /api/v2/barong/identity/configs + +#### GET +##### Description + +Get barong configurations + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 200 | Get barong configurations | + +### /api/v2/barong/identity/version + +#### GET +##### Description + +Get barong version + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 200 | Get barong version | + +### /api/v2/barong/identity/time + +#### GET +##### Description + +Get server current unix timestamp. + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 200 | Get server current unix timestamp. | + +### /api/v2/barong/identity/ping + +#### GET +##### Description + +Test connectivity + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 200 | Test connectivity | + +### /api/v2/barong/identity/password/validate + +#### POST +##### Description + +Password strength testing + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| password | formData | User password | Yes | string | + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 201 | Password strength testing | + +### /api/v2/barong/resource/swagger_doc/{name} + +#### GET +##### Description + +Swagger compatible API description for specific API + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| name | path | Resource name of mounted API | Yes | string | +| locale | query | Locale of API documentation | No | string | + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 200 | Swagger compatible API description for specific API | + +### /api/v2/barong/resource/swagger_doc + +#### GET +##### Description + +Swagger compatible API description + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 200 | Swagger compatible API description | + +### /api/v2/barong/resource/service_accounts/api_keys/{kid} + +#### PUT +##### Description + +Updates an api key + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| service_account_uid | formData | | Yes | string | +| kid | path | Service account kid | Yes | string | +| scope | formData | Comma separated scopes | No | string | +| state | formData | State of API Key. "active" state means key is active and can be used for auth | No | string | +| totp_code | formData | Code from Google Authenticator | Yes | string | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 200 | Updates an api key | [API_V2_Entities_APIKey](#api_v2_entities_apikey) | +| 400 | Required params are empty | | +| 401 | Invalid bearer token | | +| 404 | Record is not found | | +| 422 | Validation errors | | + +#### DELETE +##### Description + +Delete an api key for specific service account + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| service_account_uid | query | | Yes | string | +| kid | path | Service account kid | Yes | string | +| totp_code | query | Code from Google Authenticator | Yes | string | + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 204 | Succefully deleted | +| 400 | Required params are empty | +| 401 | Invalid bearer token | +| 404 | Record is not found | + +### /api/v2/barong/resource/service_accounts/api_keys + +#### POST +##### Description + +Create api key for specific service account. + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| service_account_uid | formData | | Yes | string | +| algorithm | formData | Service account algorithm | Yes | string | +| scope | formData | Comma separated scopes | No | string | +| totp_code | formData | Code from Google Authenticator | Yes | string | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 201 | Create api key for specific service account. | [API_V2_Entities_APIKey](#api_v2_entities_apikey) | +| 400 | Require 2FA and totp code | | +| 401 | Invalid bearer token | | + +#### GET +##### Description + +List all api keys for specific service account. + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| ordering | query | If set, returned values will be sorted in specific order, defaults to 'asc'. | No | string | +| order_by | query | Name of the field, which result will be ordered by. | No | string | +| page | query | Page number (defaults to 1). | No | integer | +| limit | query | Number of users per page (defaults to 100, maximum is 100). | No | integer | +| service_account_uid | query | | Yes | string | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 200 | List all api keys for specific service account. | [API_V2_Entities_APIKey](#api_v2_entities_apikey) | +| 400 | Require 2FA and totp code | | +| 401 | Invalid bearer token | | + +### /api/v2/barong/resource/service_accounts + +#### GET +##### Description + +List all service accounts for current user. + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 200 | List all service accounts for current user. | +| 400 | Require 2FA and totp code | +| 401 | Invalid bearer token | + +##### Security + +| Security Schema | Scopes | +| --- | --- | +| BearerToken | | + +### /api/v2/barong/resource/data_storage + +#### POST +##### Description + +Create data storage + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| title | formData | Storage title | Yes | string | +| data | formData | Storage data | Yes | string | + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 201 | Data Storage was created | +| 401 | Invalid bearer token | +| 422 | Validation errors | + +### /api/v2/barong/resource/api_keys + +#### GET +##### Description + +List all api keys for current account. + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| ordering | query | If set, returned values will be sorted in specific order, defaults to 'asc'. | No | string | +| order_by | query | Name of the field, which result will be ordered by. | No | string | +| page | query | Page number (defaults to 1). | No | integer | +| limit | query | Number of users per page (defaults to 100, maximum is 100). | No | integer | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 200 | List all api keys for current account. | [API_V2_Entities_APIKey](#api_v2_entities_apikey) | +| 400 | Require 2FA and totp code | | +| 401 | Invalid bearer token | | + +#### POST +##### Description + +Create an api key + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| algorithm | formData | API key algorithm | Yes | string | +| scope | formData | Comma separated scopes | No | string | +| totp_code | formData | Code from Google Authenticator | Yes | string | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 201 | Create an api key | [API_V2_Entities_APIKey](#api_v2_entities_apikey) | +| 400 | Required params are empty | | +| 401 | Invalid bearer token | | +| 422 | Validation errors | | + +### /api/v2/barong/resource/api_keys/{kid} + +#### DELETE +##### Description + +Delete an api key + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| kid | path | API key kid | Yes | string | +| totp_code | query | Code from Google Authenticator | Yes | string | + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 204 | Succefully deleted | +| 400 | Required params are empty | +| 401 | Invalid bearer token | +| 404 | Record is not found | + +#### PATCH +##### Description + +Updates an api key + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| kid | path | API key kid | Yes | string | +| scope | formData | Comma separated scopes | No | string | +| state | formData | State of API Key. "active" state means key is active and can be used for auth | No | string | +| totp_code | formData | Code from Google Authenticator | Yes | string | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 200 | Updates an api key | [API_V2_Entities_APIKey](#api_v2_entities_apikey) | +| 400 | Required params are empty | | +| 401 | Invalid bearer token | | +| 404 | Record is not found | | +| 422 | Validation errors | | + +### /api/v2/barong/resource/otp/verify + +#### POST +##### Description + +Verify 2FA code + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| code | formData | Code from Google Authenticator | Yes | string | + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 200 | 2FA was verified | +| 400 | 2FA has not been enabled for this account or code is missing | +| 401 | Invalid bearer token | +| 422 | Validation errors | + +### /api/v2/barong/resource/otp/disable + +#### POST +##### Description + +Disable 2FA + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| code | formData | Code from Google Authenticator | Yes | string | + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 200 | 2FA was disabled | +| 400 | 2FA has not been enabled for this account or code is missing | +| 401 | Invalid bearer token | +| 422 | Validation errors | + +### /api/v2/barong/resource/otp/enable + +#### POST +##### Description + +Enable 2FA + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| code | formData | Code from Google Authenticator | Yes | string | + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 200 | 2FA was enabled | +| 400 | 2FA has been enabled for this account or code is missing | +| 401 | Invalid bearer token | +| 422 | Validation errors | + +### /api/v2/barong/resource/otp/generate_qrcode + +#### POST +##### Description + +Generate qr code for 2FA + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 200 | QR code was generated | +| 400 | 2FA has been enabled for this account | +| 401 | Invalid bearer token | + +### /api/v2/barong/resource/phones/verify + +#### POST +##### Description + +Verify a phone + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| phone_number | formData | Phone number with country code | Yes | string | +| verification_code | formData | Verification code from sms | Yes | string | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 201 | Verify a phone | [API_V2_Entities_UserWithFullInfo](#api_v2_entities_userwithfullinfo) | +| 400 | Required params are empty | | +| 401 | Invalid bearer token | | +| 404 | Record is not found | | + +### /api/v2/barong/resource/phones/send_code + +#### POST +##### Description + +Resend activation code + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| phone_number | formData | Phone number with country code | Yes | string | +| channel | formData | The verification method to use | No | string | + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 200 | Activation code was resend | +| 400 | Required params are empty | +| 401 | Invalid bearer token | +| 404 | Record is not found | +| 422 | Validation errors | + +### /api/v2/barong/resource/phones + +#### POST +##### Description + +Add new phone + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| phone_number | formData | Phone number with country code | Yes | string | +| channel | formData | The verification method to use | No | string | + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 200 | New phone was added | +| 400 | Required params are empty | +| 401 | Invalid bearer token | +| 404 | Record is not found | +| 422 | Validation errors | + +#### GET +##### Description + +Returns list of user's phones + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 200 | Returns list of user's phones | [API_V2_Entities_Phone](#api_v2_entities_phone) | +| 401 | Invalid bearer token | | + +### /api/v2/barong/resource/documents + +#### POST +##### Description + +Upload a new document for current user + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| doc_type | formData | Document type | Yes | string | +| doc_number | formData | Document number | Yes | string | +| upload | formData | Array of Rack::Multipart::UploadedFile | Yes | string | +| doc_expire | formData | Document expiration date | No | date | +| doc_category | formData | Category of the submitted document - front/back/selfie etc. | No | string | +| identificator | formData | Identificator for documents to be supplied together | No | string | +| metadata | formData | Any additional key: value pairs in json string format | No | string | + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 201 | Document is uploaded | +| 400 | Required params are empty | +| 401 | Invalid bearer token | +| 422 | Validation errors | + +#### GET +##### Description + +Return current user documents list + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 200 | Return current user documents list | [API_V2_Entities_Document](#api_v2_entities_document) | +| 401 | Invalid bearer token | | + +### /api/v2/barong/resource/profiles + +#### PUT +##### Description + +Update a profile for current_user + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| first_name | formData | First Name | No | string | +| last_name | formData | Last Name | No | string | +| dob | formData | Date of Birth | No | date | +| address | formData | Address | No | string | +| postcode | formData | Postcode | No | string | +| city | formData | City | No | string | +| country | formData | Country | No | string | +| metadata | formData | Any additional key: value pairs in json string format | No | string | +| confirm | formData | Profile confirmation | No | boolean | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 200 | Update a profile for current_user | [API_V2_Entities_Profile](#api_v2_entities_profile) | +| 401 | Invalid bearer token | | +| 422 | Validation errors | | + +#### POST +##### Description + +Create a profile for current_user + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| first_name | formData | First Name | No | string | +| last_name | formData | Last Name | No | string | +| dob | formData | Date of Birth | No | date | +| address | formData | Address | No | string | +| postcode | formData | Postcode | No | string | +| city | formData | City | No | string | +| country | formData | Country | No | string | +| metadata | formData | Any additional key: value pairs in json string format | No | string | +| confirm | formData | Profile confirmation | No | boolean | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 201 | Create a profile for current_user | [API_V2_Entities_Profile](#api_v2_entities_profile) | +| 400 | Required params are empty | | +| 401 | Invalid bearer token | | +| 409 | Profile already exists | | +| 422 | Validation errors | | + +### /api/v2/barong/resource/profiles/me + +#### GET +##### Description + +Return profiles of current resource owner + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 200 | Return profiles of current resource owner | [API_V2_Entities_Profile](#api_v2_entities_profile) | +| 401 | Invalid bearer token | | +| 404 | User has no profile | | + +### /api/v2/barong/resource/labels/{key} + +#### DELETE +##### Description + +Delete a label with 'public' scope. + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| key | path | Label key. | Yes | string | + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 204 | Succefully deleted | +| 400 | Required params are empty | +| 401 | Invalid bearer token | +| 404 | Record is not found | + +#### PATCH +##### Description + +Update a label with 'public' scope. + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| key | path | Label key. | Yes | string | +| value | formData | Label value. | Yes | string | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 200 | Update a label with 'public' scope. | [API_V2_Entities_Label](#api_v2_entities_label) | +| 400 | Required params are empty | | +| 401 | Invalid bearer token | | +| 404 | Record is not found | | +| 422 | Validation errors | | + +#### GET +##### Description + +Return a label by key. + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| key | path | Label key. | Yes | string | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 200 | Return a label by key. | [API_V2_Entities_Label](#api_v2_entities_label) | +| 400 | Required params are empty | | +| 401 | Invalid bearer token | | +| 404 | Record is not found | | + +### /api/v2/barong/resource/labels + +#### POST +##### Description + +Create a label with 'public' scope. + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| key | formData | Label key. | Yes | string | +| value | formData | Label value. | Yes | string | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 201 | Create a label with 'public' scope. | [API_V2_Entities_Label](#api_v2_entities_label) | +| 400 | Required params are empty | | +| 401 | Invalid bearer token | | +| 422 | Validation errors | | + +#### GET +##### Description + +List all labels for current user. + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 200 | List all labels for current user. | [API_V2_Entities_Label](#api_v2_entities_label) | +| 401 | Invalid bearer token | | + +### /api/v2/barong/resource/users/password + +#### PUT +##### Description + +Sets new account password + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| old_password | formData | Previous account password | Yes | string | +| new_password | formData | User password | Yes | string | +| confirm_password | formData | User password | Yes | string | + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 201 | Changes password | +| 400 | Required params are empty | +| 404 | Record is not found | +| 422 | Validation errors | + +### /api/v2/barong/resource/users/activity/{topic} + +#### GET +##### Description + +Returns user activity + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| topic | path | Topic of user activity. Allowed: [all, password, session, otp] | Yes | string | +| time_from | query | An integer represents the seconds elapsed since Unix epoch.If set, only activities created after the time will be returned. | No | integer | +| time_to | query | An integer represents the seconds elapsed since Unix epoch.If set, only activities created before the time will be returned. | No | integer | +| result | query | Result of user activity. Allowed: [succeed, failed, denied] | No | string | +| page | query | Page number (defaults to 1). | No | integer | +| limit | query | Number of users per page (defaults to 100, maximum is 100). | No | integer | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 200 | Returns user activity | [API_V2_Entities_Activity](#api_v2_entities_activity) | + +### /api/v2/barong/resource/users/me + +#### DELETE +##### Description + +Blocks current user + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| password | query | Account password | Yes | string | +| otp_code | query | Code from Google Authenticator | No | string | + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 204 | Current user was blocked | + +#### PUT +##### Description + +Updates current user data field + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| data | formData | Any additional key: value pairs in json string format | Yes | string | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 200 | Updates current user data field | [API_V2_Entities_UserWithFullInfo](#api_v2_entities_userwithfullinfo) | + +#### GET +##### Description + +Returns current user + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 200 | Returns current user | [API_V2_Entities_UserWithFullInfo](#api_v2_entities_userwithfullinfo) | + +### /api/v2/barong/resource/addresses + +#### POST +##### Description + +Upload a new address approval document for current user + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| country | formData | Document type | Yes | string | +| address | formData | Document number | Yes | string | +| upload | formData | Array of Rack::Multipart::UploadedFile | Yes | string | +| city | formData | Document expiration date | Yes | string | +| postcode | formData | Any additional key: value pairs in json string format | Yes | string | + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 201 | New address approval document was uploaded | +| 400 | Required params are empty | +| 401 | Invalid bearer token | +| 422 | Validation errors | + +### /api/v2/barong/public/configs + +#### GET +##### Description + +Get barong configurations + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 200 | Get barong configurations | + +### /api/v2/barong/public/version + +#### GET +##### Description + +Get barong version + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 200 | Get barong version | + +### /api/v2/barong/public/time + +#### GET +##### Description + +Get server current unix timestamp. + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 200 | Get server current unix timestamp. | + +### /api/v2/barong/public/ping + +#### GET +##### Description + +Test connectivity + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 200 | Test connectivity | + +### /api/v2/barong/public/password/validate + +#### POST +##### Description + +Password strength testing + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ---- | +| password | formData | User password | Yes | string | + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 201 | Password strength testing | + +### /api/v2/barong/public/kyc + +#### POST +##### Description + +KYC callback + +##### Responses + +| Code | Description | +| ---- | ----------- | +| 201 | KYC callback | + +### Models + +#### API_V2_Entities_UserWithFullInfo + +Returns current user + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| email | string | User Email | No | +| uid | string | User UID | No | +| role | string | User role | No | +| level | integer | User level | No | +| otp | boolean | is 2FA enabled for account | No | +| state | string | User state: active, pending, inactive | No | +| referral_uid | string | UID of referrer | No | +| data | string | Additional phone and profile info | No | +| csrf_token | string | Сsrf protection token | No | +| labels | [API_V2_Entities_Label](#api_v2_entities_label) | | No | +| phones | [API_V2_Entities_Phone](#api_v2_entities_phone) | | No | +| profiles | [API_V2_Entities_Profile](#api_v2_entities_profile) | | No | +| data_storages | [API_V2_Entities_DataStorage](#api_v2_entities_datastorage) | | No | +| created_at | string | | No | +| updated_at | string | | No | + +#### API_V2_Entities_Label + +List all labels for current user. + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| key | string | Label key. [a-z0-9_-]+ should be used. Min - 3, max - 255 characters. | No | +| value | string | Label value. [A-Za-z0-9_-] should be used. Min - 3, max - 255 characters. | No | +| scope | string | Label scope: 'public' or 'private' | No | +| created_at | string | | No | +| updated_at | string | | No | + +#### API_V2_Entities_Phone + +Returns list of user's phones + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| country | string | Phone country | No | +| number | string | Submasked phone number | No | +| validated_at | s (g) | Phone validation date | No | + +#### API_V2_Entities_Profile + +Return profiles of current resource owner + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| first_name | string | First Name | No | +| last_name | string | Submasked last name | No | +| dob | date | Submasked birth date | No | +| address | string | Address | No | +| postcode | string | Address Postcode | No | +| city | string | City name | No | +| country | string | Country name | No | +| state | string | Profile state: drafted, submitted, verified, rejected | No | +| metadata | object | Profile additional fields | No | +| created_at | string | | No | +| updated_at | string | | No | + +#### API_V2_Entities_DataStorage + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| title | string | Any additional data title | No | +| data | string | Any additional data json key:value pairs | No | +| created_at | string | | No | +| updated_at | string | | No | + +#### API_V2_Entities_APIKey + +Create an api key + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| kid | string | JWT public key | No | +| algorithm | string | Cryptographic hash function type | No | +| scope | string | Serialized array of scopes | No | +| state | string | active/non-active state of key | No | +| secret | string | Api key secret | No | +| created_at | string | | No | +| updated_at | string | | No | + +#### API_V2_Entities_Document + +Return current user documents list + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| upload | string | File url | No | +| doc_type | string | Document type: passport, driver license, utility bill, identity card, institutional, address, residental | No | +| doc_number | string | Submasked document number: AB123123 type | No | +| doc_expire | string | Expire date of uploaded documents | No | +| metadata | string | Any additional stored data | No | +| created_at | string | | No | +| updated_at | string | | No | + +#### API_V2_Entities_Activity + +Returns user activity + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| id | integer | Activity ID | No | +| user_ip | string | User IP | No | +| user_agent | string | User Browser Agent | No | +| topic | string | Defined topic (session, adjustments) or general by default | No | +| action | string | API action: POST => 'create', PUT => 'update', GET => 'read', DELETE => 'delete', PATCH => 'update' or system if there is no match of HTTP method | No | +| result | string | Status of API response: succeed, failed, denied | No | +| data | string | Parameters which was sent to specific API endpoint | No | +| created_at | string | | No | + +#### API_V2_Entities_Level + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| id | integer | Level identifier, level number | No | +| key | string | Label key. [A-Za-z0-9_-] should be used. Min - 3, max - 255 characters. | No | +| value | string | Label value. [A-Za-z0-9_-] should be used. Min - 3, max - 255 characters. | No | + +#### API_V2_Entities_User + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| email | string | User Email | No | +| uid | string | User UID | No | +| role | string | User role | No | +| level | integer | User level | No | +| otp | boolean | is 2FA enabled for account | No | +| state | string | User state: active, pending, inactive | No | +| referral_uid | string | UID of referrer | No | +| data | string | Additional phone and profile info | No | + +#### API_V2_Entities_UserWithProfile + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| email | string | User Email | No | +| uid | string | User UID | No | +| role | string | User role | No | +| level | integer | User level | No | +| otp | boolean | is 2FA enabled for account | No | +| state | string | User state: active, pending, inactive | No | +| referral_uid | string | UID of referrer | No | +| data | string | Additional phone and profile info | No | +| profiles | [API_V2_Entities_Profile](#api_v2_entities_profile) | | No | +| created_at | string | | No | +| updated_at | string | | No | + +#### API_V2_Entities_UserWithKYC + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| email | string | User Email | No | +| uid | string | User UID | No | +| role | string | User role | No | +| level | integer | User level | No | +| otp | boolean | is 2FA enabled for account | No | +| state | string | User state: active, pending, inactive | No | +| referral_uid | string | UID of referrer | No | +| data | string | Additional phone and profile info | No | +| profiles | [API_V2_Entities_Profile](#api_v2_entities_profile) | | No | +| labels | [API_V2_Entities_AdminLabelView](#api_v2_entities_adminlabelview) | | No | +| phones | [API_V2_Entities_Phone](#api_v2_entities_phone) | | No | +| documents | [API_V2_Entities_Document](#api_v2_entities_document) | | No | +| data_storages | [API_V2_Entities_DataStorage](#api_v2_entities_datastorage) | | No | +| comments | [API_V2_Entities_Comment](#api_v2_entities_comment) | | No | +| created_at | string | | No | +| updated_at | string | | No | + +#### API_V2_Entities_AdminLabelView + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| key | string | Label key. [a-z0-9_-]+ should be used. Min - 3, max - 255 characters. | No | +| value | string | Label value. [A-Za-z0-9_-] should be used. Min - 3, max - 255 characters. | No | +| scope | string | Label scope: 'public' or 'private' | No | +| description | string | Label desc: json string with any additional information | No | +| created_at | string | | No | +| updated_at | string | | No | + +#### API_V2_Entities_Comment + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| id | integer | Comment id | No | +| author_uid | string | Comment author UID | No | +| title | string | Comment title | No | +| data | string | Comment plain text | No | +| created_at | string | | No | +| updated_at | string | | No | + +#### API_V2_Entities_ServiceAccounts + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| email | string | User Email | No | +| uid | string | User UID | No | +| role | string | Service Account Role | No | +| level | integer | User Level | No | +| state | string | Service Account State: active, disabled | No | +| user | [API_V2_Entities_User](#api_v2_entities_user) | | No | +| created_at | string | | No | +| updated_at | string | | No | diff --git a/docs/api/swagger/admin_api.json b/docs/api/swagger/admin_api.json new file mode 100644 index 0000000..07da31d --- /dev/null +++ b/docs/api/swagger/admin_api.json @@ -0,0 +1,2731 @@ +{ + "info": { + "title": "Barong", + "description": "RESTful AdminAPI for barong OAuth server", + "version": "2.7.0" + }, + "swagger": "2.0", + "produces": [ + "application/json" + ], + "securityDefinitions": { + "BearerToken": { + "description": "Bearer Token authentication", + "type": "basic", + "name": "Authorization", + "in": "header" + } + }, + "host": "www.alvand.local", + "basePath": "/api/v2/barong/admin", + "tags": [ + { + "name": "api", + "description": "Operations about apis" + } + ], + "paths": { + "/api/v2/barong/admin/users/data_storage": { + "delete": { + "description": "Deletes user's data storage record", + "produces": [ + "application/json" + ], + "parameters": [ + { + "in": "query", + "name": "uid", + "description": "user uniq id", + "type": "string", + "required": true + }, + { + "in": "query", + "name": "title", + "description": "data storage uniq title", + "type": "string", + "required": true + } + ], + "responses": { + "204": { + "description": "Deletes user's data storage record", + "schema": { + "$ref": "#/definitions/API_V2_Admin_Entities_UserWithKYC" + } + }, + "401": { + "description": "Invalid bearer token" + } + }, + "tags": [ + "api" + ], + "operationId": "deleteApiV2BarongAdminUsersDataStorage" + } + }, + "/api/v2/barong/admin/users/{uid}": { + "get": { + "description": "Returns user info", + "produces": [ + "application/json" + ], + "parameters": [ + { + "in": "path", + "name": "uid", + "description": "user uniq id", + "type": "string", + "required": true + } + ], + "responses": { + "200": { + "description": "Returns user info", + "schema": { + "$ref": "#/definitions/API_V2_Admin_Entities_UserWithKYC" + } + }, + "401": { + "description": "Invalid bearer token" + } + }, + "tags": [ + "api" + ], + "operationId": "getApiV2BarongAdminUsersUid" + } + }, + "/api/v2/barong/admin/users/documents": { + "put": { + "description": "change documents by admin", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "parameters": [ + { + "in": "formData", + "name": "user_uid", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "doc_type", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "doc_state", + "type": "string", + "required": true + } + ], + "responses": { + "200": { + "description": "change documents by admin", + "schema": { + "$ref": "#/definitions/API_V2_Admin_Entities_Profile" + } + }, + "400": { + "description": "Required params are empty" + }, + "401": { + "description": "Invalid bearer token" + }, + "404": { + "description": "doesnt exist" + }, + "422": { + "description": "Validation errors" + } + }, + "tags": [ + "api" + ], + "operationId": "putApiV2BarongAdminUsersDocuments" + }, + "get": { + "description": "Returns user documents", + "produces": [ + "application/json" + ], + "parameters": [ + { + "in": "query", + "name": "user_uid", + "type": "string", + "required": true + }, + { + "in": "query", + "name": "doc_type", + "type": "string", + "required": false + }, + { + "in": "query", + "name": "doc_category", + "type": "string", + "required": false + }, + { + "in": "query", + "name": "doc_state", + "type": "string", + "required": false + } + ], + "responses": { + "200": { + "description": "Returns user documents", + "schema": { + "$ref": "#/definitions/API_V2_Entities_Document" + } + }, + "400": { + "description": "Required params are empty" + }, + "401": { + "description": "Invalid bearer token" + }, + "404": { + "description": "doesnt exist" + }, + "422": { + "description": "Validation errors" + } + }, + "tags": [ + "api" + ], + "operationId": "getApiV2BarongAdminUsersDocuments" + } + }, + "/api/v2/barong/admin/users/documents/pending": { + "get": { + "description": "Returns array of users with pending or replaced documents as paginated collection", + "produces": [ + "application/json" + ], + "parameters": [ + { + "in": "query", + "name": "extended", + "description": "When true endpoint returns full information about users", + "type": "boolean", + "required": false + }, + { + "in": "query", + "name": "uid", + "type": "string", + "required": false + }, + { + "in": "query", + "name": "email", + "type": "string", + "required": false + }, + { + "in": "query", + "name": "role", + "type": "string", + "required": false + }, + { + "in": "query", + "name": "first_name", + "type": "string", + "required": false + }, + { + "in": "query", + "name": "last_name", + "type": "string", + "required": false + }, + { + "in": "query", + "name": "country", + "type": "string", + "required": false + }, + { + "in": "query", + "name": "level", + "type": "integer", + "format": "int32", + "required": false + }, + { + "in": "query", + "name": "state", + "type": "string", + "required": false + }, + { + "in": "query", + "name": "range", + "type": "string", + "default": "created", + "required": false + }, + { + "in": "query", + "name": "from", + "description": "An integer represents the seconds elapsed since Unix epoch.If set, only records FROM the time will be retrieved.", + "type": "integer", + "format": "int32", + "required": false + }, + { + "in": "query", + "name": "to", + "description": "An integer represents the seconds elapsed since Unix epoch.If set, only records BEFORE the time will be retrieved.", + "type": "integer", + "format": "int32", + "required": false + }, + { + "in": "query", + "name": "page", + "description": "Page number (defaults to 1).", + "type": "integer", + "format": "int32", + "default": 1, + "required": false + }, + { + "in": "query", + "name": "limit", + "description": "Number of users per page (defaults to 100, maximum is 100).", + "type": "integer", + "format": "int32", + "default": 100, + "minimum": 1, + "maximum": 100, + "required": false + } + ], + "responses": { + "200": { + "description": "Returns array of users with pending or replaced documents as paginated collection", + "schema": { + "$ref": "#/definitions/API_V2_Entities_User" + } + }, + "401": { + "description": "Invalid bearer token" + } + }, + "tags": [ + "api" + ], + "operationId": "getApiV2BarongAdminUsersDocumentsPending" + } + }, + "/api/v2/barong/admin/users": { + "put": { + "description": "Update user attributes", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "parameters": [ + { + "in": "formData", + "name": "uid", + "description": "user uniq id", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "email", + "description": "User Email", + "type": "string", + "required": false + }, + { + "in": "formData", + "name": "state", + "description": "user state", + "type": "string", + "required": false + }, + { + "in": "formData", + "name": "otp", + "description": "user 2fa status", + "type": "boolean", + "required": false + } + ], + "responses": { + "200": { + "description": "User attributes were created" + }, + "401": { + "description": "Invalid bearer token" + } + }, + "tags": [ + "api" + ], + "operationId": "putApiV2BarongAdminUsers" + }, + "get": { + "description": "Returns array of users as paginated collection", + "produces": [ + "application/json" + ], + "parameters": [ + { + "in": "query", + "name": "extended", + "description": "When true endpoint returns full information about users", + "type": "boolean", + "required": false + }, + { + "in": "query", + "name": "uid", + "type": "string", + "required": false + }, + { + "in": "query", + "name": "email", + "type": "string", + "required": false + }, + { + "in": "query", + "name": "role", + "type": "string", + "required": false + }, + { + "in": "query", + "name": "country", + "type": "string", + "required": false + }, + { + "in": "query", + "name": "level", + "type": "integer", + "format": "int32", + "required": false + }, + { + "in": "query", + "name": "state", + "type": "string", + "required": false + }, + { + "in": "query", + "name": "range", + "type": "string", + "default": "created", + "required": false + }, + { + "in": "query", + "name": "ordering", + "description": "If set, returned values will be sorted in specific order, defaults to 'asc'.", + "type": "string", + "default": "asc", + "required": false + }, + { + "in": "query", + "name": "order_by", + "description": "Name of the field, which result will be ordered by.", + "type": "string", + "default": "id", + "required": false + }, + { + "in": "query", + "name": "from", + "description": "An integer represents the seconds elapsed since Unix epoch.If set, only records FROM the time will be retrieved.", + "type": "integer", + "format": "int32", + "required": false + }, + { + "in": "query", + "name": "to", + "description": "An integer represents the seconds elapsed since Unix epoch.If set, only records BEFORE the time will be retrieved.", + "type": "integer", + "format": "int32", + "required": false + }, + { + "in": "query", + "name": "page", + "description": "Page number (defaults to 1).", + "type": "integer", + "format": "int32", + "default": 1, + "required": false + }, + { + "in": "query", + "name": "limit", + "description": "Number of users per page (defaults to 100, maximum is 100).", + "type": "integer", + "format": "int32", + "default": 100, + "minimum": 1, + "maximum": 100, + "required": false + } + ], + "responses": { + "200": { + "description": "Returns array of users as paginated collection", + "schema": { + "$ref": "#/definitions/API_V2_Entities_User" + } + }, + "401": { + "description": "Invalid bearer token" + } + }, + "tags": [ + "api" + ], + "operationId": "getApiV2BarongAdminUsers" + } + }, + "/api/v2/barong/admin/users/role": { + "post": { + "description": "Update user role", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "parameters": [ + { + "in": "formData", + "name": "uid", + "description": "user uniq id", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "role", + "description": "user role", + "type": "string", + "required": true + } + ], + "responses": { + "200": { + "description": "User role was created" + }, + "401": { + "description": "Invalid bearer token" + } + }, + "tags": [ + "api" + ], + "operationId": "postApiV2BarongAdminUsersRole" + } + }, + "/api/v2/barong/admin/users/update": { + "post": { + "description": "Update user attributes", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "parameters": [ + { + "in": "formData", + "name": "uid", + "description": "user uniq id", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "state", + "description": "user state", + "type": "string", + "required": false + }, + { + "in": "formData", + "name": "otp", + "description": "user 2fa status", + "type": "boolean", + "required": false + } + ], + "responses": { + "200": { + "description": "User attributes were updated" + }, + "401": { + "description": "Invalid bearer token" + } + }, + "tags": [ + "api" + ], + "operationId": "postApiV2BarongAdminUsersUpdate" + } + }, + "/api/v2/barong/admin/users/labels": { + "delete": { + "description": "Deletes label for user", + "produces": [ + "application/json" + ], + "parameters": [ + { + "in": "query", + "name": "uid", + "description": "user uniq id", + "type": "string", + "required": true + }, + { + "in": "query", + "name": "key", + "description": "label key. [a-z0-9_-]+ should be used. Min - 3, max - 255 characters.", + "type": "string", + "required": true + }, + { + "in": "query", + "name": "scope", + "description": "label key. [a-z0-9_-]+ should be used. Min - 3, max - 255 characters.", + "type": "string", + "required": true + } + ], + "responses": { + "204": { + "description": "Label was deleted" + }, + "401": { + "description": "Invalid bearer token" + } + }, + "tags": [ + "api" + ], + "operationId": "deleteApiV2BarongAdminUsersLabels" + }, + "put": { + "description": "Update user label scope", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "parameters": [ + { + "in": "formData", + "name": "uid", + "description": "user uniq id", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "key", + "description": "Label key.", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "scope", + "description": "label key. [a-z0-9_-]+ should be used. Min - 3, max - 255 characters.", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "description", + "description": "label description. [A-Za-z0-9_-] should be used. max - 255 characters.", + "type": "string", + "required": false + }, + { + "in": "formData", + "name": "value", + "description": "Label value.", + "type": "string", + "required": true + } + ], + "responses": { + "200": { + "description": "Label was updated" + }, + "400": { + "description": "Required params are empty" + }, + "401": { + "description": "Invalid bearer token" + }, + "404": { + "description": "Record is not found" + }, + "422": { + "description": "Validation errors" + } + }, + "tags": [ + "api" + ], + "operationId": "putApiV2BarongAdminUsersLabels" + }, + "post": { + "description": "Add label for user", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "parameters": [ + { + "in": "formData", + "name": "uid", + "description": "user uniq id", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "key", + "description": "label key. [a-z0-9_-]+ should be used. Min - 3, max - 255 characters.", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "value", + "description": "label value. [A-Za-z0-9_-] should be used. Min - 3, max - 255 characters.", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "description", + "description": "label description. [A-Za-z0-9_-] should be used. max - 255 characters.", + "type": "string", + "required": false + }, + { + "in": "formData", + "name": "scope", + "description": "Label scope: 'public' or 'private'. Default is public", + "type": "string", + "required": false + } + ], + "responses": { + "200": { + "description": "Label was created" + }, + "401": { + "description": "Invalid bearer token" + } + }, + "tags": [ + "api" + ], + "operationId": "postApiV2BarongAdminUsersLabels" + }, + "get": { + "description": "Returns array of users as paginated collection", + "produces": [ + "application/json" + ], + "parameters": [ + { + "in": "query", + "name": "key", + "description": "Label key", + "type": "string", + "required": true + }, + { + "in": "query", + "name": "value", + "description": "Label value", + "type": "string", + "required": true + }, + { + "in": "query", + "name": "page", + "description": "Page number (defaults to 1).", + "type": "integer", + "format": "int32", + "default": 1, + "required": false + }, + { + "in": "query", + "name": "limit", + "description": "Number of users per page (defaults to 100, maximum is 100).", + "type": "integer", + "format": "int32", + "default": 100, + "minimum": 1, + "maximum": 100, + "required": false + } + ], + "responses": { + "200": { + "description": "Returns array of users as paginated collection", + "schema": { + "$ref": "#/definitions/API_V2_Entities_User" + } + }, + "401": { + "description": "Invalid bearer token" + } + }, + "tags": [ + "api" + ], + "operationId": "getApiV2BarongAdminUsersLabels" + } + }, + "/api/v2/barong/admin/users/labels/update": { + "post": { + "description": "Update user label value", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "parameters": [ + { + "in": "formData", + "name": "uid", + "description": "user uniq id", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "key", + "description": "Label key.", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "scope", + "description": "label key. [a-z0-9_-]+ should be used. Min - 3, max - 255 characters.", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "value", + "description": "Label value.", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "description", + "description": "label description. [A-Za-z0-9_-] should be used. max - 255 characters.", + "type": "string", + "required": false + }, + { + "in": "formData", + "name": "replace", + "description": "When true label will be created if not exist", + "type": "boolean", + "default": true, + "required": false + } + ], + "responses": { + "200": { + "description": "Label was updated" + }, + "400": { + "description": "Required params are empty" + }, + "401": { + "description": "Invalid bearer token" + }, + "404": { + "description": "Record is not found" + }, + "422": { + "description": "Validation errors" + } + }, + "tags": [ + "api" + ], + "operationId": "postApiV2BarongAdminUsersLabelsUpdate" + } + }, + "/api/v2/barong/admin/users/labels/list": { + "get": { + "description": "Returns existing labels keys and values", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Returns existing labels keys and values" + }, + "401": { + "description": "Invalid bearer token" + } + }, + "tags": [ + "api" + ], + "operationId": "getApiV2BarongAdminUsersLabelsList" + } + }, + "/api/v2/barong/admin/users/comments": { + "delete": { + "description": "Delete user's comment", + "produces": [ + "application/json" + ], + "parameters": [ + { + "in": "query", + "name": "id", + "description": "comment uniq id", + "type": "integer", + "format": "int32", + "required": true + } + ], + "responses": { + "204": { + "description": "Delete user's comment", + "schema": { + "$ref": "#/definitions/API_V2_Admin_Entities_UserWithKYC" + } + }, + "401": { + "description": "Invalid bearer token" + } + }, + "tags": [ + "api" + ], + "operationId": "deleteApiV2BarongAdminUsersComments" + }, + "put": { + "description": "Edit user's comment", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "parameters": [ + { + "in": "formData", + "name": "id", + "description": "comment uniq id", + "type": "integer", + "format": "int32", + "required": true + }, + { + "in": "formData", + "name": "title", + "description": "comment title", + "type": "string", + "required": false + }, + { + "in": "formData", + "name": "data", + "description": "comment data", + "type": "string", + "required": false + } + ], + "responses": { + "200": { + "description": "Edit user's comment", + "schema": { + "$ref": "#/definitions/API_V2_Admin_Entities_UserWithKYC" + } + }, + "401": { + "description": "Invalid bearer token" + } + }, + "tags": [ + "api" + ], + "operationId": "putApiV2BarongAdminUsersComments" + }, + "post": { + "description": "Adds new user's comment", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "parameters": [ + { + "in": "formData", + "name": "uid", + "description": "user uniq id", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "title", + "description": "comment uniq title", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "data", + "description": "comment data", + "type": "string", + "required": true + } + ], + "responses": { + "201": { + "description": "Adds new user's comment", + "schema": { + "$ref": "#/definitions/API_V2_Admin_Entities_UserWithKYC" + } + }, + "401": { + "description": "Invalid bearer token" + } + }, + "tags": [ + "api" + ], + "operationId": "postApiV2BarongAdminUsersComments" + } + }, + "/api/v2/barong/admin/api_keys": { + "get": { + "description": "List all api keys for selected account.", + "produces": [ + "application/json" + ], + "parameters": [ + { + "in": "query", + "name": "uid", + "description": "user uniq id", + "type": "string", + "required": true + }, + { + "in": "query", + "name": "ordering", + "description": "If set, returned values will be sorted in specific order, defaults to 'asc'.", + "type": "string", + "default": "asc", + "required": false + }, + { + "in": "query", + "name": "order_by", + "description": "Name of the field, which result will be ordered by.", + "type": "string", + "default": "id", + "required": false + }, + { + "in": "query", + "name": "page", + "description": "Page number (defaults to 1).", + "type": "integer", + "format": "int32", + "default": 1, + "required": false + }, + { + "in": "query", + "name": "limit", + "description": "Number of users per page (defaults to 100, maximum is 100).", + "type": "integer", + "format": "int32", + "default": 100, + "minimum": 1, + "maximum": 100, + "required": false + } + ], + "responses": { + "200": { + "description": "List all api keys for selected account.", + "schema": { + "$ref": "#/definitions/API_V2_Entities_APIKey" + } + }, + "401": { + "description": "Invalid bearer token" + } + }, + "tags": [ + "api" + ], + "operationId": "getApiV2BarongAdminApiKeys" + } + }, + "/api/v2/barong/admin/permissions": { + "put": { + "description": "Update Permission", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "parameters": [ + { + "in": "formData", + "name": "id", + "description": "Permission id", + "type": "integer", + "format": "int32", + "required": true + }, + { + "in": "formData", + "name": "role", + "description": "permission field - role", + "type": "string", + "required": false + }, + { + "in": "formData", + "name": "verb", + "description": "permission field - request verb", + "type": "string", + "required": false + }, + { + "in": "formData", + "name": "path", + "description": "permission field - request path", + "type": "string", + "required": false + }, + { + "in": "formData", + "name": "action", + "type": "string", + "required": false + }, + { + "in": "formData", + "name": "topic", + "type": "string", + "required": false + } + ], + "responses": { + "200": { + "description": "Permission was updated" + }, + "401": { + "description": "Invalid bearer token" + } + }, + "tags": [ + "api" + ], + "operationId": "putApiV2BarongAdminPermissions" + }, + "delete": { + "description": "Deletes permission", + "produces": [ + "application/json" + ], + "parameters": [ + { + "in": "query", + "name": "id", + "description": "permission id", + "type": "integer", + "format": "int32", + "required": true + } + ], + "responses": { + "204": { + "description": "Permission was deleted" + }, + "401": { + "description": "Invalid bearer token" + } + }, + "tags": [ + "api" + ], + "operationId": "deleteApiV2BarongAdminPermissions" + }, + "post": { + "description": "Create permission", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "parameters": [ + { + "in": "formData", + "name": "role", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "verb", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "path", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "action", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "topic", + "type": "string", + "required": false + } + ], + "responses": { + "200": { + "description": "Permission was created" + }, + "401": { + "description": "Invalid bearer token" + } + }, + "tags": [ + "api" + ], + "operationId": "postApiV2BarongAdminPermissions" + }, + "get": { + "description": "Returns array of permissions as paginated collection", + "produces": [ + "application/json" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "description": "Page number (defaults to 1).", + "type": "integer", + "format": "int32", + "default": 1, + "required": false + }, + { + "in": "query", + "name": "limit", + "description": "Number of users per page (defaults to 100, maximum is 100).", + "type": "integer", + "format": "int32", + "default": 100, + "minimum": 1, + "maximum": 100, + "required": false + } + ], + "responses": { + "200": { + "description": "Returns array of permissions as paginated collection", + "schema": { + "$ref": "#/definitions/API_V2_Entities_Permission" + } + }, + "401": { + "description": "Invalid bearer token" + } + }, + "tags": [ + "api" + ], + "operationId": "getApiV2BarongAdminPermissions" + } + }, + "/api/v2/barong/admin/activities/admin": { + "get": { + "description": "Returns array of activities as paginated collection", + "produces": [ + "application/json" + ], + "parameters": [ + { + "in": "query", + "name": "topic", + "type": "string", + "required": false + }, + { + "in": "query", + "name": "action", + "type": "string", + "required": false + }, + { + "in": "query", + "name": "uid", + "type": "string", + "required": false + }, + { + "in": "query", + "name": "email", + "type": "string", + "required": false + }, + { + "in": "query", + "name": "from", + "description": "An integer represents the seconds elapsed since Unix epoch.If set, only records FROM the time will be retrieved.", + "type": "integer", + "format": "int32", + "required": false + }, + { + "in": "query", + "name": "to", + "description": "An integer represents the seconds elapsed since Unix epoch.If set, only records BEFORE the time will be retrieved.", + "type": "integer", + "format": "int32", + "required": false + }, + { + "in": "query", + "name": "page", + "description": "Page number (defaults to 1).", + "type": "integer", + "format": "int32", + "default": 1, + "required": false + }, + { + "in": "query", + "name": "limit", + "description": "Number of users per page (defaults to 100, maximum is 100).", + "type": "integer", + "format": "int32", + "default": 100, + "minimum": 1, + "maximum": 100, + "required": false + }, + { + "in": "query", + "name": "target_uid", + "type": "string", + "required": false + }, + { + "in": "query", + "name": "range", + "type": "string", + "default": "created", + "required": false + } + ], + "responses": { + "200": { + "description": "Returns array of activities as paginated collection", + "schema": { + "$ref": "#/definitions/API_V2_Admin_Entities_AdminActivity" + } + }, + "401": { + "description": "Invalid bearer token" + } + }, + "tags": [ + "api" + ], + "operationId": "getApiV2BarongAdminActivitiesAdmin" + } + }, + "/api/v2/barong/admin/activities": { + "get": { + "description": "Returns array of activities as paginated collection", + "produces": [ + "application/json" + ], + "parameters": [ + { + "in": "query", + "name": "topic", + "type": "string", + "required": false + }, + { + "in": "query", + "name": "action", + "type": "string", + "required": false + }, + { + "in": "query", + "name": "uid", + "type": "string", + "required": false + }, + { + "in": "query", + "name": "email", + "type": "string", + "required": false + }, + { + "in": "query", + "name": "from", + "description": "An integer represents the seconds elapsed since Unix epoch.If set, only records FROM the time will be retrieved.", + "type": "integer", + "format": "int32", + "required": false + }, + { + "in": "query", + "name": "to", + "description": "An integer represents the seconds elapsed since Unix epoch.If set, only records BEFORE the time will be retrieved.", + "type": "integer", + "format": "int32", + "required": false + }, + { + "in": "query", + "name": "page", + "description": "Page number (defaults to 1).", + "type": "integer", + "format": "int32", + "default": 1, + "required": false + }, + { + "in": "query", + "name": "limit", + "description": "Number of users per page (defaults to 100, maximum is 100).", + "type": "integer", + "format": "int32", + "default": 100, + "minimum": 1, + "maximum": 100, + "required": false + } + ], + "responses": { + "200": { + "description": "Returns array of activities as paginated collection", + "schema": { + "$ref": "#/definitions/API_V2_Admin_Entities_ActivityWithUser" + } + }, + "401": { + "description": "Invalid bearer token" + } + }, + "tags": [ + "api" + ], + "operationId": "getApiV2BarongAdminActivities" + } + }, + "/api/v2/barong/admin/metrics": { + "get": { + "description": "Returns main statistic in the given time period", + "produces": [ + "application/json" + ], + "parameters": [ + { + "in": "query", + "name": "created_from", + "type": "string", + "required": false + }, + { + "in": "query", + "name": "created_to", + "type": "string", + "required": false + } + ], + "responses": { + "200": { + "description": "Returns main statistic in the given time period" + }, + "401": { + "description": "Invalid bearer token" + } + }, + "tags": [ + "api" + ], + "operationId": "getApiV2BarongAdminMetrics" + } + }, + "/api/v2/barong/admin/restrictions": { + "delete": { + "description": "Delete restriction", + "produces": [ + "application/json" + ], + "parameters": [ + { + "in": "query", + "name": "id", + "description": "Restriction id", + "type": "integer", + "format": "int32", + "required": true + } + ], + "responses": { + "204": { + "description": "Restriction was deleted" + }, + "401": { + "description": "Invalid bearer token" + } + }, + "tags": [ + "api" + ], + "operationId": "deleteApiV2BarongAdminRestrictions" + }, + "put": { + "description": "Update restriction", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "parameters": [ + { + "in": "formData", + "name": "id", + "description": "Restriction id", + "type": "integer", + "format": "int32", + "required": true + }, + { + "in": "formData", + "name": "scope", + "type": "string", + "enum": [ + "continent", + "country", + "ip", + "ip_subnet", + "all" + ], + "required": false + }, + { + "in": "formData", + "name": "category", + "type": "string", + "enum": [ + "whitelist", + "maintenance", + "blacklist", + "blocklogin" + ], + "required": false + }, + { + "in": "formData", + "name": "value", + "type": "string", + "required": false + }, + { + "in": "formData", + "name": "state", + "type": "string", + "enum": [ + "enabled", + "disabled" + ], + "required": false + }, + { + "in": "formData", + "name": "code", + "type": "integer", + "format": "int32", + "required": false + } + ], + "responses": { + "200": { + "description": "Restriction was updated" + }, + "401": { + "description": "Invalid bearer token" + } + }, + "tags": [ + "api" + ], + "operationId": "putApiV2BarongAdminRestrictions" + }, + "post": { + "description": "Create restriction", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "parameters": [ + { + "in": "formData", + "name": "scope", + "type": "string", + "enum": [ + "continent", + "country", + "ip", + "ip_subnet", + "all" + ], + "required": true + }, + { + "in": "formData", + "name": "value", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "category", + "type": "string", + "enum": [ + "whitelist", + "maintenance", + "blacklist", + "blocklogin" + ], + "required": true + }, + { + "in": "formData", + "name": "state", + "type": "string", + "default": "enabled", + "enum": [ + "enabled", + "disabled" + ], + "required": false + }, + { + "in": "formData", + "name": "code", + "type": "integer", + "format": "int32", + "required": false + } + ], + "responses": { + "200": { + "description": "Restriction was created" + }, + "401": { + "description": "Invalid bearer token" + } + }, + "tags": [ + "api" + ], + "operationId": "postApiV2BarongAdminRestrictions" + }, + "get": { + "description": "Returns array of restrictions as a paginated collection", + "produces": [ + "application/json" + ], + "parameters": [ + { + "in": "query", + "name": "scope", + "type": "string", + "enum": [ + "continent", + "country", + "ip", + "ip_subnet", + "all" + ], + "required": false + }, + { + "in": "query", + "name": "category", + "type": "string", + "enum": [ + "whitelist", + "maintenance", + "blacklist", + "blocklogin" + ], + "required": false + }, + { + "in": "query", + "name": "range", + "type": "string", + "default": "created", + "required": false + }, + { + "in": "query", + "name": "page", + "description": "Page number (defaults to 1).", + "type": "integer", + "format": "int32", + "default": 1, + "required": false + }, + { + "in": "query", + "name": "limit", + "description": "Number of users per page (defaults to 100, maximum is 100).", + "type": "integer", + "format": "int32", + "default": 100, + "minimum": 1, + "maximum": 100, + "required": false + } + ], + "responses": { + "200": { + "description": "Returns array of restrictions as a paginated collection", + "schema": { + "$ref": "#/definitions/API_V2_Entities_Restriction" + } + }, + "401": { + "description": "Invalid bearer token" + } + }, + "tags": [ + "api" + ], + "operationId": "getApiV2BarongAdminRestrictions" + } + }, + "/api/v2/barong/admin/restrictions/whitelink": { + "post": { + "description": "Create whitelink", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "parameters": [ + { + "in": "formData", + "name": "expire_time", + "description": "link will be active for (Time.now + expire_time in following range)", + "type": "integer", + "format": "int32", + "default": 1, + "minimum": 1, + "maximum": 30, + "required": false + }, + { + "in": "formData", + "name": "range", + "description": "In combination with expire_time gives full controll over token expiration", + "type": "string", + "default": "day", + "required": false + } + ], + "responses": { + "200": { + "description": "Created whitelink" + }, + "401": { + "description": "Invalid bearer token" + } + }, + "tags": [ + "api" + ], + "operationId": "postApiV2BarongAdminRestrictionsWhitelink" + } + }, + "/api/v2/barong/admin/profiles/label": { + "put": { + "description": "verifying labels by admin", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "parameters": [ + { + "in": "formData", + "name": "user_uid", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "label_key", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "label_value", + "type": "string", + "required": true + } + ], + "responses": { + "200": { + "description": "verifying labels by admin", + "schema": { + "$ref": "#/definitions/API_V2_Admin_Entities_Profile" + } + }, + "400": { + "description": "Required params are empty" + }, + "401": { + "description": "Invalid bearer token" + }, + "404": { + "description": "doesnt exist" + }, + "422": { + "description": "Validation errors" + } + }, + "tags": [ + "api" + ], + "operationId": "putApiV2BarongAdminProfilesLabel" + } + }, + "/api/v2/barong/admin/profiles": { + "post": { + "description": "Create a profile for user", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "parameters": [ + { + "in": "formData", + "name": "uid", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "first_name", + "type": "string", + "required": false + }, + { + "in": "formData", + "name": "last_name", + "type": "string", + "required": false + }, + { + "in": "formData", + "name": "dob", + "type": "string", + "format": "date", + "required": false + }, + { + "in": "formData", + "name": "address", + "type": "string", + "required": false + }, + { + "in": "formData", + "name": "postcode", + "type": "string", + "required": false + }, + { + "in": "formData", + "name": "city", + "type": "string", + "required": false + }, + { + "in": "formData", + "name": "country", + "type": "string", + "required": false + }, + { + "in": "formData", + "name": "metadata", + "description": "Any additional key: value pairs in json string format", + "type": "string", + "required": false + } + ], + "responses": { + "201": { + "description": "Create a profile for user", + "schema": { + "$ref": "#/definitions/API_V2_Admin_Entities_Profile" + } + }, + "400": { + "description": "Required params are empty" + }, + "401": { + "description": "Invalid bearer token" + }, + "422": { + "description": "Validation errors" + } + }, + "tags": [ + "api" + ], + "operationId": "postApiV2BarongAdminProfiles" + }, + "put": { + "description": "Verify user's profile", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "parameters": [ + { + "in": "formData", + "name": "uid", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "state", + "type": "string", + "required": true + } + ], + "responses": { + "200": { + "description": "Verify user's profile", + "schema": { + "$ref": "#/definitions/API_V2_Admin_Entities_Profile" + } + }, + "400": { + "description": "Required params are empty" + }, + "401": { + "description": "Invalid bearer token" + }, + "422": { + "description": "Validation errors" + } + }, + "tags": [ + "api" + ], + "operationId": "putApiV2BarongAdminProfiles" + }, + "get": { + "description": "Return all profiles", + "produces": [ + "application/json" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "description": "Page number (defaults to 1).", + "type": "integer", + "format": "int32", + "default": 1, + "required": false + }, + { + "in": "query", + "name": "limit", + "description": "Number of users per page (defaults to 100, maximum is 100).", + "type": "integer", + "format": "int32", + "default": 100, + "minimum": 1, + "maximum": 100, + "required": false + } + ], + "responses": { + "200": { + "description": "Return all profiles", + "schema": { + "$ref": "#/definitions/API_V2_Admin_Entities_Profile" + } + }, + "401": { + "description": "Invalid bearer token" + } + }, + "tags": [ + "api" + ], + "operationId": "getApiV2BarongAdminProfiles" + } + }, + "/api/v2/barong/admin/profiles/treasury/list": { + "get": { + "description": "Return list of treasuries", + "produces": [ + "application/json" + ], + "parameters": [ + { + "in": "query", + "name": "user_uid", + "type": "string", + "required": true + }, + { + "in": "query", + "name": "kind", + "type": "string", + "required": false + } + ], + "responses": { + "200": { + "description": "Return list of treasuries", + "schema": { + "$ref": "#/definitions/API_V2_Entities_Treasury" + } + }, + "401": { + "description": "Invalid bearer token" + }, + "404": { + "description": "User has no treasuries" + } + }, + "tags": [ + "api" + ], + "operationId": "getApiV2BarongAdminProfilesTreasuryList" + } + }, + "/api/v2/barong/admin/levels": { + "put": { + "description": "Change vip level", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "parameters": [ + { + "in": "formData", + "name": "uid", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "level", + "description": "change level from vip", + "type": "string", + "default": "3", + "required": true + } + ], + "responses": { + "200": { + "description": "Change vip level", + "schema": { + "$ref": "#/definitions/API_V2_Entities_User" + } + }, + "400": { + "description": "Required params are empty" + }, + "401": { + "description": "Invalid bearer token" + }, + "422": { + "description": "Validation errors" + } + }, + "tags": [ + "api" + ], + "operationId": "putApiV2BarongAdminLevels" + }, + "get": { + "description": "Returns array of permissions as paginated collection", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Returns array of permissions as paginated collection", + "schema": { + "$ref": "#/definitions/API_V2_Entities_Level" + } + }, + "401": { + "description": "Invalid bearer token" + } + }, + "tags": [ + "api" + ], + "operationId": "getApiV2BarongAdminLevels" + } + }, + "/api/v2/barong/admin/abilities": { + "get": { + "description": "Get all roles and admin_permissions of barong cancan.", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Get all roles and admin_permissions of barong cancan." + } + }, + "tags": [ + "api" + ], + "operationId": "getApiV2BarongAdminAbilities" + } + } + }, + "definitions": { + "API_V2_Admin_Entities_UserWithKYC": { + "type": "object", + "properties": { + "email": { + "type": "string", + "description": "User Email" + }, + "uid": { + "type": "string", + "description": "User UID" + }, + "role": { + "type": "string", + "description": "User role" + }, + "level": { + "type": "integer", + "format": "int32", + "description": "User level" + }, + "otp": { + "type": "boolean", + "description": "is 2FA enabled for account" + }, + "state": { + "type": "string", + "description": "User state: active, pending, inactive" + }, + "referral_uid": { + "type": "string", + "description": "UID of referrer" + }, + "data": { + "type": "string", + "description": "Additional phone and profile info" + }, + "profiles": { + "$ref": "#/definitions/API_V2_Admin_Entities_Profile" + }, + "labels": { + "$ref": "#/definitions/API_V2_Entities_AdminLabelView" + }, + "created_at": { + "type": "string" + }, + "updated_at": { + "type": "string" + }, + "documents": { + "$ref": "#/definitions/API_V2_Admin_Entities_Document" + } + }, + "description": "Adds new user's comment" + }, + "API_V2_Admin_Entities_Profile": { + "type": "object", + "properties": { + "first_name": { + "type": "string", + "description": "first name" + }, + "last_name": { + "type": "string", + "description": "Last name" + }, + "national_code": { + "type": "string", + "description": "National Code" + }, + "dob": { + "type": "string", + "format": "date", + "description": "Birth date" + }, + "address": { + "type": "string", + "description": "Address" + }, + "postcode": { + "type": "string", + "description": "Address Postcode" + }, + "city": { + "type": "string", + "description": "City name" + }, + "country": { + "type": "string", + "description": "Country name" + }, + "state": { + "type": "string", + "description": "Profile state: drafted, submitted, verified, rejected" + }, + "metadata": { + "type": "object", + "description": "Profile additional fields" + }, + "upload": { + "type": "string", + "description": "Address Postcode" + }, + "created_at": { + "type": "string" + }, + "updated_at": { + "type": "string" + } + }, + "description": "Return all profiles" + }, + "API_V2_Entities_AdminLabelView": { + "type": "object", + "properties": { + "key": { + "type": "string", + "description": "Label key. [a-z0-9_-]+ should be used. Min - 3, max - 255 characters." + }, + "value": { + "type": "string", + "description": "Label value. [A-Za-z0-9_-] should be used. Min - 3, max - 255 characters." + }, + "scope": { + "type": "string", + "description": "Label scope: 'public' or 'private'" + }, + "description": { + "type": "string", + "description": "Label desc: json string with any additional information" + }, + "created_at": { + "type": "string" + }, + "updated_at": { + "type": "string" + } + } + }, + "API_V2_Admin_Entities_Document": { + "type": "object", + "properties": { + "upload": { + "type": "string", + "description": "File Upload" + }, + "url": { + "type": "string", + "description": "File url" + }, + "doc_type": { + "type": "string", + "description": "Document type: passport, driver license, utility bill, identity card, institutional, address, residental" + }, + "doc_number": { + "type": "string", + "description": "document number: AB123123 type" + }, + "doc_expire": { + "type": "string", + "description": "Expire date of uploaded documents" + }, + "metadata": { + "type": "string", + "description": "Any additional stored data" + }, + "created_at": { + "type": "string" + }, + "updated_at": { + "type": "string" + } + } + }, + "API_V2_Entities_Document": { + "type": "object", + "properties": { + "upload": { + "type": "string", + "description": "File Upload" + }, + "url": { + "type": "string", + "description": "File url" + }, + "doc_type": { + "type": "string", + "description": "Document type: passport, driver license, utility bill, identity card, institutional, address, residental" + }, + "doc_number": { + "type": "string", + "description": "Submasked document number: AB123123 type" + }, + "doc_expire": { + "type": "string", + "description": "Expire date of uploaded documents" + }, + "metadata": { + "type": "string", + "description": "Any additional stored data" + }, + "created_at": { + "type": "string" + }, + "updated_at": { + "type": "string" + } + }, + "description": "Returns user documents" + }, + "API_V2_Entities_User": { + "type": "object", + "properties": { + "email": { + "type": "string", + "description": "User Email" + }, + "uid": { + "type": "string", + "description": "User UID" + }, + "role": { + "type": "string", + "description": "User role" + }, + "level": { + "type": "integer", + "format": "int32", + "description": "User level" + }, + "otp": { + "type": "boolean", + "description": "is 2FA enabled for account" + }, + "state": { + "type": "string", + "description": "User state: active, pending, inactive" + }, + "referral_uid": { + "type": "string", + "description": "UID of referrer" + }, + "data": { + "type": "string", + "description": "Additional phone and profile info" + } + }, + "description": "Change vip level" + }, + "API_V2_Entities_APIKey": { + "type": "object", + "properties": { + "kid": { + "type": "string", + "description": "JWT public key" + }, + "algorithm": { + "type": "string", + "description": "Cryptographic hash function type" + }, + "scope": { + "type": "string", + "description": "Serialized array of scopes" + }, + "state": { + "type": "string", + "description": "active/non-active state of key" + }, + "secret": { + "type": "string", + "description": "Api key secret" + }, + "created_at": { + "type": "string" + }, + "updated_at": { + "type": "string" + } + }, + "description": "List all api keys for selected account." + }, + "API_V2_Entities_Permission": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32", + "description": "Permission id" + }, + "action": { + "type": "string", + "description": "Permission action: accept (allow access (drop access), audit (record activity)" + }, + "role": { + "type": "string", + "description": "Permission user role" + }, + "verb": { + "type": "string", + "description": "Permission verb: put, post, delete, get" + }, + "path": { + "type": "string", + "description": "API path" + }, + "topic": { + "type": "string", + "description": "Permission topic: general, session etc" + }, + "created_at": { + "type": "string" + }, + "updated_at": { + "type": "string" + } + }, + "description": "Returns array of permissions as paginated collection" + }, + "API_V2_Admin_Entities_AdminActivity": { + "type": "object", + "properties": { + "user_ip": { + "type": "string", + "description": "User IP" + }, + "user_agent": { + "type": "string", + "description": "User Browser Agent" + }, + "topic": { + "type": "string", + "description": "Defined topic (session, adjustments) or general by default" + }, + "action": { + "type": "string", + "description": "API action: POST => 'create', PUT => 'update', GET => 'read', DELETE => 'delete', PATCH => 'update' or system if there is no match of HTTP method" + }, + "result": { + "type": "string", + "description": "Status of API response: succeed, failed, denied" + }, + "data": { + "type": "string", + "description": "Parameters which was sent to specific API endpoint" + }, + "admin": { + "$ref": "#/definitions/API_V2_Entities_User" + }, + "target": { + "$ref": "#/definitions/API_V2_Entities_User" + }, + "created_at": { + "type": "string" + } + }, + "description": "Returns array of activities as paginated collection" + }, + "API_V2_Admin_Entities_ActivityWithUser": { + "type": "object", + "properties": { + "user_ip": { + "type": "string", + "description": "User IP" + }, + "user_agent": { + "type": "string", + "description": "User Browser Agent" + }, + "topic": { + "type": "string", + "description": "Defined topic (session, adjustments) or general by default" + }, + "action": { + "type": "string", + "description": "API action: POST => 'create', PUT => 'update', GET => 'read', DELETE => 'delete', PATCH => 'update' or system if there is no match of HTTP method" + }, + "result": { + "type": "string", + "description": "Status of API response: succeed, failed, denied" + }, + "data": { + "type": "string", + "description": "Parameters which was sent to specific API endpoint" + }, + "user": { + "$ref": "#/definitions/API_V2_Entities_User" + }, + "created_at": { + "type": "string" + } + }, + "description": "Returns array of activities as paginated collection" + }, + "API_V2_Entities_Restriction": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32", + "description": "Restriction id" + }, + "category": { + "type": "string", + "description": "Restriction categories: blacklist, maintenance, whitelist, blocklogin" + }, + "scope": { + "type": "string", + "description": "Restriction scopes: continent, country, ip, ip_subnet, all" + }, + "value": { + "type": "string", + "description": "Restriction value: IP address, country abbreviation, all" + }, + "code": { + "type": "integer", + "format": "int32", + "description": "Restriction codes: {\"continent\"=>423, \"country\"=>423, \"ip_subnet\"=>403, \"ip\"=>401, \"all\"=>401}" + }, + "state": { + "type": "string", + "description": "Restriction states: disabled, enabled" + }, + "created_at": { + "type": "string" + }, + "updated_at": { + "type": "string" + } + }, + "description": "Returns array of restrictions as a paginated collection" + }, + "API_V2_Entities_Treasury": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32", + "description": "id of record" + }, + "title": { + "type": "string", + "description": "title" + }, + "state": { + "type": "string", + "description": "state" + }, + "kind": { + "type": "string", + "description": "kind" + }, + "data": { + "type": "string", + "description": "Submasked data" + }, + "created_at": { + "type": "string" + }, + "updated_at": { + "type": "string" + } + }, + "description": "Return list of treasuries" + }, + "API_V2_Entities_Level": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32", + "description": "Level identifier, level number" + }, + "key": { + "type": "string", + "description": "Label key. [A-Za-z0-9_-] should be used. Min - 3, max - 255 characters." + }, + "value": { + "type": "string", + "description": "Label value. [A-Za-z0-9_-] should be used. Min - 3, max - 255 characters." + } + }, + "description": "Returns array of permissions as paginated collection" + }, + "API_V2_Admin_Entities_Phone": { + "type": "object", + "properties": { + "country": { + "type": "string", + "description": "Phone country" + }, + "number": { + "type": "string", + "description": "Phone number" + }, + "validated_at": { + "type": "s", + "format": "g", + "description": "Phone validation date" + } + } + }, + "API_V2_Admin_Entities_UserWithProfile": { + "type": "object", + "properties": { + "email": { + "type": "string", + "description": "User Email" + }, + "uid": { + "type": "string", + "description": "User UID" + }, + "role": { + "type": "string", + "description": "User role" + }, + "level": { + "type": "integer", + "format": "int32", + "description": "User level" + }, + "otp": { + "type": "boolean", + "description": "is 2FA enabled for account" + }, + "state": { + "type": "string", + "description": "User state: active, pending, inactive" + }, + "referral_uid": { + "type": "string", + "description": "UID of referrer" + }, + "data": { + "type": "string", + "description": "Additional phone and profile info" + }, + "profiles": { + "$ref": "#/definitions/API_V2_Admin_Entities_Profile" + }, + "created_at": { + "type": "string" + }, + "updated_at": { + "type": "string" + } + } + } + } +} diff --git a/docs/api/swagger/management_api.json b/docs/api/swagger/management_api.json new file mode 100644 index 0000000..702176b --- /dev/null +++ b/docs/api/swagger/management_api.json @@ -0,0 +1,1685 @@ +{ + "info": { + "title": "Barong", + "description": "Management API for barong OAuth server", + "version": "2.7.0" + }, + "swagger": "2.0", + "produces": [ + "application/json" + ], + "securityDefinitions": { + "SecurityScope": { + "description": "JWT should have signature keychains", + "type": "basic", + "name": "Authorization" + } + }, + "host": "localhost:3000", + "basePath": "/api/v2/barong/management", + "tags": [ + { + "name": "api", + "description": "Operations about apis" + } + ], + "paths": { + "/api/v2/barong/management/labels/delete": { + "post": { + "description": "Delete a label with 'private' scope", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "parameters": [ + { + "in": "formData", + "name": "user_uid", + "description": "User uid", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "key", + "description": "Label key.", + "type": "string", + "required": true + } + ], + "responses": { + "201": { + "description": "Delete a label with 'private' scope" + } + }, + "tags": [ + "api" + ], + "operationId": "postApiV2BarongManagementLabelsDelete" + } + }, + "/api/v2/barong/management/labels": { + "put": { + "description": "Update a label with 'private' scope", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "parameters": [ + { + "in": "formData", + "name": "user_uid", + "description": "User uid", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "key", + "description": "Label key.", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "value", + "description": "Label value.", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "description", + "description": "Label desc.", + "type": "string", + "required": false + }, + { + "in": "formData", + "name": "replace", + "description": "When true label will be created if not exist", + "type": "boolean", + "default": true, + "required": false + } + ], + "responses": { + "200": { + "description": "Update a label with 'private' scope", + "schema": { + "$ref": "#/definitions/API_V2_Entities_Label" + } + } + }, + "tags": [ + "api" + ], + "operationId": "putApiV2BarongManagementLabels" + }, + "post": { + "description": "Create a label with 'private' scope and assigns to users", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "parameters": [ + { + "in": "formData", + "name": "user_uid", + "description": "User uid", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "key", + "description": "Label key.", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "value", + "description": "Label value.", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "description", + "description": "Label desc.", + "type": "string", + "required": false + } + ], + "responses": { + "201": { + "description": "Create a label with 'private' scope and assigns to users", + "schema": { + "$ref": "#/definitions/API_V2_Entities_Label" + } + } + }, + "tags": [ + "api" + ], + "operationId": "postApiV2BarongManagementLabels" + } + }, + "/api/v2/barong/management/labels/list": { + "post": { + "description": "Get user collection filtered on label attributes", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "parameters": [ + { + "in": "formData", + "name": "user_uid", + "description": "User uid", + "type": "string", + "required": true + } + ], + "responses": { + "201": { + "description": "Get user collection filtered on label attributes", + "schema": { + "$ref": "#/definitions/API_V2_Entities_AdminLabelView" + } + } + }, + "tags": [ + "api" + ], + "operationId": "postApiV2BarongManagementLabelsList" + } + }, + "/api/v2/barong/management/labels/filter/users": { + "post": { + "description": "Get all labels assigned to users", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "parameters": [ + { + "in": "formData", + "name": "key", + "description": "Label key.", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "value", + "description": "Label value.", + "type": "string", + "required": false + }, + { + "in": "formData", + "name": "scope", + "description": "Label scope.", + "type": "string", + "required": false + }, + { + "in": "formData", + "name": "extended", + "description": "When true endpoint returns full information about users", + "type": "boolean", + "required": false + }, + { + "in": "formData", + "name": "range", + "type": "string", + "default": "created", + "required": false + }, + { + "in": "formData", + "name": "page", + "description": "Page number (defaults to 1).", + "type": "integer", + "format": "int32", + "default": 1, + "required": false + }, + { + "in": "formData", + "name": "limit", + "description": "Number of users per page (defaults to 100, maximum is 100).", + "type": "integer", + "format": "int32", + "default": 100, + "minimum": 1, + "maximum": 100, + "required": false + } + ], + "responses": { + "201": { + "description": "Get all labels assigned to users", + "schema": { + "$ref": "#/definitions/API_V2_Entities_User" + } + } + }, + "tags": [ + "api" + ], + "operationId": "postApiV2BarongManagementLabelsFilterUsers" + } + }, + "/api/v2/barong/management/users/import": { + "post": { + "description": "Imports an existing user", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "parameters": [ + { + "in": "formData", + "name": "email", + "description": "User Email", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "password_digest", + "description": "User Password Hash", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "referral_uid", + "description": "Referral uid", + "type": "string", + "required": false + }, + { + "in": "formData", + "name": "phone", + "description": "Phone", + "type": "string", + "required": false + }, + { + "in": "formData", + "name": "first_name", + "description": "First Name", + "type": "string", + "required": false + }, + { + "in": "formData", + "name": "last_name", + "description": "Last Name", + "type": "string", + "required": false + }, + { + "in": "formData", + "name": "dob", + "description": "Birth date", + "type": "string", + "format": "date", + "required": false + }, + { + "in": "formData", + "name": "address", + "description": "Address", + "type": "string", + "required": false + }, + { + "in": "formData", + "name": "postcode", + "description": "Postcode", + "type": "string", + "required": false + }, + { + "in": "formData", + "name": "city", + "description": "City", + "type": "string", + "required": false + }, + { + "in": "formData", + "name": "country", + "description": "Country", + "type": "string", + "required": false + }, + { + "in": "formData", + "name": "state", + "description": "State", + "type": "string", + "required": false + } + ], + "responses": { + "201": { + "description": "Imports an existing user", + "schema": { + "$ref": "#/definitions/API_V2_Management_Entities_UserWithProfile" + } + } + }, + "tags": [ + "api" + ], + "operationId": "postApiV2BarongManagementUsersImport" + } + }, + "/api/v2/barong/management/users/update": { + "post": { + "description": "Updates role and data fields of existing user", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "parameters": [ + { + "in": "formData", + "name": "uid", + "description": "User Uid", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "role", + "description": "User Role", + "type": "string", + "required": false + }, + { + "in": "formData", + "name": "data", + "description": "Any additional key:value pairs in json format", + "type": "string", + "required": false + } + ], + "responses": { + "201": { + "description": "Updates role and data fields of existing user", + "schema": { + "$ref": "#/definitions/API_V2_Management_Entities_UserWithProfile" + } + } + }, + "tags": [ + "api" + ], + "operationId": "postApiV2BarongManagementUsersUpdate" + } + }, + "/api/v2/barong/management/users": { + "post": { + "description": "Creates new user", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "parameters": [ + { + "in": "formData", + "name": "email", + "description": "User Email", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "password", + "description": "User Password", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "referral_uid", + "description": "Referral uid", + "type": "string", + "required": false + } + ], + "responses": { + "201": { + "description": "Creates new user", + "schema": { + "$ref": "#/definitions/API_V2_Management_Entities_UserWithProfile" + } + } + }, + "tags": [ + "api" + ], + "operationId": "postApiV2BarongManagementUsers" + } + }, + "/api/v2/barong/management/users/list": { + "post": { + "description": "Returns array of users as collection", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "parameters": [ + { + "in": "formData", + "name": "extended", + "description": "When true endpoint returns full information about users", + "type": "boolean", + "required": false + }, + { + "in": "formData", + "name": "range", + "type": "string", + "default": "created", + "required": false + }, + { + "in": "formData", + "name": "from", + "description": "An integer represents the seconds elapsed since Unix epoch.If set, only records FROM the time will be retrieved.", + "type": "integer", + "format": "int32", + "required": false + }, + { + "in": "formData", + "name": "to", + "description": "An integer represents the seconds elapsed since Unix epoch.If set, only records BEFORE the time will be retrieved.", + "type": "integer", + "format": "int32", + "required": false + }, + { + "in": "formData", + "name": "page", + "description": "Page number (defaults to 1).", + "type": "integer", + "format": "int32", + "default": 1, + "required": false + }, + { + "in": "formData", + "name": "limit", + "description": "Number of users per page (defaults to 100, maximum is 100).", + "type": "integer", + "format": "int32", + "default": 100, + "minimum": 1, + "maximum": 100, + "required": false + } + ], + "responses": { + "201": { + "description": "Returns array of users as collection", + "schema": { + "$ref": "#/definitions/API_V2_Entities_User" + } + } + }, + "tags": [ + "api" + ], + "operationId": "postApiV2BarongManagementUsersList" + } + }, + "/api/v2/barong/management/users/get": { + "post": { + "description": "Get users and profile information", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "parameters": [ + { + "in": "formData", + "name": "uid", + "description": "User uid", + "type": "string", + "required": false + }, + { + "in": "formData", + "name": "email", + "description": "User email", + "type": "string", + "required": false + }, + { + "in": "formData", + "name": "phone_num", + "description": "User phone number", + "type": "string", + "required": false + } + ], + "responses": { + "201": { + "description": "Get users and profile information", + "schema": { + "$ref": "#/definitions/API_V2_Management_Entities_UserWithKYC" + } + } + }, + "tags": [ + "api" + ], + "operationId": "postApiV2BarongManagementUsersGet" + } + }, + "/api/v2/barong/management/profiles": { + "post": { + "description": "Imports a profile for user", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "parameters": [ + { + "in": "formData", + "name": "uid", + "description": "User Uid", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "first_name", + "description": "First Name", + "type": "string", + "required": false + }, + { + "in": "formData", + "name": "last_name", + "description": "Last Name", + "type": "string", + "required": false + }, + { + "in": "formData", + "name": "dob", + "description": "Birth date", + "type": "string", + "format": "date", + "required": false + }, + { + "in": "formData", + "name": "address", + "description": "Address", + "type": "string", + "required": false + }, + { + "in": "formData", + "name": "postcode", + "description": "Postcode", + "type": "string", + "required": false + }, + { + "in": "formData", + "name": "city", + "description": "City", + "type": "string", + "required": false + }, + { + "in": "formData", + "name": "country", + "description": "Country", + "type": "string", + "required": false + }, + { + "in": "formData", + "name": "state", + "description": "State", + "type": "string", + "required": false + }, + { + "in": "formData", + "name": "metadata", + "description": "Metadata", + "type": "string", + "required": false + } + ], + "responses": { + "201": { + "description": "Imports a profile for user", + "schema": { + "$ref": "#/definitions/API_V2_Management_Entities_UserWithProfile" + } + } + }, + "tags": [ + "api" + ], + "operationId": "postApiV2BarongManagementProfiles" + } + }, + "/api/v2/barong/management/phones/delete": { + "post": { + "description": "Delete phone number for user", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "parameters": [ + { + "in": "formData", + "name": "uid", + "description": "User uid", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "number", + "description": "User phone number", + "type": "string", + "required": true + } + ], + "responses": { + "201": { + "description": "Delete phone number for user", + "schema": { + "$ref": "#/definitions/API_V2_Management_Entities_Phone" + } + } + }, + "tags": [ + "api" + ], + "operationId": "postApiV2BarongManagementPhonesDelete" + } + }, + "/api/v2/barong/management/phones": { + "post": { + "description": "Create phone number for user", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "parameters": [ + { + "in": "formData", + "name": "uid", + "description": "User uid", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "number", + "description": "User phone number", + "type": "string", + "required": true + } + ], + "responses": { + "201": { + "description": "Create phone number for user", + "schema": { + "$ref": "#/definitions/API_V2_Management_Entities_Phone" + } + } + }, + "tags": [ + "api" + ], + "operationId": "postApiV2BarongManagementPhones" + } + }, + "/api/v2/barong/management/phones/get": { + "post": { + "description": "Get user phone numbers", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "parameters": [ + { + "in": "formData", + "name": "uid", + "description": "User uid", + "type": "string", + "required": true + } + ], + "responses": { + "201": { + "description": "Get user phone numbers", + "schema": { + "$ref": "#/definitions/API_V2_Management_Entities_Phone" + } + } + }, + "tags": [ + "api" + ], + "operationId": "postApiV2BarongManagementPhonesGet" + } + }, + "/api/v2/barong/management/otp/sign": { + "post": { + "description": "Sign request with barong signature", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "parameters": [ + { + "in": "formData", + "name": "user_uid", + "description": "Account UID", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "otp_code", + "description": "Code from Google Authenticator", + "type": "string", + "required": true + } + ], + "responses": { + "201": { + "description": "Sign request with barong signature" + } + }, + "tags": [ + "api" + ], + "operationId": "postApiV2BarongManagementOtpSign" + } + }, + "/api/v2/barong/management/documents": { + "post": { + "description": "Push documents to barong DB", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "parameters": [ + { + "in": "formData", + "name": "uid", + "description": "User uid", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "doc_type", + "description": "Document type", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "doc_number", + "description": "Document number", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "filename", + "description": "Document name", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "file_ext", + "description": "Document file extension", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "upload", + "description": "Base64 encoded document", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "doc_expire", + "description": "Document expiration date", + "type": "string", + "format": "date", + "required": false + }, + { + "in": "formData", + "name": "update_labels", + "description": "If set to false, user label will not be created/updated", + "type": "boolean", + "default": true, + "required": false + }, + { + "in": "formData", + "name": "metadata", + "description": "Any additional key: value pairs in json string format", + "type": "string", + "required": false + } + ], + "responses": { + "201": { + "description": "Push documents to barong DB" + } + }, + "tags": [ + "api" + ], + "operationId": "postApiV2BarongManagementDocuments" + } + }, + "/api/v2/barong/management/service_accounts/delete": { + "post": { + "description": "Delete specific service_account", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "parameters": [ + { + "in": "formData", + "name": "uid", + "description": "service_account uid", + "type": "string", + "required": true + } + ], + "responses": { + "201": { + "description": "Delete specific service_account", + "schema": { + "$ref": "#/definitions/API_V2_Entities_ServiceAccounts" + } + } + }, + "tags": [ + "api" + ], + "operationId": "postApiV2BarongManagementServiceAccountsDelete" + } + }, + "/api/v2/barong/management/service_accounts/create": { + "post": { + "description": "Create service_account", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "parameters": [ + { + "in": "formData", + "name": "owner_uid", + "description": "owner uid", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "service_account_role", + "description": "service_account role", + "type": "string", + "required": true + }, + { + "in": "formData", + "name": "service_account_uid", + "description": "service_account uid", + "type": "string", + "required": false + }, + { + "in": "formData", + "name": "service_account_email", + "description": "service_account email", + "type": "string", + "required": false + } + ], + "responses": { + "201": { + "description": "Create service_account", + "schema": { + "$ref": "#/definitions/API_V2_Entities_ServiceAccounts" + } + } + }, + "tags": [ + "api" + ], + "operationId": "postApiV2BarongManagementServiceAccountsCreate" + } + }, + "/api/v2/barong/management/service_accounts/list": { + "post": { + "description": "Get service_accounts as a paginated collection", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "parameters": [ + { + "in": "formData", + "name": "page", + "description": "Page number (defaults to 1).", + "type": "integer", + "format": "int32", + "default": 1, + "required": false + }, + { + "in": "formData", + "name": "limit", + "description": "Number of users per page (defaults to 100, maximum is 100).", + "type": "integer", + "format": "int32", + "default": 100, + "minimum": 1, + "maximum": 100, + "required": false + }, + { + "in": "formData", + "name": "owner_uid", + "description": "owner uid", + "type": "string", + "required": false + }, + { + "in": "formData", + "name": "owner_email", + "description": "owner email", + "type": "string", + "required": false + } + ], + "responses": { + "201": { + "description": "Get service_accounts as a paginated collection", + "schema": { + "$ref": "#/definitions/API_V2_Entities_ServiceAccounts" + } + } + }, + "tags": [ + "api" + ], + "operationId": "postApiV2BarongManagementServiceAccountsList" + } + }, + "/api/v2/barong/management/service_accounts/get": { + "post": { + "description": "Get specific service_account information", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "parameters": [ + { + "in": "formData", + "name": "uid", + "description": "service_account uid", + "type": "string", + "required": false + }, + { + "in": "formData", + "name": "email", + "description": "service_account email", + "type": "string", + "required": false + } + ], + "responses": { + "201": { + "description": "Get specific service_account information", + "schema": { + "$ref": "#/definitions/API_V2_Entities_ServiceAccounts" + } + } + }, + "tags": [ + "api" + ], + "operationId": "postApiV2BarongManagementServiceAccountsGet" + } + }, + "/api/v2/barong/management/timestamp": { + "post": { + "description": "Returns server time in seconds since Unix epoch.", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "responses": { + "201": { + "description": "Returns server time in seconds since Unix epoch." + } + }, + "tags": [ + "api" + ], + "operationId": "postApiV2BarongManagementTimestamp" + } + } + }, + "definitions": { + "API_V2_Entities_Label": { + "type": "object", + "properties": { + "key": { + "type": "string", + "description": "Label key. [a-z0-9_-]+ should be used. Min - 3, max - 255 characters." + }, + "value": { + "type": "string", + "description": "Label value. [A-Za-z0-9_-] should be used. Min - 3, max - 255 characters." + }, + "scope": { + "type": "string", + "description": "Label scope: 'public' or 'private'" + }, + "created_at": { + "type": "string" + }, + "updated_at": { + "type": "string" + } + }, + "description": "Create a label with 'private' scope and assigns to users" + }, + "API_V2_Entities_AdminLabelView": { + "type": "object", + "properties": { + "key": { + "type": "string", + "description": "Label key. [a-z0-9_-]+ should be used. Min - 3, max - 255 characters." + }, + "value": { + "type": "string", + "description": "Label value. [A-Za-z0-9_-] should be used. Min - 3, max - 255 characters." + }, + "scope": { + "type": "string", + "description": "Label scope: 'public' or 'private'" + }, + "description": { + "type": "string", + "description": "Label desc: json string with any additional information" + }, + "created_at": { + "type": "string" + }, + "updated_at": { + "type": "string" + } + }, + "description": "Get user collection filtered on label attributes" + }, + "API_V2_Entities_User": { + "type": "object", + "properties": { + "email": { + "type": "string", + "description": "User Email" + }, + "uid": { + "type": "string", + "description": "User UID" + }, + "role": { + "type": "string", + "description": "User role" + }, + "level": { + "type": "integer", + "format": "int32", + "description": "User level" + }, + "otp": { + "type": "boolean", + "description": "is 2FA enabled for account" + }, + "state": { + "type": "string", + "description": "User state: active, pending, inactive" + }, + "referral_uid": { + "type": "string", + "description": "UID of referrer" + }, + "data": { + "type": "string", + "description": "Additional phone and profile info" + } + }, + "description": "Returns array of users as collection" + }, + "API_V2_Management_Entities_UserWithProfile": { + "type": "object", + "properties": { + "email": { + "type": "string", + "description": "User Email" + }, + "uid": { + "type": "string", + "description": "User UID" + }, + "role": { + "type": "string", + "description": "User role" + }, + "level": { + "type": "integer", + "format": "int32", + "description": "User level" + }, + "otp": { + "type": "boolean", + "description": "is 2FA enabled for account" + }, + "state": { + "type": "string", + "description": "User state: active, pending, inactive" + }, + "referral_uid": { + "type": "string", + "description": "UID of referrer" + }, + "data": { + "type": "string", + "description": "Additional phone and profile info" + }, + "profiles": { + "$ref": "#/definitions/API_V2_Management_Entities_Profile" + }, + "created_at": { + "type": "string" + }, + "updated_at": { + "type": "string" + } + }, + "description": "Imports a profile for user" + }, + "API_V2_Management_Entities_Profile": { + "type": "object", + "properties": { + "first_name": { + "type": "string", + "description": "First Name" + }, + "last_name": { + "type": "string", + "description": "Last name" + }, + "dob": { + "type": "string", + "format": "date", + "description": "Birth date" + }, + "address": { + "type": "string", + "description": "Address" + }, + "postcode": { + "type": "string", + "description": "Address Postcode" + }, + "city": { + "type": "string", + "description": "City name" + }, + "country": { + "type": "string", + "description": "Country name" + }, + "state": { + "type": "string", + "description": "Profile state: drafted, submitted, verified, rejected" + }, + "metadata": { + "type": "object", + "description": "Profile additional fields" + }, + "created_at": { + "type": "string" + }, + "updated_at": { + "type": "string" + } + } + }, + "API_V2_Management_Entities_UserWithKYC": { + "type": "object", + "properties": { + "email": { + "type": "string", + "description": "User Email" + }, + "uid": { + "type": "string", + "description": "User UID" + }, + "role": { + "type": "string", + "description": "User role" + }, + "level": { + "type": "integer", + "format": "int32", + "description": "User level" + }, + "otp": { + "type": "boolean", + "description": "is 2FA enabled for account" + }, + "state": { + "type": "string", + "description": "User state: active, pending, inactive" + }, + "referral_uid": { + "type": "string", + "description": "UID of referrer" + }, + "data": { + "type": "string", + "description": "Additional phone and profile info" + }, + "profiles": { + "$ref": "#/definitions/API_V2_Management_Entities_Profile" + }, + "labels": { + "$ref": "#/definitions/API_V2_Entities_AdminLabelView" + }, + "phones": { + "$ref": "#/definitions/API_V2_Management_Entities_Phone" + }, + "documents": { + "$ref": "#/definitions/API_V2_Management_Entities_Document" + }, + "data_storages": { + "$ref": "#/definitions/API_V2_Entities_DataStorage" + }, + "comments": { + "$ref": "#/definitions/API_V2_Entities_Comment" + }, + "created_at": { + "type": "string" + }, + "updated_at": { + "type": "string" + } + }, + "description": "Get users and profile information" + }, + "API_V2_Management_Entities_Phone": { + "type": "object", + "properties": { + "country": { + "type": "string", + "description": "Phone country" + }, + "number": { + "type": "string", + "description": "Phone Number" + }, + "validated_at": { + "type": "s", + "format": "g", + "description": "Phone validation date" + } + }, + "description": "Get user phone numbers" + }, + "API_V2_Management_Entities_Document": { + "type": "object", + "properties": { + "upload": { + "type": "string", + "description": "File url" + }, + "doc_type": { + "type": "string", + "description": "Document type: passport, driver license, utility bill, identity card, institutional, address, residental" + }, + "doc_number": { + "type": "string", + "description": "Document number: AB123123 type" + }, + "doc_expire": { + "type": "string", + "description": "Expire date of uploaded documents" + }, + "metadata": { + "type": "string", + "description": "Any additional stored data" + }, + "created_at": { + "type": "string" + }, + "updated_at": { + "type": "string" + } + } + }, + "API_V2_Entities_DataStorage": { + "type": "object", + "properties": { + "title": { + "type": "string", + "description": "Any additional data title" + }, + "data": { + "type": "string", + "description": "Any additional data json key:value pairs" + }, + "created_at": { + "type": "string" + }, + "updated_at": { + "type": "string" + } + } + }, + "API_V2_Entities_Comment": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32", + "description": "Comment id" + }, + "author_uid": { + "type": "string", + "description": "Comment author UID" + }, + "title": { + "type": "string", + "description": "Comment title" + }, + "data": { + "type": "string", + "description": "Comment plain text" + }, + "created_at": { + "type": "string" + }, + "updated_at": { + "type": "string" + } + } + }, + "API_V2_Entities_ServiceAccounts": { + "type": "object", + "properties": { + "email": { + "type": "string", + "description": "User Email" + }, + "uid": { + "type": "string", + "description": "User UID" + }, + "role": { + "type": "string", + "description": "Service Account Role" + }, + "level": { + "type": "integer", + "format": "int32", + "description": "User Level" + }, + "state": { + "type": "string", + "description": "Service Account State: active, disabled" + }, + "user": { + "$ref": "#/definitions/API_V2_Entities_User" + }, + "created_at": { + "type": "string" + }, + "updated_at": { + "type": "string" + } + }, + "description": "Get specific service_account information" + }, + "API_V2_Entities_APIKey": { + "type": "object", + "properties": { + "kid": { + "type": "string", + "description": "JWT public key" + }, + "algorithm": { + "type": "string", + "description": "Cryptographic hash function type" + }, + "scope": { + "type": "string", + "description": "Serialized array of scopes" + }, + "state": { + "type": "string", + "description": "active/non-active state of key" + }, + "secret": { + "type": "string", + "description": "Api key secret" + }, + "created_at": { + "type": "string" + }, + "updated_at": { + "type": "string" + } + } + }, + "API_V2_Entities_UserWithFullInfo": { + "type": "object", + "properties": { + "email": { + "type": "string", + "description": "User Email" + }, + "uid": { + "type": "string", + "description": "User UID" + }, + "role": { + "type": "string", + "description": "User role" + }, + "level": { + "type": "integer", + "format": "int32", + "description": "User level" + }, + "otp": { + "type": "boolean", + "description": "is 2FA enabled for account" + }, + "state": { + "type": "string", + "description": "User state: active, pending, inactive" + }, + "referral_uid": { + "type": "string", + "description": "UID of referrer" + }, + "data": { + "type": "string", + "description": "Additional phone and profile info" + }, + "csrf_token": { + "type": "string", + "description": "Сsrf protection token" + }, + "labels": { + "$ref": "#/definitions/API_V2_Entities_Label" + }, + "phones": { + "$ref": "#/definitions/API_V2_Entities_Phone" + }, + "profiles": { + "$ref": "#/definitions/API_V2_Entities_Profile" + }, + "data_storages": { + "$ref": "#/definitions/API_V2_Entities_DataStorage" + }, + "created_at": { + "type": "string" + }, + "updated_at": { + "type": "string" + } + } + }, + "API_V2_Entities_Phone": { + "type": "object", + "properties": { + "country": { + "type": "string", + "description": "Phone country" + }, + "number": { + "type": "string", + "description": "Submasked phone number" + }, + "validated_at": { + "type": "s", + "format": "g", + "description": "Phone validation date" + } + } + }, + "API_V2_Entities_Profile": { + "type": "object", + "properties": { + "first_name": { + "type": "string", + "description": "First Name" + }, + "last_name": { + "type": "string", + "description": "Submasked last name" + }, + "dob": { + "type": "string", + "format": "date", + "description": "Submasked birth date" + }, + "address": { + "type": "string", + "description": "Address" + }, + "postcode": { + "type": "string", + "description": "Address Postcode" + }, + "city": { + "type": "string", + "description": "City name" + }, + "country": { + "type": "string", + "description": "Country name" + }, + "state": { + "type": "string", + "description": "Profile state: drafted, submitted, verified, rejected" + }, + "metadata": { + "type": "object", + "description": "Profile additional fields" + }, + "created_at": { + "type": "string" + }, + "updated_at": { + "type": "string" + } + } + } + } +} diff --git a/docs/api/swagger/user_api.json b/docs/api/swagger/user_api.json new file mode 100644 index 0000000..7410860 --- /dev/null +++ b/docs/api/swagger/user_api.json @@ -0,0 +1 @@ +{"info":{"title":"Barong","description":"RESTful API for barong OAuth server","version":"2.7.0"},"swagger":"2.0","produces":["application/json"],"host":"www.alvand.local","basePath":"/api/v2/barong","tags":[{"name":"api","description":"Operations about apis"}],"paths":{"/api/v2/barong/identity/users/password/reset":{"post":{"description":"Sets new account password(for forgot password)","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"formData","name":"email","description":"user email","type":"string","required":true},{"in":"formData","name":"code","description":"code from email again","type":"string","required":true},{"in":"formData","name":"password","description":"User new password","type":"string","required":true},{"in":"formData","name":"confirm_password","description":"User new password","type":"string","required":true}],"responses":{"201":{"description":"Resets password"},"400":{"description":"Required params are empty"},"404":{"description":"Record is not found"},"422":{"description":"Validation errors"}},"tags":["api"],"operationId":"postApiV2BarongIdentityUsersPasswordReset"}},"/api/v2/barong/identity/users/password/confirm_code":{"post":{"description":"Just check confirm code for reset password(check authorization for forget password)","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"formData","name":"email","description":"Account email","type":"string","required":true},{"in":"formData","name":"code","description":"Confirm code","type":"string","required":true},{"in":"formData","name":"captcha_response","description":"Response from captcha widget","type":"string","required":false}],"responses":{"201":{"description":"reset code is ok"},"400":{"description":"Required params are missing"},"422":{"description":"Validation errors"},"404":{"description":"User doesn't exist"}},"tags":["api"],"operationId":"postApiV2BarongIdentityUsersPasswordConfirmCode"}},"/api/v2/barong/identity/users/password/generate_code":{"post":{"description":"Send password reset instructions(forget password)","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"formData","name":"email","description":"Account email","type":"string","required":true},{"in":"formData","name":"captcha_response","description":"Response from captcha widget","type":"string","required":false}],"responses":{"201":{"description":"Generated password reset code"},"400":{"description":"Required params are missing"},"422":{"description":"Validation errors"},"404":{"description":"User doesn't exist"}},"tags":["api"],"operationId":"postApiV2BarongIdentityUsersPasswordGenerateCode"}},"/api/v2/barong/identity/users/email/confirm_email":{"post":{"description":"Confirms an account by Authorization code (verify user email and achieve first label)","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"formData","name":"code","description":"Code from email","type":"string","required":true},{"in":"formData","name":"email","description":"user email","type":"string","required":true}],"responses":{"201":{"description":"Confirms an account by Authorization code (verify user email and achieve first label)","schema":{"$ref":"#/definitions/API_V2_Entities_UserWithFullInfo"}},"400":{"description":"Required code are missing"},"422":{"description":"Validation errors"}},"tags":["api"],"operationId":"postApiV2BarongIdentityUsersEmailConfirmEmail"}},"/api/v2/barong/identity/users/email/generate_email_code":{"post":{"description":"Send confirmations instructions (code in email)","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"formData","name":"email","description":"Account email","type":"string","required":true},{"in":"formData","name":"captcha_response","description":"Response from captcha widget","type":"string","required":false}],"responses":{"201":{"description":"Generated verification code"},"400":{"description":"Required params are missing"},"422":{"description":"Validation errors"}},"tags":["api"],"operationId":"postApiV2BarongIdentityUsersEmailGenerateEmailCode"}},"/api/v2/barong/identity/users/register_geetest":{"get":{"description":"Register Geetest captcha","produces":["application/json"],"responses":{"200":{"description":"Register Geetest captcha"}},"tags":["api"],"operationId":"getApiV2BarongIdentityUsersRegisterGeetest"}},"/api/v2/barong/identity/users":{"post":{"description":"Creates new user (sign up)","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"formData","name":"email","description":"User Email","type":"string","required":true},{"in":"formData","name":"password","description":"User Password","type":"string","required":true},{"in":"formData","name":"refid","description":"Referral uid","type":"string","required":false},{"in":"formData","name":"captcha_response","description":"Response from captcha widget","type":"string","required":false},{"in":"formData","name":"data","description":"Any additional key: value pairs in json string format","type":"string","required":false}],"responses":{"201":{"description":"Creates new user (sign up)","schema":{"$ref":"#/definitions/API_V2_Entities_UserWithFullInfo"}},"400":{"description":"Required params are missing"},"422":{"description":"Validation errors"}},"tags":["api"],"operationId":"postApiV2BarongIdentityUsers"}},"/api/v2/barong/identity/users/access":{"post":{"description":"Creates new whitelist restriction","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"formData","name":"whitelink_token","type":"string","required":true}],"responses":{"200":{"description":"Whitelist restriction was created"},"400":{"description":"Required params are missing"},"422":{"description":"Validation errors"}},"tags":["api"],"operationId":"postApiV2BarongIdentityUsersAccess"}},"/api/v2/barong/identity/sessions/resend":{"post":{"description":"Resend confirmations code(authorization code)","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"formData","name":"data","description":"Account email or Telephone number","type":"string","required":true},{"in":"formData","name":"action","description":"for what need auth code","type":"string","required":true},{"in":"formData","name":"channel","description":"channel that send in","type":"string","default":"email","required":false},{"in":"formData","name":"captcha_response","description":"Response from captcha widget","type":"string","required":false}],"responses":{"201":{"description":"Generated verification code"},"400":{"description":"Required params are missing"},"422":{"description":"Validation errors"}},"tags":["api"],"operationId":"postApiV2BarongIdentitySessionsResend"}},"/api/v2/barong/identity/sessions/auth0":{"post":{"description":"Auth0 authentication by id_token","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"formData","name":"id_token","description":"ID Token","type":"string","required":true}],"responses":{"200":{"description":"User authenticated"},"400":{"description":"Required params are empty"},"404":{"description":"Record is not found"}},"tags":["api"],"operationId":"postApiV2BarongIdentitySessionsAuth0"}},"/api/v2/barong/identity/sessions":{"delete":{"description":"Destroy current session for LogOut","produces":["application/json"],"responses":{"204":{"description":"Session was destroyed"},"400":{"description":"Required params are empty"},"404":{"description":"Record is not found"}},"tags":["api"],"operationId":"deleteApiV2BarongIdentitySessions"},"post":{"description":"Start a new session for every LogIn","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"formData","name":"email","type":"string","required":true},{"in":"formData","name":"password","type":"string","required":true},{"in":"formData","name":"captcha_response","description":"Response from captcha widget","type":"string","required":false},{"in":"formData","name":"otp_code","description":"Code from Google Authenticator","type":"string","required":false}],"responses":{"201":{"description":"Start a new session for every LogIn"},"400":{"description":"Required params are empty"},"404":{"description":"Record is not found"}},"tags":["api"],"operationId":"postApiV2BarongIdentitySessions"}},"/api/v2/barong/identity/configs":{"get":{"description":"Get barong configurations","produces":["application/json"],"responses":{"200":{"description":"Get barong configurations"}},"tags":["api"],"operationId":"getApiV2BarongIdentityConfigs"}},"/api/v2/barong/identity/version":{"get":{"description":"Get barong version","produces":["application/json"],"responses":{"200":{"description":"Get barong version"}},"tags":["api"],"operationId":"getApiV2BarongIdentityVersion"}},"/api/v2/barong/identity/time":{"get":{"description":"Get server current unix timestamp.","produces":["application/json"],"responses":{"200":{"description":"Get server current unix timestamp."}},"tags":["api"],"operationId":"getApiV2BarongIdentityTime"}},"/api/v2/barong/identity/ping":{"get":{"description":"Test connectivity","produces":["application/json"],"responses":{"200":{"description":"Test connectivity"}},"tags":["api"],"operationId":"getApiV2BarongIdentityPing"}},"/api/v2/barong/identity/password/validate":{"post":{"description":"Password strength testing","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"formData","name":"password","description":"User password","type":"string","required":true}],"responses":{"201":{"description":"Password strength testing"}},"tags":["api"],"operationId":"postApiV2BarongIdentityPasswordValidate"}},"/api/v2/barong/resource/swagger_doc/{name}":{"get":{"description":"Swagger compatible API description for specific API","produces":["application/json"],"parameters":[{"in":"path","name":"name","description":"Resource name of mounted API","type":"string","required":true},{"in":"query","name":"locale","description":"Locale of API documentation","type":"string","required":false}],"responses":{"200":{"description":"Swagger compatible API description for specific API"}},"tags":["api"],"operationId":"getApiV2BarongResourceSwaggerDocName"}},"/api/v2/barong/resource/swagger_doc":{"get":{"description":"Swagger compatible API description","produces":["application/json"],"responses":{"200":{"description":"Swagger compatible API description"}},"tags":["api"],"operationId":"getApiV2BarongResourceSwaggerDoc"}},"/api/v2/barong/resource/service_accounts/api_keys/{kid}":{"put":{"description":"Updates an api key","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"formData","name":"service_account_uid","type":"string","required":true},{"in":"path","name":"kid","description":"Service account kid","type":"string","required":true},{"in":"formData","name":"scope","description":"Comma separated scopes","type":"string","required":false},{"in":"formData","name":"state","description":"State of API Key. \"active\" state means key is active and can be used for auth","type":"string","required":false},{"in":"formData","name":"totp_code","description":"Code from Google Authenticator","type":"string","required":true}],"responses":{"200":{"description":"Updates an api key","schema":{"$ref":"#/definitions/API_V2_Entities_APIKey"}},"400":{"description":"Required params are empty"},"401":{"description":"Invalid bearer token"},"404":{"description":"Record is not found"},"422":{"description":"Validation errors"}},"tags":["api"],"operationId":"putApiV2BarongResourceServiceAccountsApiKeysKid"},"delete":{"description":"Delete an api key for specific service account","produces":["application/json"],"parameters":[{"in":"query","name":"service_account_uid","type":"string","required":true},{"in":"path","name":"kid","description":"Service account kid","type":"string","required":true},{"in":"query","name":"totp_code","description":"Code from Google Authenticator","type":"string","required":true}],"responses":{"204":{"description":"Succefully deleted"},"400":{"description":"Required params are empty"},"401":{"description":"Invalid bearer token"},"404":{"description":"Record is not found"}},"tags":["api"],"operationId":"deleteApiV2BarongResourceServiceAccountsApiKeysKid"}},"/api/v2/barong/resource/service_accounts/api_keys":{"post":{"description":"Create api key for specific service account.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"formData","name":"service_account_uid","type":"string","required":true},{"in":"formData","name":"algorithm","description":"Service account algorithm","type":"string","required":true},{"in":"formData","name":"scope","description":"Comma separated scopes","type":"string","required":false},{"in":"formData","name":"totp_code","description":"Code from Google Authenticator","type":"string","required":true}],"responses":{"201":{"description":"Create api key for specific service account.","schema":{"$ref":"#/definitions/API_V2_Entities_APIKey"}},"400":{"description":"Require 2FA and totp code"},"401":{"description":"Invalid bearer token"}},"tags":["api"],"operationId":"postApiV2BarongResourceServiceAccountsApiKeys"},"get":{"description":"List all api keys for specific service account.","produces":["application/json"],"parameters":[{"in":"query","name":"ordering","description":"If set, returned values will be sorted in specific order, defaults to 'asc'.","type":"string","default":"asc","required":false},{"in":"query","name":"order_by","description":"Name of the field, which result will be ordered by.","type":"string","default":"id","required":false},{"in":"query","name":"page","description":"Page number (defaults to 1).","type":"integer","format":"int32","default":1,"required":false},{"in":"query","name":"limit","description":"Number of users per page (defaults to 100, maximum is 100).","type":"integer","format":"int32","default":100,"minimum":1,"maximum":100,"required":false},{"in":"query","name":"service_account_uid","type":"string","required":true}],"responses":{"200":{"description":"List all api keys for specific service account.","schema":{"$ref":"#/definitions/API_V2_Entities_APIKey"}},"400":{"description":"Require 2FA and totp code"},"401":{"description":"Invalid bearer token"}},"tags":["api"],"operationId":"getApiV2BarongResourceServiceAccountsApiKeys"}},"/api/v2/barong/resource/service_accounts":{"get":{"description":"List all service accounts for current user.","produces":["application/json"],"security":[{"BearerToken":[]}],"responses":{"200":{"description":"List all service accounts for current user."},"400":{"description":"Require 2FA and totp code"},"401":{"description":"Invalid bearer token"}},"tags":["api"],"operationId":"getApiV2BarongResourceServiceAccounts"}},"/api/v2/barong/resource/data_storage":{"post":{"description":"Create data storage","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"formData","name":"title","description":"Storage title","type":"string","required":true},{"in":"formData","name":"data","description":"Storage data","type":"string","required":true}],"responses":{"201":{"description":"Data Storage was created"},"401":{"description":"Invalid bearer token"},"422":{"description":"Validation errors"}},"tags":["api"],"operationId":"postApiV2BarongResourceDataStorage"}},"/api/v2/barong/resource/api_keys":{"get":{"description":"List all api keys for current account.","produces":["application/json"],"parameters":[{"in":"query","name":"ordering","description":"If set, returned values will be sorted in specific order, defaults to 'asc'.","type":"string","default":"asc","required":false},{"in":"query","name":"order_by","description":"Name of the field, which result will be ordered by.","type":"string","default":"id","required":false},{"in":"query","name":"page","description":"Page number (defaults to 1).","type":"integer","format":"int32","default":1,"required":false},{"in":"query","name":"limit","description":"Number of users per page (defaults to 100, maximum is 100).","type":"integer","format":"int32","default":100,"minimum":1,"maximum":100,"required":false}],"responses":{"200":{"description":"List all api keys for current account.","schema":{"$ref":"#/definitions/API_V2_Entities_APIKey"}},"400":{"description":"Require 2FA and totp code"},"401":{"description":"Invalid bearer token"}},"tags":["api"],"operationId":"getApiV2BarongResourceApiKeys"},"post":{"description":"Create an api key","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"formData","name":"algorithm","description":"API key algorithm","type":"string","required":true},{"in":"formData","name":"scope","description":"Comma separated scopes","type":"string","required":false},{"in":"formData","name":"totp_code","description":"Code from Google Authenticator","type":"string","required":true}],"responses":{"201":{"description":"Create an api key","schema":{"$ref":"#/definitions/API_V2_Entities_APIKey"}},"400":{"description":"Required params are empty"},"401":{"description":"Invalid bearer token"},"422":{"description":"Validation errors"}},"tags":["api"],"operationId":"postApiV2BarongResourceApiKeys"}},"/api/v2/barong/resource/api_keys/{kid}":{"delete":{"description":"Delete an api key","produces":["application/json"],"parameters":[{"in":"path","name":"kid","description":"API key kid","type":"string","required":true},{"in":"query","name":"totp_code","description":"Code from Google Authenticator","type":"string","required":true}],"responses":{"204":{"description":"Succefully deleted"},"400":{"description":"Required params are empty"},"401":{"description":"Invalid bearer token"},"404":{"description":"Record is not found"}},"tags":["api"],"operationId":"deleteApiV2BarongResourceApiKeysKid"},"patch":{"description":"Updates an api key","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"path","name":"kid","description":"API key kid","type":"string","required":true},{"in":"formData","name":"scope","description":"Comma separated scopes","type":"string","required":false},{"in":"formData","name":"state","description":"State of API Key. \"active\" state means key is active and can be used for auth","type":"string","required":false},{"in":"formData","name":"totp_code","description":"Code from Google Authenticator","type":"string","required":true}],"responses":{"200":{"description":"Updates an api key","schema":{"$ref":"#/definitions/API_V2_Entities_APIKey"}},"400":{"description":"Required params are empty"},"401":{"description":"Invalid bearer token"},"404":{"description":"Record is not found"},"422":{"description":"Validation errors"}},"tags":["api"],"operationId":"patchApiV2BarongResourceApiKeysKid"}},"/api/v2/barong/resource/otp/verify":{"post":{"description":"Verify 2FA code(for checking 2fa)","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"formData","name":"code","description":"Code from Google Authenticator","type":"string","required":true}],"responses":{"200":{"description":"2FA was verified"},"400":{"description":"2FA has not been enabled for this account or code is missing"},"401":{"description":"Invalid bearer token"},"422":{"description":"Validation errors"}},"tags":["api"],"operationId":"postApiV2BarongResourceOtpVerify"}},"/api/v2/barong/resource/otp/disable_email":{"post":{"description":"enter authorization code that send by email (second step for disabling 2FA)","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"formData","name":"code","description":"Code from Google Authenticator","type":"string","required":true}],"responses":{"200":{"description":"2FA was disabled"},"400":{"description":"2FA has been enabled for this account or code is missing"},"401":{"description":"Invalid bearer token"},"422":{"description":"Validation errors"}},"tags":["api"],"operationId":"postApiV2BarongResourceOtpDisableEmail"}},"/api/v2/barong/resource/otp/disable":{"post":{"description":"Disable 2FA request and send authorization code(first step disabling)","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"formData","name":"code","description":"Code from Google Authenticator","type":"string","required":true}],"responses":{"200":{"description":"2FA was disabled"},"400":{"description":"2FA has not been enabled for this account or code is missing"},"401":{"description":"Invalid bearer token"},"422":{"description":"Validation errors"}},"tags":["api"],"operationId":"postApiV2BarongResourceOtpDisable"}},"/api/v2/barong/resource/otp/enable_2fa":{"post":{"description":"enter authorization key and enable 2fa(third step for enabling)","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"formData","name":"code","description":"Code from email","type":"string","required":true}],"responses":{"200":{"description":"2FA was enabled"},"400":{"description":"2FA has been enabled for this account or code is missing"},"401":{"description":"Invalid bearer token"},"422":{"description":"Validation errors"}},"tags":["api"],"operationId":"postApiV2BarongResourceOtpEnable2fa"}},"/api/v2/barong/resource/otp/enable":{"post":{"description":"enter google authenticator code and send authorization code by email(second step for enabling)","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"formData","name":"code","description":"Code from Google Authenticator","type":"string","required":true}],"responses":{"200":{"description":"2FA was enabled"},"400":{"description":"2FA has been enabled for this account or code is missing"},"401":{"description":"Invalid bearer token"},"422":{"description":"Validation errors"}},"tags":["api"],"operationId":"postApiV2BarongResourceOtpEnable"}},"/api/v2/barong/resource/otp/generate_qrcode":{"post":{"description":"Generate qr code for 2FA (first step for enabling)","produces":["application/json"],"consumes":["application/json"],"responses":{"200":{"description":"QR code was generated"},"400":{"description":"2FA has been enabled for this account"},"401":{"description":"Invalid bearer token"}},"tags":["api"],"operationId":"postApiV2BarongResourceOtpGenerateQrcode"}},"/api/v2/barong/resource/phones/verify":{"post":{"description":"Verify a phone (enter code and verify number)","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"formData","name":"phone_number","description":"Phone number with country code(in iran with +98)","type":"string","required":true},{"in":"formData","name":"verification_code","description":"Verification code from call","type":"string","required":true}],"responses":{"201":{"description":"Verify a phone (enter code and verify number)","schema":{"$ref":"#/definitions/API_V2_Entities_UserWithFullInfo"}},"400":{"description":"Required params are empty"},"401":{"description":"Invalid bearer token"},"404":{"description":"Record is not found"}},"tags":["api"],"operationId":"postApiV2BarongResourcePhonesVerify"}},"/api/v2/barong/resource/phones/send_code":{"post":{"description":"Resend activation code in call","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"formData","name":"phone_number","description":"Phone number with country code","type":"string","required":true},{"in":"formData","name":"channel","description":"The verification method to use","type":"string","default":"call","enum":["call","sms"],"required":false}],"responses":{"200":{"description":"Activation code was resend"},"400":{"description":"Required params are empty"},"401":{"description":"Invalid bearer token"},"404":{"description":"Record is not found"},"422":{"description":"Validation errors"}},"tags":["api"],"operationId":"postApiV2BarongResourcePhonesSendCode"}},"/api/v2/barong/resource/phones":{"post":{"description":"Add new phone","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"formData","name":"phone_number","description":"Phone number with country code(in iran +98)","type":"string","required":true},{"in":"formData","name":"channel","description":"The verification method to use","type":"string","default":"call","enum":["call","sms"],"required":false}],"responses":{"200":{"description":"New phone was added"},"400":{"description":"Required params are empty"},"401":{"description":"Invalid bearer token"},"404":{"description":"Record is not found"},"422":{"description":"Validation errors"}},"tags":["api"],"operationId":"postApiV2BarongResourcePhones"}},"/api/v2/barong/resource/mobiles/verify":{"post":{"description":"Verify a mobile(enter code and verify number)","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"formData","name":"phone_number","description":"phone number with country code(in iran with +98)","type":"string","required":true},{"in":"formData","name":"verification_code","description":"Verification code from sms(this param is for legacy structure must be sms)","type":"string","required":true}],"responses":{"201":{"description":"Verify a mobile(enter code and verify number)","schema":{"$ref":"#/definitions/API_V2_Entities_UserWithFullInfo"}},"400":{"description":"Required params are empty"},"401":{"description":"Invalid bearer token"},"404":{"description":"Record is not found"}},"tags":["api"],"operationId":"postApiV2BarongResourceMobilesVerify"}},"/api/v2/barong/resource/mobiles/send_code":{"post":{"description":"Resend activation code for mobile sms","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"formData","name":"phone_number","description":"Phone number with country code( in iran +98 )","type":"string","required":true},{"in":"formData","name":"channel","description":"The verification method to use(this param is for legacy structure must be sms)","type":"string","default":"sms","enum":["call","sms"],"required":false}],"responses":{"200":{"description":"Activation code was resend"},"400":{"description":"Required params are empty"},"401":{"description":"Invalid bearer token"},"404":{"description":"Record is not found"},"422":{"description":"Validation errors"}},"tags":["api"],"operationId":"postApiV2BarongResourceMobilesSendCode"}},"/api/v2/barong/resource/mobiles":{"post":{"description":"Add new mobile","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"formData","name":"phone_number","description":"Phone number with country code(in iran +98)","type":"string","required":true},{"in":"formData","name":"channel","description":"The verification method to use(this param is for legacy structure must be sms)","type":"string","default":"sms","enum":["call","sms"],"required":false}],"responses":{"200":{"description":"New phone was added"},"400":{"description":"Required params are empty"},"401":{"description":"Invalid bearer token"},"404":{"description":"Record is not found"},"422":{"description":"Validation errors"}},"tags":["api"],"operationId":"postApiV2BarongResourceMobiles"},"get":{"description":"Returns list of user's phones","produces":["application/json"],"responses":{"200":{"description":"Returns list of user's phones","schema":{"$ref":"#/definitions/API_V2_Entities_Phone"}},"401":{"description":"Invalid bearer token"}},"tags":["api"],"operationId":"getApiV2BarongResourceMobiles"}},"/api/v2/barong/resource/documents":{"post":{"description":"Upload a new document for current user","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"formData","name":"doc_type","description":"Document type","type":"string","required":true},{"in":"formData","name":"doc_number","description":"Document number","type":"string","required":true},{"in":"formData","name":"upload","description":"Array of Rack::Multipart::UploadedFile","type":"string","required":true},{"in":"formData","name":"doc_expire","description":"Document expiration date","type":"string","format":"date","required":false},{"in":"formData","name":"doc_category","description":"Category of the submitted document - front/back/selfie etc.","type":"string","required":false},{"in":"formData","name":"identificator","description":"Identificator for documents to be supplied together","type":"string","required":false},{"in":"formData","name":"metadata","description":"Any additional key: value pairs in json string format","type":"string","required":false}],"responses":{"201":{"description":"Document is uploaded"},"400":{"description":"Required params are empty"},"401":{"description":"Invalid bearer token"},"422":{"description":"Validation errors"}},"tags":["api"],"operationId":"postApiV2BarongResourceDocuments"},"get":{"description":"Return current user documents list","produces":["application/json"],"responses":{"200":{"description":"Return current user documents list","schema":{"$ref":"#/definitions/API_V2_Entities_Document"}},"401":{"description":"Invalid bearer token"}},"tags":["api"],"operationId":"getApiV2BarongResourceDocuments"}},"/api/v2/barong/resource/profiles/address":{"post":{"description":"Adding Address","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"formData","name":"city","description":"city name","type":"string","required":true},{"in":"formData","name":"province","description":"province name","type":"string","required":true},{"in":"formData","name":"address","description":"address","type":"string","required":true},{"in":"formData","name":"postcode","description":"post code","type":"string","required":true},{"in":"formData","name":"upload","description":"Array of Rack::Multipart::UploadedFile","type":"string","required":true}],"responses":{"201":{"description":"Adding Address","schema":{"$ref":"#/definitions/API_V2_Entities_Profile"}},"400":{"description":"Required params are empty"},"401":{"description":"Invalid bearer token"},"404":{"description":"needed data doesnt exist"},"422":{"description":"Validation errors"}},"tags":["api"],"operationId":"postApiV2BarongResourceProfilesAddress"}},"/api/v2/barong/resource/profiles/selfie":{"post":{"description":"Create Level two - step three - selfie","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"formData","name":"upload","description":"Array of Rack::Multipart::UploadedFile","type":"string","required":true},{"in":"formData","name":"confirm","description":"Profile confirmation","type":"boolean","default":true,"required":false}],"responses":{"201":{"description":"Create Level two - step three - selfie","schema":{"$ref":"#/definitions/API_V2_Entities_Profile"}},"400":{"description":"Required params are empty"},"401":{"description":"Invalid bearer token"},"409":{"description":"Selfie already exists"},"422":{"description":"Validation errors"}},"tags":["api"],"operationId":"postApiV2BarongResourceProfilesSelfie"}},"/api/v2/barong/resource/profiles/treasury/list":{"get":{"description":"Return list of treasuries","produces":["application/json"],"responses":{"200":{"description":"Return list of treasuries","schema":{"$ref":"#/definitions/API_V2_Entities_Treasury"}},"401":{"description":"Invalid bearer token"},"404":{"description":"User has no treasuries"}},"tags":["api"],"operationId":"getApiV2BarongResourceProfilesTreasuryList"}},"/api/v2/barong/resource/profiles/treasury/{id}":{"delete":{"description":"Delete a treasury","produces":["application/json"],"parameters":[{"in":"path","name":"id","type":"integer","format":"int32","required":true}],"responses":{"204":{"description":"Successfully deleted"},"400":{"description":"Required params are empty"},"401":{"description":"Invalid bearer token"},"404":{"description":"Record is not found"}},"tags":["api"],"operationId":"deleteApiV2BarongResourceProfilesTreasuryId"}},"/api/v2/barong/resource/profiles/treasury":{"post":{"description":"Create Level one - step three - info bank ","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"formData","name":"data","description":"treasury number","type":"string","required":true},{"in":"formData","name":"kind","description":"iban or card","type":"string","required":true},{"in":"formData","name":"title","description":"treasury name","type":"string","required":false},{"in":"formData","name":"confirm","description":"Treasury confirmation","type":"boolean","default":true,"required":false}],"responses":{"201":{"description":"Create Level one - step three - info bank ","schema":{"$ref":"#/definitions/API_V2_Entities_Profile"}},"400":{"description":"Required params are empty"},"401":{"description":"Invalid bearer token"},"409":{"description":"Bank info already exists"},"422":{"description":"Validation errors"}},"tags":["api"],"operationId":"postApiV2BarongResourceProfilesTreasury"}},"/api/v2/barong/resource/profiles":{"put":{"description":"Update a profile for current_user","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"formData","name":"first_name","description":"First Name","type":"string","required":true},{"in":"formData","name":"last_name","description":"Last Name","type":"string","required":true},{"in":"formData","name":"dob","description":"Date of Birth","type":"string","format":"date","required":true},{"in":"formData","name":"national_code","description":"national code","type":"string","required":true},{"in":"formData","name":"upload","description":"Array of Rack::Multipart::UploadedFile","type":"string","required":true},{"in":"formData","name":"confirm","description":"Profile confirmation","type":"boolean","default":true,"required":false}],"responses":{"200":{"description":"Update a profile for current_user","schema":{"$ref":"#/definitions/API_V2_Entities_Profile"}},"401":{"description":"Invalid bearer token"},"422":{"description":"Validation errors"}},"tags":["api"],"operationId":"putApiV2BarongResourceProfiles"},"post":{"description":"Create Level one - step one - personal info in profiles","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"formData","name":"first_name","description":"First Name","type":"string","required":true},{"in":"formData","name":"last_name","description":"Last Name","type":"string","required":true},{"in":"formData","name":"dob","description":"Date of Birth","type":"string","format":"date","required":true},{"in":"formData","name":"national_code","description":"national code","type":"string","required":true},{"in":"formData","name":"upload","description":"Array of Rack::Multipart::UploadedFile","type":"string","required":true},{"in":"formData","name":"confirm","description":"Profile confirmation","type":"boolean","default":true,"required":false}],"responses":{"201":{"description":"Create Level one - step one - personal info in profiles","schema":{"$ref":"#/definitions/API_V2_Entities_Profile"}},"400":{"description":"Required params are empty"},"401":{"description":"Invalid bearer token"},"409":{"description":"Profile already exists"},"422":{"description":"Validation errors"}},"tags":["api"],"operationId":"postApiV2BarongResourceProfiles"}},"/api/v2/barong/resource/profiles/me":{"get":{"description":"Return profiles of current resource owner","produces":["application/json"],"responses":{"200":{"description":"Return profiles of current resource owner","schema":{"$ref":"#/definitions/API_V2_Entities_Profile"}},"401":{"description":"Invalid bearer token"},"404":{"description":"User has no profile"}},"tags":["api"],"operationId":"getApiV2BarongResourceProfilesMe"}},"/api/v2/barong/resource/labels/{key}":{"delete":{"description":"Delete a label with 'public' scope.","produces":["application/json"],"parameters":[{"in":"path","name":"key","description":"Label key.","type":"string","required":true}],"responses":{"204":{"description":"Succefully deleted"},"400":{"description":"Required params are empty"},"401":{"description":"Invalid bearer token"},"404":{"description":"Record is not found"}},"tags":["api"],"operationId":"deleteApiV2BarongResourceLabelsKey"},"patch":{"description":"Update a label with 'public' scope.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"path","name":"key","description":"Label key.","type":"string","required":true},{"in":"formData","name":"value","description":"Label value.","type":"string","required":true}],"responses":{"200":{"description":"Update a label with 'public' scope.","schema":{"$ref":"#/definitions/API_V2_Entities_Label"}},"400":{"description":"Required params are empty"},"401":{"description":"Invalid bearer token"},"404":{"description":"Record is not found"},"422":{"description":"Validation errors"}},"tags":["api"],"operationId":"patchApiV2BarongResourceLabelsKey"},"get":{"description":"Return a label by key.","produces":["application/json"],"parameters":[{"in":"path","name":"key","description":"Label key.","type":"string","required":true}],"responses":{"200":{"description":"Return a label by key.","schema":{"$ref":"#/definitions/API_V2_Entities_Label"}},"400":{"description":"Required params are empty"},"401":{"description":"Invalid bearer token"},"404":{"description":"Record is not found"}},"tags":["api"],"operationId":"getApiV2BarongResourceLabelsKey"}},"/api/v2/barong/resource/labels":{"post":{"description":"Create a label with 'public' scope.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"formData","name":"key","description":"Label key.","type":"string","required":true},{"in":"formData","name":"value","description":"Label value.","type":"string","required":true}],"responses":{"201":{"description":"Create a label with 'public' scope.","schema":{"$ref":"#/definitions/API_V2_Entities_Label"}},"400":{"description":"Required params are empty"},"401":{"description":"Invalid bearer token"},"422":{"description":"Validation errors"}},"tags":["api"],"operationId":"postApiV2BarongResourceLabels"},"get":{"description":"List all labels for current user.","produces":["application/json"],"parameters":[{"in":"query","name":"ordering","description":"If set, returned labels sorted in specific order, default to \"asc\".","type":"string","default":"asc","enum":["asc","desc"],"required":false}],"responses":{"200":{"description":"List all labels for current user.","schema":{"$ref":"#/definitions/API_V2_Entities_Label"}},"401":{"description":"Invalid bearer token"}},"tags":["api"],"operationId":"getApiV2BarongResourceLabels"}},"/api/v2/barong/resource/users/confirm_password":{"post":{"description":"Confirm account password(enter authorization code)","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"formData","name":"code","description":"Totp Code from email","type":"string","required":true}],"responses":{"201":{"description":"Changes password"},"400":{"description":"Required params are empty"},"404":{"description":"Record is not found"},"422":{"description":"Validation errors"}},"tags":["api"],"operationId":"postApiV2BarongResourceUsersConfirmPassword"}},"/api/v2/barong/resource/users/password":{"put":{"description":"Sets new account password(change password)","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"formData","name":"old_password","description":"Previous account password","type":"string","required":true},{"in":"formData","name":"new_password","description":"User password","type":"string","required":true},{"in":"formData","name":"confirm_password","description":"User password","type":"string","required":true}],"responses":{"201":{"description":"Code sent for confirm password"},"400":{"description":"Required params are empty"},"404":{"description":"Record is not found"},"422":{"description":"Validation errors"}},"tags":["api"],"operationId":"putApiV2BarongResourceUsersPassword"}},"/api/v2/barong/resource/users/activity/{topic}":{"get":{"description":"Returns user activity","produces":["application/json"],"parameters":[{"in":"path","name":"topic","description":"Topic of user activity. Allowed: [all, password, session, otp]","type":"string","required":true},{"in":"query","name":"time_from","description":"An integer represents the seconds elapsed since Unix epoch.If set, only activities created after the time will be returned.","type":"integer","format":"int32","required":false},{"in":"query","name":"time_to","description":"An integer represents the seconds elapsed since Unix epoch.If set, only activities created before the time will be returned.","type":"integer","format":"int32","required":false},{"in":"query","name":"result","description":"Result of user activity. Allowed: [succeed, failed, denied]","type":"string","required":false},{"in":"query","name":"page","description":"Page number (defaults to 1).","type":"integer","format":"int32","default":1,"required":false},{"in":"query","name":"limit","description":"Number of users per page (defaults to 100, maximum is 100).","type":"integer","format":"int32","default":100,"minimum":1,"maximum":100,"required":false}],"responses":{"200":{"description":"Returns user activity","schema":{"$ref":"#/definitions/API_V2_Entities_Activity"}}},"tags":["api"],"operationId":"getApiV2BarongResourceUsersActivityTopic"}},"/api/v2/barong/resource/users/me":{"delete":{"description":"Blocks current user","produces":["application/json"],"parameters":[{"in":"query","name":"password","description":"Account password","type":"string","required":true},{"in":"query","name":"otp_code","description":"Code from Google Authenticator","type":"string","required":false}],"responses":{"204":{"description":"Current user was blocked"}},"tags":["api"],"operationId":"deleteApiV2BarongResourceUsersMe"},"put":{"description":"Updates current user data field","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"formData","name":"data","description":"Any additional key: value pairs in json string format","type":"string","required":true}],"responses":{"200":{"description":"Updates current user data field","schema":{"$ref":"#/definitions/API_V2_Entities_UserWithFullInfo"}}},"tags":["api"],"operationId":"putApiV2BarongResourceUsersMe"},"get":{"description":"Returns current user","produces":["application/json"],"responses":{"200":{"description":"Returns current user","schema":{"$ref":"#/definitions/API_V2_Entities_UserWithFullInfo"}}},"tags":["api"],"operationId":"getApiV2BarongResourceUsersMe"}},"/api/v2/barong/resource/addresses":{"post":{"description":"Upload a new address approval document for current user(this is what ui using now)","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"formData","name":"country","description":"country name","type":"string","required":true},{"in":"formData","name":"address","description":"address","type":"string","required":true},{"in":"formData","name":"upload","description":"Array of Rack::Multipart::UploadedFile","type":"string","required":true},{"in":"formData","name":"city","description":"city name","type":"string","required":true},{"in":"formData","name":"postcode","description":"Any additional key: value pairs in json string format","type":"string","required":true}],"responses":{"201":{"description":"New address approval document was uploaded"},"400":{"description":"Required params are empty"},"401":{"description":"Invalid bearer token"},"422":{"description":"Validation errors"}},"tags":["api"],"operationId":"postApiV2BarongResourceAddresses"}},"/api/v2/barong/public/configs/auth0":{"get":{"description":"Get auth0 configuration","produces":["application/json"],"responses":{"200":{"description":"Get auth0 configuration"}},"tags":["api"],"operationId":"getApiV2BarongPublicConfigsAuth0"}},"/api/v2/barong/public/configs":{"get":{"description":"Get barong configurations","produces":["application/json"],"responses":{"200":{"description":"Get barong configurations"}},"tags":["api"],"operationId":"getApiV2BarongPublicConfigs"}},"/api/v2/barong/public/version":{"get":{"description":"Get barong version","produces":["application/json"],"responses":{"200":{"description":"Get barong version"}},"tags":["api"],"operationId":"getApiV2BarongPublicVersion"}},"/api/v2/barong/public/time":{"get":{"description":"Get server current unix timestamp.","produces":["application/json"],"responses":{"200":{"description":"Get server current unix timestamp."}},"tags":["api"],"operationId":"getApiV2BarongPublicTime"}},"/api/v2/barong/public/ping":{"get":{"description":"Test connectivity","produces":["application/json"],"responses":{"200":{"description":"Test connectivity"}},"tags":["api"],"operationId":"getApiV2BarongPublicPing"}},"/api/v2/barong/public/password/validate":{"post":{"description":"Password strength testing","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"formData","name":"password","description":"User password","type":"string","required":true}],"responses":{"201":{"description":"Password strength testing"}},"tags":["api"],"operationId":"postApiV2BarongPublicPasswordValidate"}},"/api/v2/barong/public/kyc":{"post":{"description":"KYC callback","produces":["application/json"],"consumes":["application/json"],"responses":{"201":{"description":"KYC callback"}},"tags":["api"],"operationId":"postApiV2BarongPublicKyc"}}},"definitions":{"API_V2_Entities_UserWithFullInfo":{"type":"object","properties":{"email":{"type":"string","description":"User Email"},"uid":{"type":"string","description":"User UID"},"role":{"type":"string","description":"User role"},"level":{"type":"integer","format":"int32","description":"User level"},"otp":{"type":"boolean","description":"is 2FA enabled for account"},"state":{"type":"string","description":"User state: active, pending, inactive"},"referral_uid":{"type":"string","description":"UID of referrer"},"data":{"type":"string","description":"Additional phone and profile info"},"csrf_token":{"type":"string","description":"Сsrf protection token"},"labels":{"$ref":"#/definitions/API_V2_Entities_Label"},"phones":{"$ref":"#/definitions/API_V2_Entities_Phone"},"profiles":{"$ref":"#/definitions/API_V2_Entities_Profile"},"data_storages":{"$ref":"#/definitions/API_V2_Entities_DataStorage"},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"description":"Returns current user"},"API_V2_Entities_Label":{"type":"object","properties":{"key":{"type":"string","description":"Label key. [a-z0-9_-]+ should be used. Min - 3, max - 255 characters."},"value":{"type":"string","description":"Label value. [A-Za-z0-9_-] should be used. Min - 3, max - 255 characters."},"scope":{"type":"string","description":"Label scope: 'public' or 'private'"},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"description":"List all labels for current user."},"API_V2_Entities_Phone":{"type":"object","properties":{"country":{"type":"string","description":"Phone country"},"number":{"type":"string","description":"Submasked phone number"},"validated_at":{"type":"s","format":"g","description":"Phone validation date"}},"description":"Returns list of user's phones"},"API_V2_Entities_Profile":{"type":"object","properties":{"first_name":{"type":"string","description":"First Name"},"last_name":{"type":"string","description":"Submasked last name"},"national_code":{"type":"string","description":"Submasked national code"},"dob":{"type":"string","format":"date","description":"Submasked birth date"},"address":{"type":"string","description":"Address"},"postcode":{"type":"string","description":"Address Postcode"},"city":{"type":"string","description":"City name"},"country":{"type":"string","description":"Country name"},"state":{"type":"string","description":"Profile state: drafted, submitted, verified, rejected"},"metadata":{"type":"object","description":"Profile additional fields"},"upload":{"type":"string","description":"Address Postcode"},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"description":"Return profiles of current resource owner"},"API_V2_Entities_DataStorage":{"type":"object","properties":{"title":{"type":"string","description":"Any additional data title"},"data":{"type":"string","description":"Any additional data json key:value pairs"},"created_at":{"type":"string"},"updated_at":{"type":"string"}}},"API_V2_Entities_APIKey":{"type":"object","properties":{"kid":{"type":"string","description":"JWT public key"},"algorithm":{"type":"string","description":"Cryptographic hash function type"},"scope":{"type":"string","description":"Serialized array of scopes"},"state":{"type":"string","description":"active/non-active state of key"},"secret":{"type":"string","description":"Api key secret"},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"description":"Create an api key"},"API_V2_Entities_Document":{"type":"object","properties":{"upload":{"type":"string","description":"File Upload"},"url":{"type":"string","description":"File url"},"doc_type":{"type":"string","description":"Document type: passport, driver license, utility bill, identity card, institutional, address, residental"},"doc_number":{"type":"string","description":"Submasked document number: AB123123 type"},"doc_expire":{"type":"string","description":"Expire date of uploaded documents"},"metadata":{"type":"string","description":"Any additional stored data"},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"description":"Return current user documents list"},"API_V2_Entities_Treasury":{"type":"object","properties":{"id":{"type":"integer","format":"int32","description":"id of record"},"title":{"type":"string","description":"title"},"state":{"type":"string","description":"state"},"kind":{"type":"string","description":"kind"},"data":{"type":"string","description":"Submasked data"},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"description":"Return list of treasuries"},"API_V2_Entities_Activity":{"type":"object","properties":{"id":{"type":"integer","format":"int32","description":"Activity ID"},"user_ip":{"type":"string","description":"User IP"},"user_agent":{"type":"string","description":"User Browser Agent"},"topic":{"type":"string","description":"Defined topic (session, adjustments) or general by default"},"action":{"type":"string","description":"API action: POST =\u003e 'create', PUT =\u003e 'update', GET =\u003e 'read', DELETE =\u003e 'delete', PATCH =\u003e 'update' or system if there is no match of HTTP method"},"result":{"type":"string","description":"Status of API response: succeed, failed, denied"},"data":{"type":"string","description":"Parameters which was sent to specific API endpoint"},"created_at":{"type":"string"}},"description":"Returns user activity"},"API_V2_Entities_Level":{"type":"object","properties":{"id":{"type":"integer","format":"int32","description":"Level identifier, level number"},"key":{"type":"string","description":"Label key. [A-Za-z0-9_-] should be used. Min - 3, max - 255 characters."},"value":{"type":"string","description":"Label value. [A-Za-z0-9_-] should be used. Min - 3, max - 255 characters."}}},"API_V2_Entities_User":{"type":"object","properties":{"email":{"type":"string","description":"User Email"},"uid":{"type":"string","description":"User UID"},"role":{"type":"string","description":"User role"},"level":{"type":"integer","format":"int32","description":"User level"},"otp":{"type":"boolean","description":"is 2FA enabled for account"},"state":{"type":"string","description":"User state: active, pending, inactive"},"referral_uid":{"type":"string","description":"UID of referrer"},"data":{"type":"string","description":"Additional phone and profile info"}}},"API_V2_Entities_UserWithProfile":{"type":"object","properties":{"email":{"type":"string","description":"User Email"},"uid":{"type":"string","description":"User UID"},"role":{"type":"string","description":"User role"},"level":{"type":"integer","format":"int32","description":"User level"},"otp":{"type":"boolean","description":"is 2FA enabled for account"},"state":{"type":"string","description":"User state: active, pending, inactive"},"referral_uid":{"type":"string","description":"UID of referrer"},"data":{"type":"string","description":"Additional phone and profile info"},"profiles":{"$ref":"#/definitions/API_V2_Entities_Profile"},"created_at":{"type":"string"},"updated_at":{"type":"string"}}},"API_V2_Entities_UserWithKYC":{"type":"object","properties":{"email":{"type":"string","description":"User Email"},"uid":{"type":"string","description":"User UID"},"role":{"type":"string","description":"User role"},"level":{"type":"integer","format":"int32","description":"User level"},"otp":{"type":"boolean","description":"is 2FA enabled for account"},"state":{"type":"string","description":"User state: active, pending, inactive"},"referral_uid":{"type":"string","description":"UID of referrer"},"data":{"type":"string","description":"Additional phone and profile info"},"profiles":{"$ref":"#/definitions/API_V2_Entities_Profile"},"labels":{"$ref":"#/definitions/API_V2_Entities_AdminLabelView"},"created_at":{"type":"string"},"updated_at":{"type":"string"}}},"API_V2_Entities_AdminLabelView":{"type":"object","properties":{"key":{"type":"string","description":"Label key. [a-z0-9_-]+ should be used. Min - 3, max - 255 characters."},"value":{"type":"string","description":"Label value. [A-Za-z0-9_-] should be used. Min - 3, max - 255 characters."},"scope":{"type":"string","description":"Label scope: 'public' or 'private'"},"description":{"type":"string","description":"Label desc: json string with any additional information"},"created_at":{"type":"string"},"updated_at":{"type":"string"}}},"API_V2_Entities_ServiceAccounts":{"type":"object","properties":{"email":{"type":"string","description":"User Email"},"uid":{"type":"string","description":"User UID"},"role":{"type":"string","description":"Service Account Role"},"level":{"type":"integer","format":"int32","description":"User Level"},"state":{"type":"string","description":"Service Account State: active, disabled"},"user":{"$ref":"#/definitions/API_V2_Entities_User"},"created_at":{"type":"string"},"updated_at":{"type":"string"}}},"API_V2_Entities_Comment":{"type":"object","properties":{"id":{"type":"integer","format":"int32","description":"Comment id"},"author_uid":{"type":"string","description":"Comment author UID"},"title":{"type":"string","description":"Comment title"},"data":{"type":"string","description":"Comment plain text"},"created_at":{"type":"string"},"updated_at":{"type":"string"}}}}} diff --git a/docs/configuration.md b/docs/configuration.md new file mode 100644 index 0000000..4026768 --- /dev/null +++ b/docs/configuration.md @@ -0,0 +1,194 @@ +# Barong environments overview +##### This document provides description, defaults and possible values for all environment variables that take a part in app configuration + +### General configuration +| Env name | Default value | Possible values | Description | +| ---------- | ------ |-------------------------|---------------------------------- | +| `barong_app_name` | Barong | any string value | Define app name for `2FA issuer` and `friendly_name` for twilio v2 verification | +| `barong_domain` | openware.com | any string value | Value of the env will be sent as `domain` param in `EVENT API` in identity module, which helps mailer or 3rd party email send services to avoid additional configurations | +| `barong_uid_prefix` | ID | any string value that matches regex: `/^[A-z]{2,6}$/` | This env configurate first 2-6 chars of UID | +| `barong_session_name` | _barong_session | any string value | session cookie name | +| `barong_session_expire_time` | 1800 | any number ( value is in seconds) | session lifetime (auto-renews on every private call | +| `barong_required_docs_expire` | true | `false` `true` | force Barong to validate or not validate `expires_in` parameter at document creation. with `false` still can be sent and recorded but with no time validation | +| `barong_doc_num_limit` | 10 | any amount number | number of maximum documents that can be attached to uniq user | +| `barong_geoip_lang` | en | `en`, `de`, `es`, `fr`, `ja`, `ru` | internal GeoIP lang `Barong::GeoIP.lang`, which configures the language of detected country/continent name | +| `barong_csrf_protection` | true | `true`, `false` | when turned on (`true`) exposes csrf_token on session create and requires X-CSRF-Token on every private POST PUT PATCH DELETE TRACE on AuthZ level | +| `barong_apikey_nonce_lifetime` | 5000 | integer representation of milliseconds | nonce in api key headers should not be older than this env value | +| `barong_gateway` | 'cloudflare' | `cloudflare`, `akamai` | when turned on (`true`) user IP on session and AuthZ level will firstly be checked in TRUE_CLIENT_IP header | +| `barong_jwt_expire_time` | '3600' | integer representation of seconds | general purpose tokens (reset password, confirm email) expiration time | +| `crc32_salt` | - | any string value | salt for crc32 algorithm which used to searching in encrypted fields | +| `api_data_masking_enabled` | true | `true`, `false` | when turned on (`true`) user API will be with ecnrypted user data | +|`first_registration_superadmin`| true | `true`, `false` | when turned on (`true`) first registered user on a platform will be superadmin without any email confirmation | +|`mgn_api_keys_user`| false | `true`, `false` | when turned on (`true`) management API to create/update api keys will be provided for user entity| +|`mgn_api_keys_sa`| false | `true`, `false` | when turned on (`true`) management API to create/update api keys will be provided for service account entity | + +### Password configuration +| Env name | Default value | Possible values | Description | +| ---------- | ------ |-------------------------|---------------------------------- | +| `barong_password_regexp` | ^(?=.*[[:lower:]])(?=.*[[:upper:]])(?=.*[[:digit:]])(?=.*[[:graph:]]).{8,80}$ | any valid regex without / / | regex will validate password while user sign up / reset pass / password change | +| `barong_password_min_entropy` | 14 | any positive int | minimal entropy required by password | +| `barong_password_use_dictionary` | true | bool | activates or deactivates most common password dictionary check | + +### Storage configuration +More details in [storage configuration doc](#storage-configuration) + +| Env name | Default value | Possible values | Description | +| ---------- | ------ |-------------------------|---------------------------------- | +| `barong_storage_provider` | local | `local` `google` `aws` `alicloud` | provider for documents store. this env may have an affected on other from this module | +| `barong_storage_bucket_name` | local | any string value | bucket name, required for all providers | +| `barong_storage_access_key` | - | any string value | access key for bucket, required for all providers | +| `barong_storage_secret_key` | - | any string value | secret key for bucket, required for all providers | +| `barong_storage_endpoint` | - | any string valid url value | custom storage endpoint, can be used for AWS, AliCloud providers | +| `barong_storage_signature_version` | 4 | `2` `3` `4` | custom signature version, can be used for AWS provider | +| `barong_storage_region` | - | any string value | bucket storage region | +| `barong_storage_pathstyle` | false | `false` `true` | storage pathstyle, myght be used for AWS or AliCloud providers | +| `barong_upload_size_min_range` | 1 | any integer value | minimum size of possible upload (in megabytes) | +| `barong_upload_size_max_range` | 10 | any integer value | maximum size of possible upload (in megabytes) | +| `barong_upload_auth_url_expiration` | 1 | any integer value | configures in minutes the lifetime of auth signature to see upload | +| `barong_upload_extension_whitelist` | jpg, jpeg, png, pdf | string with comma-separated extensions formats | whitelist of upload extensions | + +### API CORS configuration +| Env name | Default value | Possible values | Description | +| ---------- | ------ |-------------------------|---------------------------------- | +| `barong_api_cors_origins` | * | any string valid url value or wildcard `*` | CORS configuration - url or wildcard | +| `barong_api_cors_max_age` | 3600 | any number ( value is in seconds) | indicates how long the results of a preflight request can be cached, in seconds | +| `barong_api_cors_allow_credentials` | false | `false` `true` | allows cookies to be sent in cross-domain responses | + +### CAPTCHA configuration +More details in [captcha policy doc](https://www.openware.com/sdk/docs/barong/general/captcha.html) + +| Env name | Default value | Possible values | Description | +| ---------- | ------ |-------------------------|---------------------------------- | +| `barong_captcha` | none | `none` `recaptcha` `geetest` | configures captcha policy | +| `barong_geetest_id` | - | any string value | geetest id for captcha from geetest.com | +| `barong_geetest_key` | - | any string value | geetest id for captcha from geetest.com | +| `barong_recaptcha_site_key` | - | any string value | site key for RECAPTCHA | +| `barong_recaptcha_secret_key` | - | any string value | secret key for RECAPTCHA | + +### Twilio configuration +More details in [twilio configuration](#twilio-configuration) + +| Env name | Default value | Possible values | Description | +| ---------- | ------ |-------------------------|---------------------------------- | +| `barong_phone_verification` | mock | `twilio_verify` , `twilio_sms` , `mock` | sms send policy, switcher between twilio services and stub (mock) | +| `barong_twilio_phone_number` | +15005550000 | any twilio valid number or twilio string name | Twilio sms sender number/name | +| `barong_twilio_account_sid` | - | any string value | twilio account sid, required by configuration | +| `barong_twilio_auth_token` | - | any string value | twilio auth token, required by configuration | +| `barong_twilio_service_sid` | - | any string value | twilio service sid, required by configuration of `twilio_verify` policy | +| `barong_sms_content_template` | Your verification code for Barong: `{{code}}` | any string value containing `{{code}}` | template, used in both configurations as content for SMS | + +### RabbitMQ configuration +| Env name | Default value | Possible values | Description | +| ---------- | ------ |-------------------------|---------------------------------- | +| `barong_event_api_rabbitmq_host` | localhost | any string value | rabbitmq server host | +| `barong_event_api_rabbitmq_port` | 5672 | any valid port string | rabbitmq server port | +| `barong_event_api_rabbitmq_username` | guest | any string value | rabbitmq server access username | +| `barong_event_api_rabbitmq_password` | guest | any string value | rabbitmq server access password | + +### Redis configuration +| `barong_redis_cluster` | `false` | `false` `true` | define redis mode usage (https://redis.io/topics/cluster-tutorial) | +| `barong_redis_url` | `redis://localhost:6379/1` | any valid url | url of redis server with port | +| `barong_redis_password` | ~ | any string value | redis server access password | + +### Vault configuration +| `barong_vault_address` | `http://localhost:8200` | any valid url | vault server url with port | +| `barong_vault_token` | | any string value | vault access token | +| `barong_vault_app_name` | barong | any string value | the name of the application, all encryption keys in Vault will be prefixed with this application name | + +### Sentry configuration +| `barong_sentry_dsn_backend` | ~ | valid host url | Sentry SDK client key | + +### Auth0 configuration + +| Env name | Default value | Possible values | Description | +| ---------- | :------: |:------: |---------------------------------- | +|`auth0_domain`| - | any string value | auth0 Domain name (without https://) | +|`auth0_client_id`| - | any string value | the client_id of your auth0 application | + +### SMTP configuration +| Env name | Default value | Possible values | Description | +| ---------- | ------ |-------------------------|---------------------------------- | +| `barong_sender_email` | noreply@barong.io | any valid email | this will be displayed as sender email for client in all outbox | +| `barong_sender_name` | Barong | any string value | this will be displayed as sender name for client in all outbox | +| `barong_smtp_password` | - | any string value | password for auth 3d party send emails service smtp | +| `barong_smtp_port` | 1025 | any integer value | port for auth 3d party send emails service smtp | +| `barong_smtp_host` | localhost | valid host url | host for auth 3d party send emails service smtp | +| `barong_smtp_user` | - | any string value | username for auth 3d party send emails service smtp | +| `barong_default_language` | en | alpha-2 country | default language for email letters | + +### Config files configuration +| Env name | Default value | Possible values | Description | +| ---------- | ------ |-------------------------|---------------------------------- | +| `barong_config` | config/barong.yml | any valid path to existing file | path to barong config with `activation_requirements`, `state_triggers`, `document_types` and `user_storage_titles` | +| `barong_maxminddb_path` | geolite/GeoLite2-Country.mmdb | any valid path to existing file | path to geolite country DB file | +| `barong_seeds_file` | config/seeds.yml | any valid path to existing file | path to configuration file with pre-defined API rules, users and levels | +| `barong_authz_rules_file` | config/authz_rules.yml | any valid path to existing file | path to configuration file with blacklisted and whitelisted API pathes | + +# Barong configurations overview +## Twilio configuration +For twilio configuration we need to set such required envs +- `BARONG_TWILIO_ACCOUNT_SID`, which acts as a twilio username +- `BARONG_TWILIO_SERVICE_SID`, which acts as a twilio password +- `BARONG_TWILIO_PHONE_NUMBER`, virtual phone numbers which will give you instant access to local, national, mobile, and toll-free phone numbers + +We have ability to set twilio with 3 different ways +1. ```BARONG_PHONE_VERIFICATION == "twilio_sms"``` + If you choose phone verification as twilio sms we will use send_sms [API call](https://www.twilio.com/docs/sms/send-messages) + Also you can add your own template for sms using `BARONG_SMS_CONTENT_TEMPLATE` +2. ```BARONG_PHONE_VERIFICATION == "twilio_verify"``` + In this case we will use twilio Verify [API call](https://www.twilio.com/docs/verify/api) + There are a lot of benefits of using Verify API like you can validate users via voice + One verification service can be used to send multiple verification tokens, it is not necessary to create a new service each time, so you can set ```BARONG_TWILIO_SERVICE_SID``` at once +3. ```BARONG_PHONE_VERIFICATION == "mock"``` + With this type of verification all the numbers will be accepted and validated as a right code for any given number + +--- + +## Blacklist/Whitelist configuration + +`Pass` routes will never be checked by AuthZ endpoint and will be available without session requirement. On `Block` routes user always will get 401, it doesn't depend on a session / role / ip / etc + +You need to put whitelisted (public) routes for pass object and blacklisted routes for block in authz_rules.yml + +```yml +rules: + pass: + - api/v2/barong/identity + - api/v2/peatio/public + - api/v2/ranger/public + - api/v2/applogic/public + block: + - api/v2/barong/management + - api/v2/peatio/managemen +``` + +--- + +## State configuration + +We can customize barong configuration as we want + +1. For user activation we just need to have verified email label in example below. You can put more labels to create your own rules for user activation +2. For example, if you want to ban your user you just need to put ban and fraud labels on tower admin panel. For sure you can customize this case too and put change or add label names in barong.yml +3. For document verification we use, as standard - following document types. But you can configure available document types by changing or extending existing list. This way we keep an opportunity to support any custom KYC services, logic, etc + +```yml +activation_requirements: + email: 'verified' +state_triggers: + banned: + - ban + - fraud + deleted: + - delete + locked: + - suspicious + - lock +document_types: + - Passport + - Identity card + - Driver license + - Utility Bill + - Residental + - Institutional +``` diff --git a/docs/development/mailer.md b/docs/development/mailer.md new file mode 100644 index 0000000..559a911 --- /dev/null +++ b/docs/development/mailer.md @@ -0,0 +1,39 @@ +# Run the barong mailer locally + +## Prerequisites +You need to following deamons running + +1. RabbitMQ +2. Redis + +## Start Rails console + +```bash +rails console +``` + +## Start the mailer + +1. Generate the barong public key in base64 format + +``` +cat config/rsa-key.pub | base64 -w0 (base64 -b0 for MacOS users) +``` + +2. Configure it in config/mailer.yml +Replace *changeme* with the previous generated string. + +```yaml + keychain: + barong: + algorithm: RS256 + value: "changeme" +``` + +## Generate an event + +From the rails console you can generate an event by creating a label on a user: + +```ruby +Label.create!(user_id:1, key: 'phone', value: 'verified') +``` diff --git a/docs/general/2fa.md b/docs/general/2fa.md new file mode 100644 index 0000000..0259b0e --- /dev/null +++ b/docs/general/2fa.md @@ -0,0 +1,70 @@ +# Setting up 2FA + +This document describes Barong [TOTP](https://tools.ietf.org/html/rfc6238) setup +using [Vault](https://www.vaultproject.io/intro/getting-started/install.html). + +## Prerequisites + +[Vault](https://www.vaultproject.io/intro/getting-started/install.html) +with [TOTP secrets engine](https://www.vaultproject.io/docs/secrets/totp/index.html#setup) enabled. + +## Configuration + +To use Vault with Barong you will need to set the following environment variables: + +```shell +export VAULT_ADDR=http://your-vault-url.com +export VAULT_TOKEN=12345-vault-t0k3n-54321 +``` + +To allow using Google Authenticator `VAULT_ADDR` should be _public_ ip. + +Note, that TOTP uses time-based algorithm. +So, if you want to test 2FA with phone, make sure, that your Vault's server time and your phone's time are synchronized, or it will not work. +[ntpdate](http://doc.ntp.org/4.1.1/ntpdate.htm) can help you to update your time with ntp servers: + +```shell +sudo ntpdate 0.ua.pool.ntp.org +``` + + +## Developer How-tos + +### Getting a code without Google Authenticator: + +* From _shell_: + + ```shell + $ vault login + $ vault read totp/code/IDMYAWESOMEID + ``` + +* From _rails console_: + + ```ruby + > me = Account.find_by_email('me@example.com') + > Vault.logical.read("totp/code/#{me.uid}") + ``` + +### Getting a new key (e.g. if you lost your Google Authenticator): + +* From _shell_: + + ```shell + $ vault login + $ vault write totp/keys/IDMYAWESOMEID \ + generate=true \ + issuer=Barong \ + account_name=me@example.com + ``` + +* From _rails console_: + + ```ruby + > me = Account.find_by_email('me@example.com') + > Vault::TOTP.send(:create, me.uid) + ``` + +Each response includes equivalent base64-encoded barcode and OTP url. +You can find the key's secret in this OTP url query params. + diff --git a/docs/general/activities.md b/docs/general/activities.md new file mode 100644 index 0000000..773bdff --- /dev/null +++ b/docs/general/activities.md @@ -0,0 +1,35 @@ +### Activities + +To track admin activities you need to define it on seed.yml on `permissions` key +- `role` should be in a range of existing: `admin`, `superadmin`, `support`, `techical`, `accountant` +- `verb` should be `post`, `get`, `put`, `delete` +- `path` - endpoint which should be checked, should be started with `api/v2/#{component}` as prefix +- `action` should be `audit` +``` +For example + +permissions: +- { role: 'admin', verb: 'post', path: api/v2/admin, action: audit } +``` + +Here you can see a list of possible fields for activity: +| Field | Type | Description | +|:-----------|:--------:|:-----------:| +| user_id | bigint | ID of user who creates activity | +| target_uid | string | User UID for whom activity was created (admin remove OTP for user, target_uid will be uid of user for which admin removed OTP| +| category | string | `admin` (admin activities), `user` (user activities)| +| user_ip | string | IP address | +| user_agent | string | User Agent such as `Mozilla/5.0`| +| topic | string | Defined topic (`session`, `adjustments`) or `general` by default| +| action | string | API action: `POST => 'create'`, `PUT => 'update'`, `GET => 'read'`, `DELETE => 'delete'`, `PATCH => 'update'` or `system` if there is no match of HTTP method| +| result | string | Status of API response: `succeed`, `failed`, `denied`| +| data | text | Parameters which was sent to specific API endpoint| +| created_at | datetime | Time of activity creation| + +##### Useful commands +If you want to delete old activities you can run next command + +Be sure that your parameters has valid date string, such as `YYYY-mm-dd` ! +``` +bundle exec rake activities:delete[from,to] +``` diff --git a/docs/general/api-keys.md b/docs/general/api-keys.md new file mode 100644 index 0000000..aad1d70 --- /dev/null +++ b/docs/general/api-keys.md @@ -0,0 +1,142 @@ +# Barong API keys creation and usage + +This document explains how to create an API key on barong using the UI or command line tool. +This API key can be used to access microservices in the cluster protected by barong authentication. +You can find below an example how to use the API key. + +## How to create API key ? + +### Using UI (recommended option) + +1. Find API keys section (often located on profile page). + +![API-keys-section](../images/api-keys-1.jpeg) + +2. Create your API key and securely save Access Key and Secret Key + +![API-key-creation](../images/api-keys-2.jpeg) + +### Using API (use this option in case your frontend doesn't support API keys feature) + +1. Install [httpie](https://httpie.org/) + +2. Login into your account using httpie + +```bash +http --session barong_session https://your.domain/api/v2/barong/identity/sessions \ + email=your@email.com password=changeme otp_code=000000 +``` +Example of response: +```json +{ + "created_at": "2020-06-01T07:01:20Z", + "csrf_token": "f5b36515a428328e199a", + "data": "{\"language\":\"en\"}", + "data_storages": [], + "email": "your@example.com", + "labels": [ + { + "created_at": "2020-06-01T07:01:45Z", + "key": "email", + "scope": "private", + "updated_at": "2020-06-01T07:01:45Z", + "value": "verified" + } + ], + "level": 5, + "otp": true, + "phones": [ + { + "country": "FR", + "number": "33*****0471", + "validated_at": "2020-06-01T07:03:18.000Z" + } + ], + "profiles": [], + "referral_uid": null, + "role": "member", + "state": "active", + "uid": "IDAF1AED1A42", + "updated_at": "2020-10-22T18:01:09Z" +} +``` + +3. Validate your session + +```bash +http --session barong_session https://your.domain.com/api/v2/peatio/account/balances +``` + +4. Create your API key + +``` +http --session barong_session https://your.domain.com/api/v2/barong/resource/api_keys \ + algorithm=HS256 totp_code=681757 x-csrf-token:f5b36515a428328e199a +``` + +Expected response: + +```json +{ + "algorithm": "HS256", + "created_at": "2019-12-23T12:22:15Z", + "kid": "61d025b8573501c2", // Access Key + "scope": [], + "secret": { + "auth": null, + "data": { + "value": "2d0b4979c7fe6986daa8e21d1dc0644f" // Secret Key + }, + "lease_duration": 2764800, + "lease_id": "", + "metadata": null, + "renewable": false, + "warnings": null, + "wrap_info": null + }, + "state": "active", + "updated_at": "2019-12-23T12:22:15Z" +} +``` + +5. Securely save Access Key and Secret Key + +## How to use API key ? + +To authenticate using API key you need to pass next 3 headers: + +| Header | Description | +| ---------------- | ------------------------------------------------------------ | +| X-Auth-Apikey | Access Key for API key (see 'How to create API key section ?') | +| X-Auth-Nonce | Timestamp in milliseconds (can be passed as a string) | +| X-Auth-Signature | HMAC-SHA256, calculated using concatenation of X-Auth-Nonce and Access Key | + +1. Generate X-Auth-Nonce - unique string (e.g current unix timestamp) + +```bash +date +%s%3N +1584524005143 +``` + +Nonce will be validated on server side to be not older than 5 seconds from the generation moment + +2. Calculate X-Auth-Signature header. + +X-Auth-Signature is HMAC-SHA256, calculated using concatenation of X-Auth-Nonce and Access Key. + +```ruby +nonce = (Time.now.to_f * 1000).to_i.to_s # timestamp in milliseconds, ex: 1584524005143 +access_key = '61d025b8573501c2' # Access Key from 'How to create API key section ?' +secret_key = '2d0b4979c7fe6986daa8e21d1dc0644f' # Secret Key from 'How to create API key section ?' +OpenSSL::HMAC.hexdigest("SHA256", secret_key, nonce + access_key) +# => "bd42b945e095880e28d046846dbecf655fdf09d95a396a24fe6fe1df42f15d13" +``` + +3. Pass your headers in httpie (note `--session` is not needed anymore) + +``` +http https://your.domain.com/api/v2/peatio/account/balances \ + "X-Auth-Apikey: 61d025b8573501c2" \ + "X-Auth-Nonce: 1584524005143" \ + "X-Auth-Signature: bd42b945e095880e28d046846dbecf655fdf09d95a396a24fe6fe1df42f15d13" +``` diff --git a/docs/general/auth0.md b/docs/general/auth0.md new file mode 100644 index 0000000..e597dce --- /dev/null +++ b/docs/general/auth0.md @@ -0,0 +1,48 @@ +# Auth0 integration + +## How to create an application + +When you signed up for Auth0, a new application was created for you, or you could have created a new one (the most appropriate application for our structure is Single Page Application). +![Application](../images/auth0_dashboard.png) + +You will need some details about that application to communicate with Auth0. You can get these details from the Application Settings section in the Auth0 dashboard. + +![Settings](../images/auth0_settings.png) + +You should put `auth0_domain` from the Domain field and `auth0_client_id` from the Client ID field + +For a single page application better to use authorization code flow with proof key for code exchange. + +## Authorization Code Flow with Proof Key for Code Exchange (PKCE) +When public clients request Access Tokens, some additional security concerns are posed that are not mitigated by the Authorization Code Flow alone. This is because single-page apps cannot securely store a Client Secret because their entire source is available to the browser. + + +### How it works +![PKCE](../images/auth0_pkce.png) +Because the PKCE-enhanced Authorization Code Flow builds upon the standard Authorization Code Flow, the steps are very similar. + +1. The user clicks Login within the application. + +2. Auth0's SDK creates a cryptographically-random code_verifier and from this generates a code_challenge. + +3. Auth0's SDK redirects the user to the Auth0 Authorization Server (/authorize endpoint) along with the code_challenge. + +4. Your Auth0 Authorization Server redirects the user to the login and authorization prompt. + +5. The user authenticates using one of the configured login options and may see a consent page listing the permissions Auth0 will give to the application. + +6. Your Auth0 Authorization Server stores the code_challenge and redirects the user back to the application with an authorization code, which is good for one use. + +7. Auth0's SDK sends this code and the code_verifier (created in step 2) to the Auth0 Authorization Server (/oauth/token endpoint). + +8. Your Auth0 Authorization Server verifies the code_challenge and code_verifier. + +9. Your Auth0 Authorization Server responds with an ID Token and Access Token (and optionally, a Refresh Token). + +10. Your application can use the Access Token to call an API to access information about the user. + +11. The API responds with requested data. + +You can try to call your [API using the authorization Code Flow with PKCE](https://auth0.com/docs/flows/call-your-api-using-the-authorization-code-flow-with-pkce). + +Also you can find a link with [Authentication API description](https://auth0.com/docs/api/authentication#introduction) here. diff --git a/docs/general/captcha.md b/docs/general/captcha.md new file mode 100644 index 0000000..1453893 --- /dev/null +++ b/docs/general/captcha.md @@ -0,0 +1,32 @@ +# Barong Captcha Policy +#### Overview +A CAPTCHA (an acronym for "Completely Automated Public Turing test to tell Computers and Humans Apart") is a type of challenge–response test used in computing to determine whether or not the user is human) [Link to wiki](https://en.wikipedia.org/wiki/CAPTCHA) + +Currently Barong versions 2.3+ supports 3 options in captcha policy on `sign up` and `sign in` API endpoints. + +Configuration manages through environment variable - `BARONG_CAPTCHA`. Available values - `geetest`, `recaptcha`, `none`. +With a wrong value barong will fail on start with error: `#{KEY} invalid, enabled values: NONE GEETEST RECAPTCHA`. + +## Disabled (default) +`none` - if ENV `BARONG_CAPTCHA` has this value - no captcha response will be required on sign in and sign up, so no bot traffic prevention. +This option is not recommended to use in `production` environment. +`None` policy was designed in testing and demo purposes, to start barong without any additional keys. + +## Re CAPTCHA v2 +reCAPTCHA is a free service that protects your site from spam and abuse. It uses advanced risk analysis techniques to tell humans and bots apart. [Get started from google team](https://developers.google.com/recaptcha/intro) + +`recaptcha` - this value in `BARONG_CAPTCHA` env enables re_captcha protection, designed and maintained by Google company. [Small developers tips from google team](https://developers.google.com/recaptcha/docs/display) + +To properly configurate re_captcha you will need to set value for ENVs `recaptcha_site_key` and `recaptcha_secret_key`. Both of them you can generate [in google admin panel](https://www.google.com/recaptcha/admin/create) + +After enabling and configuring captcha, `sign up` and `sign in` endpoint will require new parameter - `captcha_response`(`string`) and validate captcha response on server side, to protect from bots traffic. + +## Geetest Captcha (Puzzle captcha) + +GeeTest captcha is an user-friendly captcha with high security. GeeTest captcha enables digital businesses to secure control of their websites against bots. [geetest captcha site](https://www.geetest.com) + +`geetest` - this value in BARONG_CAPTCHA env enables geetest captcha protection, designed and maintained by geetest.com + +To properly configurate `geetest` you will need to set value for ENVs `geetest_id` and `geetest_key`. How to generate them, you can find in official [get started guide](https://docs.geetest.com/captcha/overview/guide) + +After enabling and configuring geetest captcha, `sign up` and `sign in` endpoint will require new parameter - `captcha_response`(`hash` - with three keys `geetest_challenge`, `geetest_seccode`, `geetest_validate`) and validate captcha response on server side, to protect from bots traffic. diff --git a/docs/general/encryption.md b/docs/general/encryption.md new file mode 100644 index 0000000..4a51566 --- /dev/null +++ b/docs/general/encryption.md @@ -0,0 +1,46 @@ +## Encryption + +Data sensitivity will be defined as follow:\ +**Low**: IP address\ +**Medium**: Email address, Location data\ +**High**: Full name, Street address, phone number, date of birth\ +**Very High**: Passport number, Driver’s license number + +Low and Medium will not be masked on the UI. + +| Field | Mask | Comment | +|---|---|---| +| Street address | No mask | No need | +| First Name | No mask | No need | +| Last Name | B****** | Display first letter | +| Phone Number | +380 **** 4556 | Display country code and last 4 digits | +| Date of birth | 1980-01-** | Hide day | +| Document Number | FG****64 | First 2 number and last 2 digits | + +### Approach +Rails offers a handy ActiveSupport::MessageEncryptor class, that hides away all the complexity of data encryption, and was wrapped in a simple to use service object or reusable module. + +Service object class doing the actual heavy lifting, but only exposing two straightforward public class methods encrypt and decrypt. + +System have weekly salt rotation, so encrypted keys in DB will be prepended with salt, which will be mix of year and week number starting from 0. + +Make sure to store `SECRET_KEY_BASE` somewhere safe otherwise, you would not be able to decrypt your secure data, also you need to have this ENV variable at the start of your application as it will not create models (Profile, Phone, Documents) which have encrypted fields. + +#### Searching by encrypted values + +To have ability to search by encrypted fields, system implements additional field named `attribute_index` which use [crc32 algorithm](http://www.sunshine2k.de/articles/coding/crc/understanding_crc.html) for storing attribute value. + +Make sure you have `BARONG_CRC32_SALT` to make algrithm more powerful. + +#### Rotation + +To update all encrypted fields to latest key values (salt will be "#{current_year}#{current_week}"), you can use following rake tasks: + +`rake rotate:phones` +`rake rotate:profiles` +`rake rotate:documents` + +### Fields masking on user API + +Sensitive data fields like `last name`, `dob`, `phone number`, `document number` are masked in user API by default. +You can disable this masking by changing the environment variable `BARONG_API_DATA_MASKING_ENABLED` to `false`. diff --git a/docs/general/errors.md b/docs/general/errors.md new file mode 100644 index 0000000..5b46bbb --- /dev/null +++ b/docs/general/errors.md @@ -0,0 +1,179 @@ +# Barong errors list + +## Resource module errors + +``` +resource.labels.private - Can't update Label. +resource.user.no_activity No activity recorded or wrong topic +resource.user.empty_otp_code Cant delete account. 2FA is on, but otp_code is empty +resource.user.invalid_otp Cant delete account. 2FA is on, but otp_code is invalid +resource.user.missing_otp_code Cant delete account. 2FA is on, but otp_code is missing +resource.user.invalid_password Cant delete account. Password is wrong +resource.profile.not_exist User has no profile +resource.profile.exist Profile already exists +resource.api_key.2fa_disabled Only accounts with enabled 2FA alowed +resource.api_key.missing_otp Theaccount has enabled 2FA but OTP code is missing +resource.api_key.invalid_otp OTP code is invalid +resource.phone.twillio Something wrong with Twilio Client +resource.phone.invalid_num Phone number is invalid +resource.phone.number_exist Phone number already exists +resource.phone.verification_invalid Phone is not found or verification code is invalid +resource.documents.limit_reached Maximum number of documents already reached +resource.documents.limit_will_be_reached Documents amount will reach limit by this upload +resource.otp.already_enabled 2FA has been already enabled for this account +resource.otp.invalid OTP code is invalid +resource.password.doesnt_match New passwords don\'t match +resource.password.prev_pass_not_correct Previous password is not correct +resource.password.no_change_provided New password cant be the same, as old one +``` + +## Identity module errors + +``` +identity.user.invalid_referral_format Invalid referral uid format +identity.user.referral_doesnt_exist Referral doesn't exist +identity.user.active_or_doesnt_exist User doesn't exist or has already been activated' +identity.password.user_doesnt_exist User doesn't exist +identity.user.passwords_doesnt_match Passwords don't match +identity.user.utilized_token JWT has already been used +identity.session.invalid_params Invalid Email or Password +identity.session.invalid Invalid Session +identity.captcha.required captcha_response is required +identity.captcha.mandatory_fields Mandatory fields must be filled in +identity.session.deleted Your account is deleted +identity.session.not_active Your account is not active +identity.session.banned Your account is banned +identity.session.invalid_params Invalid Email or Password +identity.session.missing_otp The account has enabled 2FA but OTP code is missing +identity.session.invalid_otp OTP code is invalid +``` + +## Admin module errors + +``` +admin.user.update_himself Admin can't update himself +admin.user.enable_2fa Manual 2FA enabling not allowed +admin.user.state_no_change Can't change state, as its already {active} +admin.user.doesnt_exist User with such UID doesnt exist +admin.label.doesnt_exist Label with such key doesnt exist or not assigned to chosen user +admin.access.denied Access Denied: User is not Admin +admin.user.non_user_field Search field is not a user attribute +admin.user.no_matches Search result is empty array +admin.user.label_no_matches Search result is empty array +``` + +## General errors + +``` +record.not_found Record is not found +jwt.decode_and_verify Failed to decode and verify JWT +authz.invalid_session Failed to decode cookies +authz.user_not_active User is not active +authz.invalid_signature API Key header 'signature' is invalid +authz.apikey_not_active API Key state is 'inactive' +authz.disabled_2fa API Key owner has disabled 2FA +authz.invalid_api_key_headers Blank or missing API Key headers +authz.permission_denied Path is blacklisted +authz.unexistent_apikey X-Auth-Apikey header is invalid +``` + +## Validation errors +### Admin module + +``` +admin.user.non_integer_page +admin.user.non_positive_page +admin.user.non_integer_limit +admin.user.invalid_limit +admin.user.missing_uid +admin.user.empty_uid +admin.user.empty_state +admin.user.empty_otp +admin.user.empty_role +admin.user.one_of_state_otp +admin.user.one_of_state_otp_email +admin.user.missing_key +admin.user.empty_key +admin.user.missing_scope +admin.user.empty_scope +admin.user.missing_value +admin.user.empty_value +``` + +### Identity module + +``` +identity.user.missing_email +identity.user.empty_email +identity.user.missing_password +identity.user.empty_password +identity.user.missing_token +identity.user.empty_token +identity.user.missing_reset_password_token +identity.user.empty_reset_password_token +identity.user.missing_confirm_password +identity.user.empty_confirm_password + +identity.session.missing_email +identity.session.missing_password +identity.session.invalid_captcha_format +``` + +### Resource module + +``` +resource.otp.missing_code +resource.otp.empty_code + +resource.labels.missing_key +resource.labels.empty_key +resource.labels.missing_value +resource.labels.empty_value + +resource.documents.expire_not_a_date +resource.documents.invalid_format +resource.documents.already_expired +resource.documents.missing_doc_expire +resource.documents.empty_doc_expire +resource.documents.missing_doc_type +resource.documents.empty_doc_type +resource.documents.missing_doc_number +resource.documents.empty_doc_number +resource.documents.missing_upload + + +resource.user.missing_topic +resource.user.empty_topic +resource.user.missing_old_password +resource.user.empty_old_password +resource.user.missing_new_password +resource.user.empty_new_password +resource.user.missing_confirm_password +resource.user.empty_confirm_password + + +resource.profile.missing_first_name +resource.profile.missing_last_name +resource.profile.missing_dob +resource.profile.missing_address +resource.profile.missing_postcode +resource.profile.missing_city +resource.profile.missing_country + + +resource.api_key.missing_algorithm +resource.api_key.empty_algorithm +resource.api_key.empty_kid +resource.api_key.empty_scope +resource.api_key.missing_totp +resource.api_key.empty_totp +resource.api_key.missing_kid +resource.api_key.empty_state + + + +resource.phone.missing_phone_number +resource.phone.empty_phone_number +resource.phone.missing_verification_code +resource.phone.empty_verification_code +``` diff --git a/docs/general/event_api.md b/docs/general/event_api.md new file mode 100644 index 0000000..bcf8d77 --- /dev/null +++ b/docs/general/event_api.md @@ -0,0 +1,593 @@ +# RabbitMQ Barong Event API + +## Overview of RabbitMQ details + +Barong submits all events into three exchanges depending on event category (read next). + +The exchange name consists of three parts: + + 1) application name (typically `barong`) + + 2) fixed keyword `events`. + + 3) category of event, like `system` (generic system event), `model` (the attributes of some record were updated) + +The routing key looks like `user.password.reset.token`, `user.created`. +The event name matches the routing key but with event category appended at the beginning, like `system.user.password.reset.token`, `market.user.created`. + +## Overview of RabbitMQ message + +Each produced message in `Event API` is JWT (complete format). + +This is very similar to `Management API`. + +The example below demonstrates both generation and verification of JWT: + +```ruby +require "jwt-multisig" +require "securerandom" + +jwt_payload = { + iss: 'barong', + jti: SecureRandom.uuid, + iat: Time.now.to_i, + exp: Time.now.to_i + 60, + event: event_payload +} + + private_key = OpenSSL::PKey.read(Base64.urlsafe_decode64(private_key) + algorithm = 'RS256' + jwt = JWT::Multisig.generate_jwt jwt_payload, \ + { barong: private_key }, + { barong: algorithm } + + Kernel.puts "GENERATED JWT", jwt.to_json, "\n" + + verification_result = JWT::Multisig.verify_jwt jwt.deep_stringify_keys, \ + { barong: public_key }, { verify_iss: true, iss: "barong", verify_jti: true } + + decoded_jwt_payload = verification_result[:payload] + + Kernel.puts "MATCH AFTER VERIFICATION: #{jwt_payload == decoded_jwt_payload}." +``` + +The RabbitMQ message is stored in JWT field called `event`. + +## Overview of Event API message + +The typical event looks like (JSON): + +```ruby +event: { + record: { + foo: "ID30DD0DD986", + bar: "example@barong.io", + baz: "member", + qux: 0 + }, + name: "model.user.created" +} +``` + +The field `event[:name]` contains event name (same as routing key). +The fields `foo`, `bar`, `baz`, `qux` (example) are fields which carry useful information. + +# Barong Event API messages + +## Format of `model.user.created` event + +```ruby +event: { + record: { + uid: "ID30DD0DD986", + email: "example@barong.io", + role: "member", + level: 0, + otp: false, + state: "pending", + created_at: "2019-01-28T08:35:29Z", + updated_at: "2019-01-28T08:35:29Z" + }, + name: "model.user.created" +} +``` + +| Field | Description | +| ---------- | ----------------------------------- | +| `record` | Created user up-to-date attributes. | + +## Format of `model.user.updated` event + +```ruby +event: { + record: { + uid: "ID30DD0DD986", + email: "example@barong.io", + role: "member", + level: 1, + otp: false, + state: "pending", + created_at: "2019-01-28T08:35:29Z", + updated_at: "2019-01-28T08:35:29Z" + }, + changes: { + level: 0 + } + name: "model.user.updated" +} +``` + +| Field | Description | +| ---------- | ----------------------------------- | +| `record` | Created user up-to-date attributes. | +| `changes` | The changed user attributes and their values. | + + +## Format of `model.user.created` event + +```ruby +event: { + record: { + address:"Illinois", + city:"New Garfieldbury", + country:"COD", + dob:"1984-05-22", + first_name:"Irina", + last_name:"Heathcote", + postcode:"10029", + created_at:"2019-10-02T08:14:20Z", + updated_at:"2019-10-02T08:14:20Z", + user: { + email: "clarisa_larkin@sawayn.info", + level: 0, + otp: false, + referral_uid: nil, + role: "member", + state: "pending", + uid: "IDEA819FB3F1", + updated_at: "2019-10-02T08:14:20Z" + created_at: "2019-10-02T08:14:20Z" + } + }, + name: "model.profile.created" +} +``` + +| Field | Description | +| ---------- | -------------------------------------- | +| `record` | Created profile up-to-date attributes. | + +## Format of `model.user.updated` event + +```ruby +event: { + record: { + address:"Illinois", + city:"New Garfieldbury", + country:"COD", + created_at:"2019-10-02T08:14:20Z", + dob:"1984-05-22", + first_name:"Irina", + last_name:"Heathcote", + postcode:"10029", + updated_at:"2019-10-02T08:14:20Z", + user: { + email: "clarisa_larkin@sawayn.info", + level: 0, + otp: false, + referral_uid: nil, + role: "member", + state: "pending", + uid: "IDEA819FB3F1", + updated_at: "2019-10-02T08:14:20Z" + created_at: "2019-10-02T08:14:20Z" + } + }, + changes: { + first_name: "Vernell" + }, + name: "model.profile.updated" +} +``` + +| Field | Description | +| ---------- | ----------------------------------- | +| `record` | Profile up-to-date attributes. | +| `changes` | The changed profile attributes and their values. | + +## Format of `model.label.created` event + +```ruby +event: { + record: { + id: 1, + key: "email", + value: "verified", + user: { + uid: "ID30DD0DD986", + email: "example@barong.io", + role: "member", + level: 2, + otp: false, + state: "active", + created_at: "2019-01-28T08:35:29Z", + updated_at: "2019-01-28T08:35:29Z" + } + }, + name: "model.label.created" +} +``` + +| Field | Description | +| ---------- | ----------------------------------- | +| `record` | Created label up-to-date attributes. | + +## Format of `model.label.updated` event + +```ruby +event: { + record: { + id: 1, + key: "new_key", + value: "verified", + user: { + uid: "ID30DD0DD986", + email: "example@barong.io", + role: "member", + level: 2, + otp: false, + state: "active", + created_at: "2019-01-28T08:35:29Z", + updated_at: "2019-01-28T08:35:29Z" + } + }, + changes: { + key: "old_key" + } + name: "model.label.updated" +} +``` + +| Field | Description | +| ---------- | ----------------------------------- | +| `record` | Created label up-to-date attributes. | +| `changes` | The changed label attributes and their values. | + +## Format of `model.document.created` event + +```ruby +event: { + record: { + doc_type: 'Passport', + doc_expire: '3020-01-22', + doc_number: 'AA1234BB', + upload: [], + updated_at:"2019-01-28T08:35:29Z", + created_at:"2019-01-28T08:35:29ZZ", + user: { + uid: "ID30DD0DD986", + email: "example@barong.io", + role: "member", + level: 2, + otp: false, + state: "active", + created_at: "2019-01-28T08:35:29Z", + updated_at: "2019-01-28T08:35:29Z" + } + } + name: "model.document.created" +} +``` + +| Field | Description | +| ------------ | --------------------------------- | +| `user` | The up-to-date user attributes. | +| `doc_type` | Document type. | +| `doc_expire` | Experation time for document. | +| `doc_number` | Document number. | +| `upload` | Array of updaded objects | +| `updated_at` | Time of document object creation | +| `created_at` | Time of last document update | + +## Format of `system.user.email.confirmation.token` event + +```ruby +event: { + record: { + user: { + uid: "ID739065AFD3", + email: "example@barong.io", + role: "member", + level: 0, + otp: false, + state: "pending", + created_at: "2019-01-28T09:03:50Z", + updated_at: "2019-01-28T09:03:50Z" + }, + language: "EN", + domain: "www.barong.io", + token: "eyJhbGciOiJSUzI1NiJ9.eyJpYXQiOjE1NDg2NjYyMzAsImV4cCI6MTU0ODY3MjIzMCwic3ViIjoiY29uZmlybWF0aW9uIiwiaXNzIjoiYmFyb25nIiwiYXVkIjpbInBlYXRpbyIsImJhcm9uZyJdLCJqdGkiOiI5OWJkNzFkMjU2NTdlMmI1YzI1MCIsImVtYWlsIjoiYWRtaW4xMjNAYmFyb25nLmlvIiwidWlkIjoiSUQ3MzkwNjVBRkQzIn0.OI5tL9kV6cA1JBAy7G5iqd3WplxcB-waHYKFjm83koMEpx2Hlw9fksq5lip5cIHTjR8i3ambFL40OaCwDNc1jAiDsHwuv2nLswgi88_M1G8KVFylboQdtgmH_cZiz-Y-51Fq2oqEID5QyJnsSMSJbfspb6A0JGT_V-SPK4WFZw43F_RKhlZBCrxojljMwd20rGqFPYirMgUpsfiW0_-mESXzQ7UK1eA8mYO7Id4y6JR2Yoo-JTloEnBL1M189tOz6LqmmQB0M_QjTiHG3y9I97Med3StgVziYo9qog9kJXyPuXbboddg__5WEhMcWbaToohoiT5UvpVJHKfgxEVaDg" + }, + name: "system.user.email.confirmation.token" +} +``` + +| Field | Description | +| ---------- | ------------------------------------------------ | +| `user` | The up-to-date user attributes. | +| `language` | The language. | +| `domain` | The domain name of barong. | +| `token` | Valid confirm-acc jwt token (mandatory param for user confirmation endpoint) `/identity/users/email/confirm_code`. | + +## Format of `system.user.email.confirmed` event + +```ruby +event: { + record: { + user: { + uid: "IDB1629BFE9E", + email: "example@barong.io", + role: "member", + level: 0, + otp: false, + state: "active", + created_at: "2019-01-28T10:17:27Z", + updated_at: "2019-01-28T10:17:45Z" + }, + language: "EN", + domain: "www.barong.io" + }, + name: "system.user.email.confirmed" +} +``` + +| Field | Description | +| ---------- | -------------------------------- | +| `user` | The up-to-date user attributes. | +| `language` | The language. | +| `domain` | The domain name of barong. | + +## Format of `system.user.password.reset.token` event + +```ruby +event: { + record: { + user: { + uid: "ID30DD0DD986", + email: "example@barong.io", + role: "member", + level: 0, + otp: false, + state: "pending", + created_at: "2019-01-28T08:35:29Z", + updated_at: "2019-01-28T08:35:29Z" + }, + language: "EN", + domain: "www.barong.io", + token: "eyJhbGciOiJSUzI1NiJ9.eyJpYXQiOjE1NDg2NjQ1OTUsImV4cCI6MTU0ODY3MDU5NSwic3ViIjoicmVzZXQiLCJpc3MiOiJiYXJvbmciLCJhdWQiOlsicGVhdGlvIiwiYmFyb25nIl0sImp0aSI6IjRhY2IzM2IzYmE2NDc0ZjY1YTI5IiwiZW1haWwiOiJhZG1pbjEyQGJhcm9uZy5pbyIsInVpZCI6IklEMzBERDBERDk4NiJ9.Rie4LCbkV0jVBbhMoceYx8a9uDA-ea9D1v790zlIqP_EY8Iue_OOKXYWiC1Y-55MPicFbknBILjZlPewvAF8ZrhqIt04ROsgBdDGEUGY_SnLWhXzqSx9-v_o_w2MVjLOUxvRBm6sD0RvL-_5LmOcLqhYtf7ZPUnPDwsvhDedqDfbXPEvI7OK2SZ-1uPAOg1IMOX1k7xaDt5I1Wp-Knr2DmEgwNYbIjaXraComYcMdtVSuYVJAufgA0kTADMeT3cV3jzGy9dNfs8heMCtf5tr72IbL0_N0VeUQj9uaPDUr4ntsYk7gOPmA3RSVrSismtYdBXA9oLA0b0YfOctiY9dqg" + }, + name: "system.user.password.reset.token" +} +``` + +| Field | Description | +| ---------- | ------------------------------------------------ | +| `user` | The up-to-date user attributes. | +| `language` | The language. | +| `domain` | The domain name of barong. | +| `token` | Valid reset-pass jwt token (mandatory param for password reset endpoint) `/identity/users/password/confirm_code`. | + +## Format of `system.user.account.deleted` event + +```ruby +event: { + record: { + user: { + uid: "IDB1629BFE9E", + email: "example@barong.io", + role: "member", + level: 1, + otp: false, + state: "deleted", + created_at: "2019-01-28T10:17:27Z", + updated_at: "2019-01-28T10:17:45Z", + } + }, + name: "system.user.account.deleted" +} +``` + +| Field | Description | +| ---------- | ------------------------------------------------ | +| `user` | The up-to-date user attributes. | + +## Format of `system.user.password.reset` event + +```ruby +event: { + record: { + user: { + uid: "ID30DD0DD986", + email: "example@barong.io", + role: "member", + level: 0, + otp: false, + state: "pending", + created_at: "2019-01-28T08:35:29Z", + updated_at: "2019-01-28T09:42:36Z" + } + }, + name: "system.user.password.reset" +} +``` + +| Field | Description | +| ---------- | ------------------------------------------------ | +| `user` | The up-to-date user attributes. | + +## Format of `system.user.password.change` event + +```ruby +event: { + record: { + user: { + uid: "IDC554ED1D0F", + email: "example@barong.io", + role: "member", + level: 0, + otp: false, + state: "active", + created_at: "2019-01-09T15:54:56Z", + updated_at: "2019-01-28T09:59:03Z" + } + }, + name: "system.user.password.change" +} +``` + +| Field | Description | +| --------- | ------------------------------------------------- | +| `user` | The up-to-date user attributes. | + +## Format of `system.document.verified` event + +```ruby +event: { + record: { + user: { + uid: "IDC554ED1D0F", + email: "example@barong.io", + role: "member", + level: 0, + otp: false, + state: "active", + created_at: "2019-01-09T15:54:56Z", + updated_at: "2019-01-28T09:59:03Z" + }, + id: 1, + key: "something", + value: "verified" + }, + name: "system.document.verified" +} +``` + +| Field | Description | +| --------- | ------------------------------------------------- | +| `user` | The up-to-date user attributes. | + +## Format of `system.document.rejected` event + +```ruby +event: { + record: { + user: { + uid: "IDC554ED1D0F", + email: "example@barong.io", + role: "member", + level: 0, + otp: false, + state: "active", + created_at: "2019-01-09T15:54:56Z", + updated_at: "2019-01-28T09:59:03Z" + }, + id: 1, + key: "something", + value: "rejected" + }, + name: "system.document.rejected" +} +``` + +| Field | Description | +| --------- | ------------------------------------------------- | +| `user` | The up-to-date user attributes. | + +## Format of `system.session.create` event +```ruby + event: { + record: { + user: { + uid: "ID30DD0DD986", + email: "example@barong.io", + role: "member", + level: 0, + otp: false, + state: "pending", + created_at: "2019-01-28T08:35:29Z", + updated_at: "2019-01-28T08:35:29Z" + }, + user_ip: "127.0.0.1", + user_agent: "Chrome" + }, + name: "system.session.create" + } +``` + +## Producing events using Ruby + +```ruby +require "bunny" + +def generate_jwt(jwt_payload) + Kernel.abort "Please, see «Overview of RabbitMQ message» for implementation guide." +end + +Bunny.run host: "localhost", port: 5672, username: "guest", password: "guest" do |session| + channel = session.channel + exchange = channel.direct("barong.events.model") + jwt_payload = { + iss: "barong", + jti: SecureRandom.uuid, + iat: Time.now.to_i, + exp: Time.now.to_i + 60, + event: { + record: { + uid: "ID30DD0DD986", + email: "example@barong.io", + role: "member", + level: 0, + otp: false, + state: "pending", + created_at: "2019-01-28T08:35:29Z", + updated_at: "2019-01-28T08:35:29Z" + }, + name: "model.user.created" + } + } + exchange.publish(generate_jwt(jwt_payload), routing_key: "user.created") +end +``` + +IMPORTANT: Don't forget to implement the logic for JWT exception handling! + +## Producing events using `rabbitmqadmin` + +`rabbitmqadmin publish routing_key=user.created payload=JWT exchange=barong.events.model` + +Don't forget to pass environment variable `JWT`. + +## Consuming events using Ruby + +```ruby +require "bunny" + +def verify_jwt(jwt_payload) + Kernel.abort "Please, see «Overview of RabbitMQ message» for implementation guide." +end + +Bunny.run host: "localhost", port: 5672, username: "guest", password: "guest" do |session| + channel = session.channel + exchange = channel.direct("barong.events.model") + queue = channel.queue("", auto_delete: true, durable: true, exclusive: true) + .bind(exchange, routing_key: "user.created") + queue.subscribe manual_ack: true, block: true do |delivery_info, metadata, payload| + Kernel.puts verify_jwt(JSON.parse(payload)).fetch(:event) + channel.ack(delivery_info.delivery_tag) + rescue => e + channel.nack(delivery_info.delivery_tag, false, true) + end +end +``` + +IMPORTANT: Don't forget to implement the logic for JWT exception handling! diff --git a/docs/general/password_hashing.md b/docs/general/password_hashing.md new file mode 100644 index 0000000..1caf0b3 --- /dev/null +++ b/docs/general/password_hashing.md @@ -0,0 +1,71 @@ +## Barong password hashing ## + +### Overview ### + +Barong since 2.0 version use OpenBSD bcrypt() password hashing algorithm, that allow us easily store a secure hash of users' passwords. + +As a base Barong takes [bcrypt-ruby gem](https://github.com/codahale/bcrypt-ruby) - Ruby binding for the OpenBSD bcrypt() +With [rails 5 has_secure_password](https://api.rubyonrails.org/classes/ActiveModel/SecurePassword/ClassMethods.html) it gives us full power of algorithm + +### How it works ### + +Hash algorithms take a chunk of data (e.g., user's password) and create a "digital fingerprint," or hash, of it. +Because this process is not reversible, there's no way to go from the hash back to the password. + +In other words: + + hash(p) #=> + +We store the hash and check it against a hash made of a potentially valid password: + + =? hash(just_entered_password) + +### Rainbow Tables + +But even this has weaknesses -- attackers can just run lists of possible passwords through the same algorithm, store the +results in a big database, and then look up the passwords by their hash: + + PrecomputedPassword.find_by_hash().password #=> "secret1" + +Our solution to this is to add a small chunk of random data -- called a salt -- to the password before it's hashed: + + hash(salt + p) #=> + +The salt is then stored along with the hash in the database, and used to check potentially valid passwords: + + =? hash(salt + just_entered_password) + +bcrypt-ruby automatically handles the storage and generation of these salts for you. + +Adding a salt means that an attacker has to have a gigantic database for each unique salt -- for a salt made of 4 +letters, that's 456,976 different databases. Pretty much no one has that much storage space, so attackers try a +different, slower method -- throw a list of potential passwords at each individual password: + + hash(salt + "aadvark") =? + hash(salt + "abacus") =? + etc. + +This is much slower than the big database approach, but most hash algorithms are pretty quick -- and therein lies the +problem. Hash algorithms aren't usually designed to be slow, they're designed to turn gigabytes of data into secure +fingerprints as quickly as possible. `bcrypt()`, though, is designed to be computationally expensive: + + Ten thousand iterations: + user system total real + md5 0.070000 0.000000 0.070000 ( 0.070415) + bcrypt 22.230000 0.080000 22.310000 ( 22.493822) + +If an attacker was using Ruby to check each password, they could check ~140,000 passwords a second with MD5 but only +~450 passwords a second with `bcrypt()`. + +## More Information + +`bcrypt()` is currently used as the default password storage hash in OpenBSD, widely regarded as the most secure operating +system available. + +For a more technical explanation of the algorithm and its design criteria, please read Niels Provos and David Mazières' +Usenix99 paper: +https://www.usenix.org/events/usenix99/provos.html + +If you'd like more down-to-earth advice regarding cryptography, I suggest reading Practical Cryptography by Niels +Ferguson and Bruce Schneier: +https://www.schneier.com/book-practical.html \ No newline at end of file diff --git a/docs/general/profiles.md b/docs/general/profiles.md new file mode 100644 index 0000000..bfe7d08 --- /dev/null +++ b/docs/general/profiles.md @@ -0,0 +1,45 @@ +# Barong + +## Profiles story and administration + +This document explain original profiles submit-n-verify process and possible customizations. + +## Version + +Story described in the document actual for latest 2.5 stable version and higher. + +## User side of the story + +`Comment`: Previously (in 2.3 and lower) user was able to submit only 1 profile, and all later modifications affect it. Starting from 2.4 we changed `user has_one profile` relation to `user has many profiles`. This was done first of all to be able to track history of modifications and to be able to control changes from admin panel. Meanwhile, it also brought additional manual verification step in the legacy KYC process. + +`Story`: +User can submit profile with following fields (all are optional by default): (via `POST /resource/profiles`) + +``` + t.string "first_name" + t.string "last_name" + t.date "dob" + t.string "address" + t.string "postcode" + t.string "city" + t.string "country" + t.text "metadata" +``` + +Profile creates with `drafted` state in database. At this point user can edit the information (via `PUT /resource/profiles`), and administrators will not review it yet. +Once all the information is edited and validated by user correctly, he can submit profile for verification (via `PUT /resource/profiles`) by passing `confirmation: true` in the params. Profile state changes to "submitted" in database and from now on this profile is pending for admin verification. + +Meanwhile, there is a possibility to skip this "edit" step and create a profile directly with `submitted` state. For this user need to pass `confirmation: true` parameter directly in `POST /resource/profiles`. + +After admin will verify the profile and mark it as `"verified"` or `"rejected"` user will be able to create a new profile with `drafted/submitted` state, if he need it. Flow mostly controls by a `server-side rule`: user can have `ANY` amount of profiles, but `ONLY ONE` of `drafted/submitted` at a time. + +## Admin side of the story + +Once user sumbit a profile (with state submitted) admin can verify or reject it, by changing a profile state and creating a correct label. Usually its `key: profile, value: verified/rejected'. + +Also administrator has an access to the full profiles history, so he can check and compare new changes with old profiles, if the exist. As well he has an information about previous decisions about profile verification per each request. + +Once profile is rejected or verified, admin can create new profile for user (via `POST admin/profiles`). +In this case, profile will have a 'submitted' state and 'author' field with admin UID in DB. + +`!!!Attention` By default, if admin creates a profile for user, the same admin account cant approve or reject this profile, he need to wait for second admin approval. However, this can be changed by env `BARONG_PROFILE_DOUBLE_VERIFICATION` which can receive 2 value: `true` for enabling and `false` for disabling the feature diff --git a/docs/images/amqp-mailer-schema.jpg b/docs/images/amqp-mailer-schema.jpg new file mode 100644 index 0000000000000000000000000000000000000000..22f25b7e7e77b410461c813149cd8df30574381e GIT binary patch literal 57159 zcmeFZ1ytNiw=dW+5`qP%(clh&MuR1Iqrrkha2j`q&Pi~mX{6BvcXv(jMuWS%yW8X3 z@7{ZI=G|}B_h#m;b!W{Ktfs1V?Y)1y{#Es_-nEPSiTee>D;Y_!B;e5_0N~NX58!?p zAO?8y_|Np`=aYx@6y@ok=>-bPGZfSpFJGd*Kt+9tj)ndb4HFF&6$2Xs6YJG0>{l<* zad2^7;XdSF{VC+ppPWygzIb4Kg@%guQ2W1_?tcKVUp%sWO7i3p72q-UqbJyp?%M!l z4z*e(1;t0BESsP@bYZ`4i-y z5U_D5m7d|^;d8uKR*CvPNWcj)u>S*AdO*dc8a;%P_OoSi={dE-7g5Ku^43FcF~j>Q z0Q!TWkFlR%14IBkHhY2F!BSJbWqclGY+KZfdNy1|RtBa(6fi9#ov{ugm7>VV z1U(MnL&PI;=ZbYn-k@sJ&Y@OEl{2slWmQar`kxnRbS&jpstybEZU^<;1FD874lIkH zuQ-|)vP8IqF`NgMPC1lHW)aD0S$ zCTEB9sF%u8*v(%gtgpI`7k`A^1D5y`Wtx|f%9pbv3LrOxEJC^=g8D6j2xsW zo9c^xesj`%#@#B5C0jd)?Vm+GejL}zIrTRyVg$>D5SVV~W+0=-QIf}5!X$1u|6@sAC;=c}ytvhK1lwNlsc>6VHjc(e-6 zqO{n~TX9oKh!*-#+Dd3c#4}6@hEXQeqC||l{ITv+qDMK^f)ZC)o}(= zr4>F!ATg7!?id1&!lqvp#&la-ohz?|Gvj181lJ(s^0Y%PG(x)LodYc!Lr^UB*_QUX zt7Jhku&=Ty$jet#1*}T^;>R@_v(vn+ZKHDQ>A3tRZ`Y_y`5i}7S=yx78s%l4unE+h z`R;0~+Xt`7uX033brsYj?RTslSU$a%mCRtB>cmOKe9sD|M=J%(xT!y%{c(ooYOJuu zM_})21ENy7e7mXcP5wot3iFLLcQiO(R<~Uw8q8R(=nwbw@jBpMIQ2GLywy#2vAd>^ z7S{6CNww5xXHVRQlmKPYbA%Eal+P(_?7O<~6V(h(s>W5BikvGHtSjL`A0n##DCrh6 zYQW5J3ft7@t9|Ff^MfDV8(s9_AJ^mu4F=h^bme6XYE}?Dpb1rA4?0I8XcF^{-f4bmn z+oWJzPFXqL;1$_BxxRC_*x&VUoUGqTzYA9W^$J;UM({`Is7djtsl`{j^FPS4?DFHX zzU$=F`Vdnk1tQNBr`;>)`-FW49fv*nGL1Nmp6alC-pT0XXYeLE{jweOR7MzIh$Ts! zeNx0g0d_N_;|X4~?9BjBtCC<5A!)T+ee*SnliNTaSLL&_NIzBu;1{%W-lTmQz%*6W+RjndJgMxAT&&q<$4THx zexK9T6-F)z;}nTVwYqZZOgBoXyt z$p|iafjP2X*1BEhoa>P4oKfg(;2-Nd_Mb`9Tv`oHt|6H&@sE_Hzw} zf-7Y-*8)u*L&4e3Pil-E4)Sg3qibrbn0hgzZU|Ojjseny^b91j037mi z^Bm#VJgkeGgVjK(v0nfbGUdNd=IqRY78K7r5B+Q6#mso4po4$Dy zinC1sK;Au0fU48{Xo`PgOjez|y9gO06-OW{kmy|LWo&W}xV`AQ;5?=z8~Zqz9OmjT znx3pn@~q63)IfQqNHnu7P)XnV$lhltaFCJ_1X4Pu)JYYLl52wk^^EHaO8Lb&u(d+` zhr=18*-pnjQ(ukQ9GLB18T3)DM|_G}Jp}rG{%?{}18P^&`w|FSxdzLB&lPlc?*=UoM8^fXpz%_~z^x=1OFOq|Tag;3Q!2jR zRj~e)S_mvcq>+x0EFyX;y!bF)?%jWzVf;^lNFBzk$=3DY!a>;hIW^XNO9;+=UDw(} z4AXrSpZP4(AvU)&RC0anq|f4S0@b1%tUuqNSN6EB8Cx~;5XT`^1l9027=qXoE8tVa z(VcNg>B54SZ{j}xQ+@w!2mznU?JqSY+YA#)eadtMWBjc%`J|>HESuZ02!`Y9Ap`q~ zOQD>tdjPOk{QvH{g<_O8H05ZtM>g+XQpp2^Ym_GZ3>@i6AS%}vL+xP1lh3rJl%c_i zEvJb(?1n=b!}u7j^)KY-QmZGReHN5cZDv}+Os1?`9(Q@OZ@fvlT}Q6&0i{@KHu1vY z#PwU=(1{T7r+q{d`NR1ZMW-J(ziuq%H)W6C272T>{XDT7ombhuYtwp7%u(|HH~7zf zh-!D%D;e`vS)50?S|(^08XCVe%eoFwB*)6QaN)ZL1T48RC_-&LuHDzePwfvMmXn0U zE5-wghxg^1JEhKN-LL0HbqeiL03qLiO-rHJ6HXAvGxD#w%#U#O==4U$5^0?xok0SbQ%F z_rfAG<_b@YN*7LEh|F2}oW1||Rsl&*JkyOyMju=^g5-ZZzwV2e>k@j5b)HDk7|Mvdw*yy~B+z#VGrtQZEFU^6+Q;K~a5zp8EE?TVrQR844#@2&t zh8*kN*W0zuedGTS?f!$ej^}-&_C}}C&;J=G%DH40Z~lW1#_c~KoR@6lQ*E{Q)$D%v zj|>uruwm7T!w);#JIe>Iq&~YH+ynNe#&3|Rm%e=iX$kgtt0X?M7`+cU)jp0m_HLCQ z0P?8qzdH00c)~{ar%{S&O;PhGpL4Pc(3%`EInG~@x1Q0kYQ^7?Q8KFIoB0&c^&VJf zYU)Sv42f2vM0|XZ`LN%$wQEi|5oKfB{b&st?vD1Wl;2L^b`aY4)yrz8n(DkjmfU^C z`n`br24BYrI#Rws@L}Nh`u{^COpfL)zGraIB4KWES5@g9rAG%4W2aa4N#K0Pf;v~AZfFJM$;sRaKw zXuZ(l^*4z-%R#hI-KjjwYI&7`S6TIPO1i3@TwQ=C>F?A-2fmMc68}s}6w%}_v(j`3 zFEg@~wL(UqX6YKlh4zuw#C}-h-2vvzaKXZ4I1D26OuW$WDiU9Ctm3&wQKq?P6eK!7 z?z0!mTlto)nPqIZS@M z0<;HVPfdko$v-h35$A}W1d+9{$I3Yg%gc&P3J0Ly+4&Wlf6|$q=MbS)O+4$%HHXrd zc?cLoSIi=@HQ<`=)nr^h|2^Pe zQHh%KVr14+On41;d3niX{EJ6kTns1_%`roDY1}EcGE#mUyI0e>l2&wcW%h+fMUj ze!odUZtOw{>q@&3JY`hk14eE(TG}$@@S+>jFtd3& z?Qp^MgwT*iv#Asu9a-skG)g;l-@@bp_lDi8{tAvM3*>~8$(G~p+y&0>u?0flPHm~azMqTZCk z&*^MkJ2?%o<2I-WO*Hi}wJ@!lP2dP0nXDSoUQ>oB37FP_!ara|7|N97Y;38CxV%iI z;C;42DMT+3=N`PG9XspCYgAU8sf(k2-X|*4ms1E0Vvq@K)--0PT(zG_DAtV+8pRSY zjBg)6s|WV!AdXe~uy?~8tIS3*2^&}l57|O4_*46^+%(vibO{d}MG^$QQJOJokCITf zocn#bqaB1k2VH*OM|*Z7n|6n3b}Z%egr7H$N6hc9DzP~Nw2L^28`6Qb@C_6PTUDz7 zw7;qX{?bDB3w>oSXY!va1|l1k%1GJ&!a{yfqTg1>zOV-6a(xGi_DDD8)BCGRXz^2X zkdyw;-aGTX&t`O|l3gl^bNkOm+&BxjD|es8ia}`W>Rt{wYH`b_Y@Su6pb93)_DQYj zMA;*Oktf^~G8a6II`cnz3rzI&w&-;G2GQ77)E%S|hrt1!H7FB#Q~+rs}~eg9QObu_1#lOSM`DFo%~BZs7oVl zvx$E9@n=AR%ICk>{>(k;47dllj5V*x-2-|Bzy4mLT@XH0Y+hxYPCU=^z6UTW0stQL zd4I7#!!8zisXcIZj&@lr&TcPmInWY&eB0Ra@GgEKkiJ1bjaq{xzo+pUz(Dv3kXx5B zQ{};{o}wxCxJ z|6|un5CD0VkU23D-!WX&=FqE8TO3VU5RLnlj*}^q3to@_i_^7df{f%Kt8t7?A11e# zC|F`-&lg!># zr#$dTF+IOOaR#}(xVvl7t}R`v_MS_wd17S9UG7St=)#ADjrdoZjE=Iro@9!2*TCT1 ztfqy$fIj>Kav&Gjmj^Lc2+(9?tC^HJajwPBMY9TGP0W+={80H_hMH|YG?Z%8k>7-7 zHjP?v-0r2JqMBC3%l0>$(`Ik;(;JYb7jYrJJy;FaRm))IIWC?!yq>4&O1R-b`biP< z3y!(ox~ReUCoveSiF8>w#S3ZO*%f1#8dBPU)@YxmWP;{a--e@-BBBxkYp6MGop*S< zc?u!{#Jms3$FlDpp08)?`MZ#t@iaoB?s$dc?_=5`PQRuMf!_ILAPq;QUxB(U(0+^JHCo|uL1ruo2$x<_LVjS< zdJ19uOVHRd)=h#{bAI;a;*{G+{WLZ^t=Qk-nH6?WTyjl9 z)fJChf8+RZNT#a`v&$#r+x1&}9C}*QdJmvWWZ&AnbMu%nxCcbb$DKOe0|fcVsq^#8 z6!49*$x0f2D5X>rL05)NZgoWlu>L|C@TASz*#+EE;Iv%zPmvugxP=!LA^Ft8lU!Pk zA4&dAjgZZohxwD$b5#dTA;rQT9i60qSvnj(q4$Yl;5R+L+465@(ky;_Yd?+F`waM3 z4;=h%i=Cj9y1H=^Q>TJ}f&1t5-_?-+WeVo=z^$#F=zr@nK6PD5Yc2WGl;xPKwN#o8 zduF#7)=Gk|#c5!z8j8gXSWt>=-@+gRmRbIjCUnHm(cf7h$Kjg5{?avKY4XXMv`r#i zXdY6b_>?8F*#QPEChJ67K0Xp==+&CMNf(%$?5rU;edQpR#?^gRNbMmQ0JI1%Vv03i zxnL&%wdwhIH-zuD)AESv?aJSZGxM>>VRj(Mu(%ezx<$LX?g2w$Lt3{f)j_RF4s?(r zBRwC|Jhb|H-B1ZtISJLat)BM$cSas^M$F@DG9%h_`#=Lhml0Xbso?|tOolQ%3j+$m za^RTAsjwM5S$ob*jOiy39xEi2020p!(cHRVnE`uUC2!dD`U z&K%MUb7Dg~EJPP;Om^yGlc}vurPim?I7Q(8?+c7_t6hDd1vVZ-)qg1Z8pXtISLl(5 zN4lSS5*uEP->^3Ir@<8Ml}>eYm&h8!9g3+sEp zN;TpUWaYvuQ4A4ZK*!56>4IfW)f~XJeapMz$~k*z*strUenx{e-LCdBv?=NUZJ&%P z8^ZM384GY>MXtGQj@20KO!_A9lB>}La^1a{ z6+a6uer-)%s~5Qyg>;-V**P}0VC@Osvj`DDcfsh>>1KX5sy#CMUX}m!Xvmjk$~hgx z&c)}41G4}}T>>vdy9)8^4tlqQH*sOo4=_PF zWoYGsqY}iw4bf4Fwd-}@8MBPC?#l;9InT@H8Z1r98XvL40S(Z1`P+j6p{}{aMxMoPGrgPENLDoqS6#3 zf@q2B16A$pyuW|3wl1|4NT+jAMK5Po>r-plV@Tu-wkI-=nq-~F7oL_CMi1FR}b;r^Em7#=XOZ!maew?I8SBh1iL zsOjt&uU|2sFL3<>HHkS>kbE7vwrpoyXgAH|tf z=9hsP>lrieR2ROT_tlkx_*KVhE^F#| z6xDQ2Dvr$&BO&mzJ9)vZtCmE*_KZ5P>?bFSL&8{Nkrppd)spF0JJ&eDZaD)!1fLGe z^m0Ma$Z{m1c^G@9s_qI!`zfh0r3oA6^Dt#_WvEd(EW%NAl#1)bwya|=!mFYc?J3$M zb=Kczh7nUYr%uI4Y#o1;9Yfz48C#X+2R<(4GRn`=uQzjvR_DG8mV~-c$-qr!A6CuY zp0DH?Mdg*O3b;{g2q8V~cW&O5-rTnmVfzFzJKAJBo{we(gKBmSHY`Hsyku6^LPkcO< zMZodyvIj?(I7_jiW@GP$(lVQ}0@DaMR90Jj3ZAACFuxNA0j^o((Ni&`8Hp50-2UMV zEpR~rOG&&80Ok6{@@@0A@3x~wF|)@`VR%WnOARoIs#drK**3tu8*W4oi9pgPho#Fa z#Kj~%6?(Gj2d+$9^_JVS5p3P*9sVteCQ~^Wy__;LN>Ld}5C%vkD@ycApe;uwE{J$a zC)m*E!TICL?aX_kvLI4>XK<4qjs`cj$tu~A;+vfsO5|?O<9vB`s8gg&rS;xIo6((f zV<-+4lV(VUrqEbs8Ai*{q=F4q4|{ZpK0g1^z&k$Ce?~U`ig(L0(9+R`;irj3o~gDk z3i+wqFN(-M?^9F4$$#Jl%zURCz(1o@Rzll<yOQV zmt*}V)t%k5ARH-}Uim9!ZShe+qaN4u6_CESrr(*t?;N!I&QX)}aF;sVnHehl`sOFV z^Ig61dw}^uw@)$glOtepQ$fr18@3dumvZoAlH#tO-q6x`eN%GTxozq)MTT7``r4gs zmhgLk_>aQgLpPj44iXLfjFpQW^p6`$m?A1q17!j;mop4 zW{!Rik}>+x86_Ob{=j`l+j2&8Gk8vu7`Wt0LqLtsaD)> zDSlZQ_(IK@`Szm2qFmR#_|5c~m&NpMX2_VF?WvUr!?eA~rc9{6>eQt~$HL}W^E+b) z8TqW(wz6rKMZr{Ige=+CRJqbk*48Ye#6agFcASWp3d>?{y*#(v@%EWF^tp_Aa2oB& zR#893sIfpo=Z(4JgpHi5fV|KyD@{heA2!fIQtD?E(V9TwGRxZGX-_N~i@%z7wY^<^Y6>kjug8CRF*W zM2;O9Ps+oN6l9X#Q-VK5LS(HG391%Hhm*EKrDlJq8MCbu$n_@=?T%?(E%PsAs_43B8a7H_JsLfhtdr2H&%C{d;ZZraW!sb{=AU)qgk96lj>w;w0K=YfB}=3 znhAGxS_vG-$fb};>cue^!ok!lA-n#lmA>aZyzJNLw#&=)q@UWY`W8g@!SmM7@IGQF72@6i|gn{)GJ0(Qe;UIK~8YPFHD zkFP)C(#D1E%6$9QPm=XTMy@^-Rz^jo+|}C?O~#h~_VZ*sxk;0yoldMrYN64S>_Y2G zo=ufz;}f{FJN#`Lge|w+_Nyk$Gptl?b|kIq{Oy$8q@NgLV?lSZeqJDJL3h(1~8$(Zz((owTy zov8KXl-uc~E@sZQv4v>1nT*RuS{JbpnbCJZ+FtjxERu7^ex=2!-DOXwmK`(gT?HlL ztE7FelYKw^ZsPLzrf?=vpu#;HYniW*k+m%1klrr}ZAHl&pJ8_MDoduhOuDSnx#be> zm~s#Jj`qvab4aGy(Pz`frNg`K9uUZ|dj`&))?$BS-oT6K8I`fgM(RduC}WV`bWR?k zwS7o7lJUt$Z8;)R8)BhXULSE>Yz@sqZnD$1NAXP7WW0tOr!Uun*^|1QTGY~g5T{k0 z7Ny))@hQllI}E|cc^8m=+}pU!#=QA^z=%=)JpeY+y4Xsmc&3+Fl@GlKP<@9UX%L-Z ziB`T-)5jcx-1U5O`Lo`_zxk4u$V)f@TDB?wCv%*@Jz&M|ht@ZyVhx#*dw|KvwOaE% zfL>Pr#@ApQKaBpGt!}FD9&iP{o3}e(AcB1d;Z)V!JvhPp5Tp21#LWgQ8)t-ni7CLBrQU6h%nqug zt}m7Jb7u(b@uQVk(|?^ctC7q^KYfEoQi+>w0&l; zO_%V?sinU~W)Mei=eUofb~Pe*d4-}CY0QqW_X*aFc(ttMRX5oe@QqV)DoEuHPBX${ z^g>o9@MRJY^!U0`yzH@+gUG|%+MaMb_$CPBkO86J29FPLyhZ|%P^9Smy1da zteT2NJtyxbl(o6azV3r@L%6;Tz-WOPU5TTPeJm1*(Rqw1?M;s>CcLFLF_awoMN)T& z)Kq36*&~x>$L(Zsco6IHks-WT5~Yl;*v(A(&JJ4cYc%xAhWd`};^nT=PAZ91(;nmW z6St!eOB0Uu4;#>-VSn8$sOKGJ*vm8!vS3hE(vcYU8XrY$bU;C)&|5z9Zm1}*eOHv- z^2KtO3T%N@Mn=!NqRLXq!4DWkXpbY;8yFI`-gZ^6Isdlj+ou};v8<}v3MntTbhlv0 z@j=kAHM`4&~W=6U$XL;bWmWC zj?tkY-5UEoHJg;}m$=ZIpma@^fu3-$0MTk6$aProUPgZZcW^I}kGNSLiCEUPtU*Q1 zKD4|=8LZ`|iJ+AhpamjVEQxZ-&P*4=I)v=?y?hN{GFm4Qk5WKn>%W~RvATS_IOJupA*%Y#_o{F;bL z9YR5%_B)W=Mz1WsB;2@#`1)}g)a4id5FJU`8y1rbf{i{E>&G2+VR|$YRE#`r^Wicy z#Q5iU2QX^T(R%#HZ{z&=6&~5r#%k9kdvAIZo=%Pw4UYf#mZi#1x0RhX@GErA{5F%4 z!EMI1jVmD}MQZ3B4xil4)%a4x&t==OVifAqF`%a|fmzLs5Y#Ctywgag$_CBZ=E}-9 z_QP}_EEXxW#V#fKQI=}C6-*(N*>%EsvT}hUG%}Y}GXnHiirVSXwzM+UwGp9mVrGb@ zKMCphVKqc4DlKQWd4Y1+7! z`r1FG`OQyz^HCFjL;J$Maf7ie!C<6x6#lBDUGkomvUiYraMSWCZF}aolg56MN~bB- z1MP_tdv7Jv7P3ku`M0$L8Xa0xwX9W<m(W zRQT6VQ$7J+JOm^HkT4fa`k+1UPF>GW$2g=tubbd$xck`O4yPQb_pD!19fL0&yEeVJ zEK?6giWhRB#_aM>ZYTG#W*@UZJboRcjr!#J^Me{$7f2Qz6}4^1Pos0perkM&T{Q(q zP-(C*G55fQh5CVNa~YO@nByIB%nd&Kj{o>0-fk}`(T7(9o(R2_(|Y~Sf7%jol#2Z; zySeSirBlJPfhc`3{lSawp9y^?d;R*td|YHPSO2H-U6-{T7ULn=OV1m{|8L5RvbX9X z?xU8C3!Q{_EPzk=MI5v(O!hG_T^O0Elqie}^Or7SrH;aXh0f>>8%;a9P3up$6nyD0 z0L(^niUJ{J=jF0%nFU=Tw{#+02x0XS^yr+*$~n1~n%(NyuX))E4_gW43>x^AFuMgv z@gA_@Lg8+`z= zO3;{*Cq5~43<9R9^ruE$Qlc1If`{pxqY%>50!kaDF+Y>(h^M}BNgREj+;asxuAU(n zIuG65-KQV+3rdzk8a=y~H%vtcq?d&0*)lEB%TU;npbJm+jI3vv<+loXztgm#(^nHWsDqNoj5<{BA86Z zKHb2@B7lq_Q$ZK`&egXToVzBZ6<;}5`fPb%)a%_Ep!`^C?s32JDx@<**6^-~9=ytu zyK1#OfE7Y@%0I_3mV{ya+&@%&rYC)5Jwx8B3{KKi zv*mK)Q`#JCB6!k**9|h@>8nCWMfwiH7S`#2m<`>+Fwr1U_kNF7%esmI-SX}u1}u;F z0-J|g5Ns{8KC&(_f+yYjskntYk7>r;u9NFtd%4IxK<(SG*Ff}k)VOGMFnNHjm2Q-%h z2J-}Uj87t^4QPD4V3Cl^F0*N(iJhico2&RJPi`TJN`$m2SDR*?i&9~<>&DIql}J$M z9~&#aq&{==7&7X%eTZVl*iu`*Fx#wjKP*PohVC9LLDNIu@%Ld|g(<<{BA6{>+XYMg zZ1=2GK=<&J4$k13*X5_1uUJEu&JVWNvJLg7hD92T?e%7?-Ck^`aps#?^#%^yY+$5_2Rh2S3B$)E|jCcY+EWR&=s z9W5+d4Qrb*Wmz9M%{?hWF&}jj;@Frij#A$i@^`XZUXs(C8zRe_OA8#&K=2yw1i-T< zBb!vC*+Y%XIz^lXExmUnn87s=+jk+EvKc9LFhjtkwRM07!^n$EGVRy$3w@C2WayJ|W) z+{N8HrbCeL<4Go2W6{>Wsca+=>OC1gqTrQ8rM}bdD@usErmHqn!d4yE1ujCzUCD$i zPSZOxDpOhuPcnw4t2Z>XhLhvfxE4rZiyxG=&1xB8#A($P&APS0VA829g?v3CF6`KXu6Mpwp}me!mm3$-@1ZMcx2;=IanrO`zrLWL66 zwNH}g=XRSRJv_8y6hT|T+W8_yOJxSa-n{evu)BA(cXKGKhkU^4BRF)@pppP+Y3Z`1 zqw8nlZibL@csUbUYfp$58Sr7zt#MmRd1%P``0!PKN<;jdvst32rBKlO$`X%;V-iM; z)-r3|!If`ORMfkL@{MFGQ3%?xWYK9&?1!5uUck6`IQsdJn4(0@TuFLe=16&!4L(}^ zNr-)55mH9>l$Np+dL1SvijkYN*qzh;u(Ph_K2BuLv37npW(^Ht3u{sDEoX}y#pC1hCt z$c}BAn>Fi*y@l}I=F=v$ZdYdrO4Sk1VOQOp2V3Xg?LJ(?6c6~D42i2JdT-iKD<5uc zZvL=q)D?znhe?>9T_%V} z_%~T%qi)PR>W!d-RJVX-bbalIi>maGT27tLq`rJPRY*RGooe2jm_Lz@uo6yU zD@A`o*TY;FIXNJknVo3ZYTMo^pIOs`X3wZemlHZ<3Zq`=y0{2!;>h;(G+Z8b*!7NH ziYY1?sn3H{4vt+Sc;d(ntTV&O)2p>=*X^h1sGijMNY;K=W=$&Mj6zy8! zx~FJ?9=9x=x9qMg_d?n_LZjDz1`oQzNY)2pSS2%aWdzc*`!GAceV6c;5Xx_u>mb42 zErdlM{F;Wab=iZ(C1*?rQqaCAkM@L|#jNs7Y8dN=6d$n=7$Py|#-#sPq7ZRZ3FMTy zX;x0Bg?w?Hikyu)3KM6+P6cR6&8M~~| zM<5`ygf~)EOg6FQsO~<|-ph+pQ&d3oy=LNr4?<(EsbxN--vhP?x-JWy`tapJ zz0+7O>{D4Qj&0I_C+fzYpdTD$U;4zonzDzd(`o~tdU^tdZlI;wB`ME63q@CphHJHM z#U)No?CdMoVP&%&5-Gb_Z)OWIarDZOp2+A@1D0HvRJ7m1HJTEze8K{>2ja#iD*bGY zKdO)u&F?1#b4pKhn64@=I#{1^%U>D=8zj0HNR|Wvg$h6%{hk?qscOaav~?xE+3HQ^A#w`o6T46U8kt+u}x4Qa>xqT?U%3OtBi>@;Zw zfv9EBDsF~<)V@QhR9ExZN}50*RzKVl=PGggjd5$n7@bpDyVX%9^yC%tTubZ>&_cON|Zq)+{PG<`5 z((B?B>)bIB9kK(%E<(oDxK~-}ne7G5?Q5ckc-}DlvbRkg_9wuia`hn*Z{CPT0aRbP zlBt^GmBj1sUa1rp0bUrmx>p8GoLn1OBMzf#9P_wBgPcR30790({`$KA_|cPVNs&t$ z=nvnUcdw!550UgV5f`sAXZ3~W%ZgXsZ>LUTZ)2d${eZ`%3TanGZH~;uUev}5eA~4c zO_e=VD>f=p%R?-mqHRhUV_)uX=>ID-L2r#R3H)Rl?n#TC(0yMy+GsniC5O}?PDaIZT(%<^Ew zO1RhURRa-;z1j+2)_bU9_^`F0ElXo-UK%BL{6Lco%b>OB4ueV>KN%$a2rsiFO>0Px zI7}xB5gF6cFfkQvv{t3b6NfCYb|I+mh%Yk3&2Z4Q>Qr5Ay$^p zPVr%Lu|v5BB$;rW=Koma?+6_}&Houzr#yD4OWrcZGbxE?ua}UFkBOMX-PSeXFe8g_ zj8e_a2*Pq9q?t28k8sh1yn$=uTNCTONmmzySDc!f z3iwe1W0yJAfiaN~qxJ%LV6 zFhu2B)>BSv>s)a?YVpM;@rUIlYWWJrX1Yz`C^cDmuLP%h~hkY6COow+HGLLmCUbgE1nio2pci1`-V>IeQuddC`<PhCJ3bDFCvu&BC|7@^JwAMmisGogX6nAjOZl=UqH zy3`TaRcXu9AjS>UXkgxw!-~3<)8;p7exZpg*=GI#$4n;bMxJ=5BSiT?Uv+nk-}>Wh1$kJg=X9xe!m) zPMHTGhgXRDQY_crfWx32&2Xo^pS-f7C6MAL4?$=^m`nSIE{X8in1$DFs7_j>L}WnbQJkx&jKzxxYA)n$d*>Di*do zB!%O?O74<@v8?MrViF>I{pS>MfQt&>rZq2V#|7l+yjxuU94q_}A*Iw={B`3Z(Pa** z3$L=MV!Da9LMaHDv^s#!Cqh(WfxM(D#dTR4Z0=Mt+PhT3?gV-q8K-Pd?2X{tv-*L{ z=Vz>i>>BU0O#*bdDd=RhA+#0>@ zV(6y!2Ibu>N-N-7DKW1Hk!P?Zt$G#Y**92Ay3%++;gs4iM_`A?GMj>2ncvuB#Kqff>Z86ty!9N9 zzb)N116tA_RU z=lDxJB)fZA&9k?%@y|fNQ+|$XQp8%JZ5^j3k*Wty*jCp)oNBqAvVFoE_>Ck)lBAOV z_C;8K?L6_;Q&$rS-vHweg^Vgk6k_OHk`~wNWX@GX`b@E~OR?ZX5{$ER75%-t%#DAF z8_a?-_rTPnED$<7_+YH zru>t>deY6pQiEixcjL(Tb#v~s<8H zioz1R`O8$))un>P6#X1sKvP!Jk*j(h@Wl|ZFc>Tn8rsCE1OyT*K6nKpdj0e~mJ1xI zsb^}iAHu}Q1=rVK?&EHPa&H~Y%pgUsHmuUK>rZG9r2?f8G zgN~2c?$86fI&;IET5av4$JY|CO^_3y+*!Hcx{9CT#PN!RZR_dZdQ&vLg4HRCq*mLn zSnP;^t!BDj`7CV2yVHY#%?hC^YaIp0DVj;;;qpqr0haYG0H9p^^MA|^!2i;w@jto# zk-;LTxSiIz2OvNXH$sp8R*L(4-7b6&fIl2q&*h%qWC{WvZKUM<#gBidGCcOB-`2#0 zzbIn-^4ZAT0JyZG!$1~(4=}{>b*)>r(5nC7n^7x5lM&bu==T}GRIIueD;)MVf6Ll+ zA|TIImO?UF?Ubi}Mtucg09665KeF-2j0c2o65q7C18VwqLSC}l<7VU3uwOBheDhf}q+ z`}lh7f3WwKQEhf>yC^l@Vx>@|cyWh9NN{M21}$y@iff>_LtES-1k#|z3GOa!DH61} zLm^0UcX@Z#`Np@uuJ7!#_S$2df9E_SKjs{BX3G6cd+vE(*PXmt5wUJAoi2$KP^R)` zQG_|ht>hEufD>PoB%9HJ2>7&3X3f%*nTPjBGx1D)&0hRb#XkrC05Y(zv^I6u=#Tjm z+Np>>s%7QSPG;`Nl(=K!XEbPj?ts|Jfp+`YEFnJSdc16K0cwD9C2IEjzwLg&_;NMG02VW}l-?#%lBvpaE< zB=M`KQ(8PnY`KZOaVf9@U3o}8-!LXMbA zjJXre{k6bUv*x=igkXED57nH?cc^87I2ZS?vi#}=2t441 zoCmI!#cALwYiWLZuMVgRNC%cjIm8renWRlfuSV+xQBg?$e7)JGb*EUTcbI5#`;hM~ z&Hlu$>#xar|M97UQ}s)x3Da)5_>-r;&e~Wz6JDJgOMPtD2;dI_E9}0NIbNbFRJXE@ zEQ z==#BVVpjxMmIVa<*=zbg#PMbgXQ^cNy@QdIy~Cfako=>0p?z4&pW6QeA^FQZU7%>m zL0C9CTHxoD<#g?#sO^*35%xFX8_K0VT$&~oQ7Jz|rg&n|N&w+!s}QQ_FF0=hpyfdr z+C?$TXTHM0rNIu72htv8mDNy}vZ`na2fpU++ws9oyB(X+sT{|XR|#9N%a?sKer-cb zZA?&m0234QMV#aZsPJK{G{?~4e7_r1uVez3l=JAuC+cA>X5TYu)1&XgG6iPb=P^M& zI!kJ8g+?$IeXwf0eV-%G3$m1arzZ;ZbTA5TQ~>AXeg>@ejSM$ ztaRPDdwf2(eSbH_##}em90JW^cxgcx8wK?3A5csFeM->Qb>kSgi~zQ8<|ymzWhmD>_Svm|iIU-~ob~fjwr4gt zlAHV10}|Gzp=w3Y7EU(O3a6?qxS2q>ps=^DG)|3cBn|yG%jf4*=RRjw(#~1YeKH#V zHKQJ<{0x24Ngej%rpvqEuD6ImWxQ$Hsd1rJu7Nmn^-{@Di>yCOFv043)2^s(_%8VQ zs-yKYq$#jPOgl2FA>uPk6v#ef{kr-PA!Rv&z~89-{_ejj`4=Isa(Ix; zlLG$nWq0)7ING2H!<^zxnQ_&aKX< zn(#gWhJIRBkQsx3eq!RX3$?*YjT<3UhrJO~9+FmJ>xc`6w-;>`jBLSV5`))<;tgfn zV}_baq89~4r4nNqTW4C!MJe!7v`Jq?Go67wx9V8rvVJ;`hp^6J%@vJ!V;?N+aq*1* zkmkU6Ei&=N@XYJf;gdXT5plgd;~?U~g~AWNp*~=RMC);W*+Y$;Cg5t`U`l#GC(!eF z)wpk0-Al^k9a|cv$k9m2LbztZm#4p&`a+m^vVH5blEbRH6IHKPTLCGWS@au{kSSDMcI^(ilqf6PuX-T zP+oPVOoOEqU@onY_0OE64I4C2uJTp-)m+QdN-@o@I-ZYPs2RdbbPzZj(Gn*N^Qb5k zkeE%a-(dNqpD7dJw^`a2rQWaIv6W;yE9+@!6b8@ca#6xe?+R*A;+hxs3hDNheQFW) z?chW5W+0G@-)g>BE53E5ZcGsz)UZ?#&Q$R-@Tpl|r>+Zt?{cQH�{|aXFp__DpX?0%d0$Af>kXr|vjg&CC0m>~KO0rv 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 MPx# literal 0 HcmV?d00001 diff --git a/docs/images/api-keys-2.jpeg b/docs/images/api-keys-2.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..d0b9dddc39b2976628205274402e38827aaaa244 GIT binary patch literal 71144 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 z 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 x2VLN>X~!;Lu#F}Zlvo%|C|FVpl@dzhfBA(uyu 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∋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 VXV_CrkpTSByrQf2TE#N_{{yUTq4@v+ literal 0 HcmV?d00001 diff --git a/docs/images/mailer-retry.jpg b/docs/images/mailer-retry.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9ea998941c0f958862948e1aaf6b1f6d29aca63c GIT binary patch literal 30023 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 bZz;w`u3fIC5Z$0K`|^K!#{b{J@9F;ql2^8= literal 0 HcmV?d00001 diff --git a/docs/kycaid.md b/docs/kycaid.md new file mode 100644 index 0000000..3b40738 --- /dev/null +++ b/docs/kycaid.md @@ -0,0 +1,47 @@ +# Barong KYCAID configuration +In Barong 2.5 and higher you can use the external KyC provider (KYCAID)[https://www.kycaid.com/] to fully automated your KYC process. + +### Basic configuration +Barong now support 2 ways of managing KYC - `local` and `kycaid`. You can switch between them using `BARONG_KYC_PROVIDER` env. By default this ENV has `kycaid`, as a value. If you set `local`as a value, then legacy flow will be turned on. `Profile` and `Document` steps will require manual admin approve from tower. + +### Credentials configuration +Once every credential is setted up correctly `KYCAID` will work in Barong out of the box. Lets see what we need to set up to make it work properly: + +1) We need to set up a bucket for storing docs (docs submitted by user will be stored both in barong and on KYCAID side) +Basic creds needed for that should be set in envs: `barong_storage_provider`, `barong_storage_bucket_name`, `barong_storage_access_key`, `barong_storage_secret_key`. +More about available options read here: [Barong storage configuration](https://www.openware.com/sdk/docs/barong/configuration.html#storage-configuration) +2) We need to set up authorization creds for KYCAID (get one on official site https://www.kycaid.com/). ENVs for that available under namings: +`barong_kycaid_authorization_token` - for auth secret token, +`barong_kycaid_sandbox_mode` - for switching between test mode and prod mode (`true` by default) +3) Be sure to check if `barong_domain` ENV has a correct value including `https:` at the beginning. This ENV configures the `callback` url, so its improtant. +4) Be sure to check `BARONG_REQUIRED_DOCS_EXPIRE` ENV value to be `false` if you want to include `address` verification in your KYC process. You can set it to `true` if only document check needed. +5) Check if in the `authz_rules.yml` file you have permitted path `- api/v2/barong/public` in the `pass` module. This allows platform to receive `callback`, as it is in the public module +6) Check if in the `barong.yml` file you have correct list of `document_types`. Be sure, that you have at least this values inside: + - Passport + - Identity card + - Driver license + - Address + +### Sidekiq +Dont forget to check if your deployment / local installation has running sidekiq. As soon as all the jobs are running a-sync, we use sidekiq to interact with `KYCAID` in order to make user verification fast and clear from user point of view. + +Sidekiq runs with a command `bundle exec sidekiq` with the same image and ENVs as barong. + +### Verification flow explanation +First 2 common steps of KYC remains unchanged. We still use internal email verification and phone verification using Twilio. +#### Profile step +After user has submitted profile - we send a request to KYCAID, registering this user in KYCAID database and creating a n `applicant` record for him. At this step no additional checks provided by KYCAID team. + +#### Document step +User can submit docs (2 or 3), depending on the type he choose. It can be `passport`, it can be `driver license`, etc. +User need to provide photo of `first page` of document, `second page` if needed and `SELFIE`. +After user has submitted all the docs, we send them to the `bucket`, configured by platform (to save them internally and show on `tower`) and also send files to `KYCAID`, downloading them to `KYCAID database`. + +After that Barong triggers `verification request` with 2 types - `DOCUMENT` check and `FACIAL` check. From this moment verifications and checks are performing on `KYCAID` side (check their site and contact support to find out more about `algorithms` here https://www.kycaid.com/). KYCAID team sends back a `callback` with decision. +In our system, both `FACIAL` and `DOCUMENT` resolutes to one label, with key = `document`, so if one of those verifications fails - end user will get `reject` on his verification `attempt`. +If verification decision is `approve` user will automatically get updated label to `verified` and corresponding level. + +#### Address step +Address step implemented pretty the same, as previous, document one. User sumbits document, that proves his residence. +After user has submitted all the docs, we send them to the `bucket`, configured by platform (to save them internally and show on `tower`) and also send files to `KYCAID`, downloading them to `KYCAID database`. +After that Barong triggers `verification request` with only 1 type - `ADDRESS`. After all verification process on the `KYCAID` side `BARONG` receives callback with decision. If its positive - user get his level and `address`:`verified` label. diff --git a/docs/mailer.md b/docs/mailer.md new file mode 100644 index 0000000..ca6e0da --- /dev/null +++ b/docs/mailer.md @@ -0,0 +1,239 @@ +# Barong mailer + +Mailer in the barong app is a deamon listening events from RabbitMQ, it renders emails using templates in the language set in user profile (if possible) and send emails. + +This guide explains the basics of using mailer to manage events from rubykube Event API. + +It is usually used by following components: + +- [Barong](https://www.openware.com/sdk/docs.html#barong) +- [Peatio](https://www.openware.com/sdk/docs.html#peatio) + +Read more about [Peatio Event API](https://www.openware.com/sdk/docs/peatio/api/event-api.html). +Read more about [Barong Event API](https://www.openware.com/sdk/docs/barong/event-api.html). + +## Concepts + +An _Event_ is a message produced to message broker in [RFC7515](https://tools.ietf.org/html/rfc7515). + +Events have the following structure: + +```JSON +{ + "payload": "string", + "signatures": [ + { + "header": { + "kid":"string" + }, + "protected":"string", + "signature":"string" + } + ] +} +``` + +## Deep dive + +By specification defined in _RFC7515_ we can build a JSON Web Token. + +After parsing of prebuilt JWT, you will receive this payload with this structure. + +```JSON +{ + "iss": "string", + "jti": "string", + "iat": 1567777420, + "exp": 1567777480, + "event": { + "record": { + "user": { + "uid": "string", + "email": "string", + }, + "language": "string", + }, + "name": "string" + } +} +``` + +**Note:** All events should be properly signed using RS256 private key. + +Mailer validates the signature of each upcoming event. + +Further, we will see that mailer user can work with this payload directly. + +```JSON +{ + "record": { + "user": { + "uid": "UID12345678", + "email": "johndoe@example.com" + }, + "language": "EN" + }, + "changes": {}, + "name": "string" +} +``` + +## Run + +| Variable | Description | Required | Default | +| ------------------------------------ | ------------------------------ | -------- | ------------------- | +| `BARONG_EVENT_API_RABBITMQ_HOST` | Host of RabbitMQ daemon | _no_ | `localhost` | +| `BARONG_EVENT_API_RABBITMQ_PORT` | Port of RabbitMQ daemon | _no_ | `5672` | +| `BARONG_EVENT_API_RABBITMQ_USERNAME` | RabbitMQ username | _no_ | `guest` | +| `BARONG_EVENT_API_RABBITMQ_PASSWORD` | RabbitMQ password | _no_ | `guest` | +| `BARONG_SMTP_PASSWORD` | Password used for auth to SMTP | _yes_ | | +| `BARONG_SMTP_PORT` | Post of SMTP server | _no_ | `25` | +| `BARONG_SMTP_HOST` | Host of SMTP server | _no_ | `smtp.sendgrid.net` | +| `BARONG_SMTP_USER` | User used for auth to SMTP | _no_ | `apikey` | +| `BARONG_SENDER_EMAIL` | Email address of mail sender | _yes_ | | +| `BARONG_SENDER_NAME` | Name of mail sender | _no_ | `Barong` | + +```sh +./bin/mailer --config=config/mailer.yml run +``` + +Mailer creates one queue and bind pre-defined exchanges to it. + +## Configuration + +Mailer is a flexible tool, you can cusomize alomost everything. Biggest part of customizations defined in `mailer.yml`, but you can also modify templates. + +Each Event API provider uses own AMQP exchange and algorithm to sign payload. + +```yaml +exchanges: + barong: + name: barong.events.system + signer: peatio +``` + +Using keychain algorithms and defined public keys for each provider mailer will validate the data. + +```yaml +keychain: + barong: + algorithm: RS256 + value: "public_key" +``` + +In `events` you may define any event type from Event API providers and prepare email template for it. + +```yaml +events: + - name: Email Confirmation + key: user.email.confirmation.token + exchange: barong + templates: + EN: + subject: Registration Confirmation + template_path: email_confirmation.en.html.erb + RU: + subject: Подтверждение Регистрации + template_path: email_confirmation.ru.html.erb +``` + +The simpliest mailer configuration will look like this one: + +```yaml +keychain: + barong: + algorithm: RS256 + value: "changeme" + peatio: + algorithm: RS256 + value: "changeme" + +exchanges: + barong: + name: barong.events.system + signer: barong + +events: + - name: Email Confirmation + key: user.email.confirmation.token + exchange: barong_system + templates: + en: + subject: Registration Confirmation + template_path: email_confirmation.en.html.erb + ru: + subject: Подтверждение Регистрации + template_path: email_confirmation.ru.html.erb +``` + +## Templates + +Mailer exposes few variables for usage inside the templates. + +| Variable | Description | +| ---------- | -------------------------------------------- | +| `@user` | User related to this email | +| `@record` | Created user up-to-date attributes. | +| `@changes` | The changed user attributes and their values | + +### User + +User with related profile. + +| Variable | | +| ----------- | ----------------------------- | +| uid | Unique user id | +| email | User email | +| role | User role | +| level | User KYC level | +| state | State of user's account | +| referral_id | UID of referrer | +| profile | Information about KYC profile | + +### Record + +Record always containes `UID` and other attributes, that's why we can also expose user, by searching with unique user id. + +Example: + +```ruby +record: { + uid: "ID30DD0DD986", + email: "example@barong.io", + role: "member", + level: 1, + otp: false, + state: "pending", + created_at: "2019-01-28T08:35:29Z", + updated_at: "2019-01-28T08:35:29Z" +} +``` + +### Changes + +When entity changed, this will contain attributes before an udpate. + +Example: + +```ruby +changes: { + level: 0 +} +``` + + +### Queues and exchanges schema +![Mailer-Schema](images/amqp-mailer-schema.jpg) +### How retries works + +RabbitMQ Cluster is part of our infrastructure and the default queuing solution. RabbitMQ has Dead Letter Exchanges (DLX), which allows us to simulate message scheduling. + +#### Steps to test the solution: +1. Publish message to TargetQueue +2. Consumer gets the message and tries to process it +3. Process fails, consumer rejects the message +4. Rabbit routes the message to RetryExchange +5. Message moves to RetryQueue, sits for 2 minutes +6. When message expires, it is resent to TargetExchange and routed to TargetQueue + +![Mailer-Retry](images/mailer-retry.jpg) \ No newline at end of file diff --git a/docs/migrations/2_6_migration.md b/docs/migrations/2_6_migration.md new file mode 100644 index 0000000..17b24d5 --- /dev/null +++ b/docs/migrations/2_6_migration.md @@ -0,0 +1,64 @@ +# 2.6 Migration procedure + +## Introduction +2.6 version brings some important security improvments by allowing a better isolation of secrets in Vault. +API keys secrets where moved from Vault kv secret engine to transit engine. API keys secrets are encrypted/decrypted by Vault and stored encrypted in the main database, reducing the size of vault storage. + +## Setting a unique an meaningful application name +The application name is used as prefix of secrets stored in vault, it allows you to configure proper isolation using vault policies, see [Vault](https://www.openware.com/sdk/docs/barong/vault.html) documentation for more details about ACL configuration. + +The configuration entry for the application name is `barong_vault_app_name` (or the environment variable BARONG_VAULT_APP_NAME), see [Barong Configuration](https://www.openware.com/sdk/docs/barong/configuration.html) for more details. + +## Vault token for the migration +To export and import the TOTP you need to use the vault root token or a token with the following policies. +Replace *opendax* with your vault application name. + +``` +# Read api keys +path "secret/barong/api_key/*" { + capabilities = ["read"] +} + +# Manage the transit secrets engine +path "transit/keys/*" { + capabilities = [ "create", "read", "list" ] +} + +# Encrypt engines secrets +path "transit/encrypt/opendax_apikeys_*" { + capabilities = [ "create", "read", "update" ] +} + +# Decrypt engines secrets +path "transit/decrypt/opendax_apikeys_*" { + capabilities = [ "create", "read", "update" ] +} + +# Export otp +path "totp/export/*" { + capabilities = ["read"] +} + +# Create otp code +path "totp/keys/*" { + capabilities = ["create", "read", "delete"] +} +``` + +## Migrate the API keys +This will fetch the API keys from Vault kv secrets store engine, encrypt them with transit, store the encrypted version in the database and finally delete the legacy version stored in vault. + +``` +rake migrate:26-api-keys +``` + +## Migrate the TOTP secrets +TOTP secrets can't be exported by the official Vault build. +To do so you must use the openware patched version available in the docker container *quay.io/openware/vault:1.5.3-openware* + + +Then run the following command + +``` +rake migrate:26-totp +``` diff --git a/docs/migrations/postgresql.md b/docs/migrations/postgresql.md new file mode 100644 index 0000000..4273f3a --- /dev/null +++ b/docs/migrations/postgresql.md @@ -0,0 +1,9 @@ +# Use PostgreSQL with Barong + +Barong supports PostgreSQL 13.0 and higher. +To use PostgreSQL you need to set the following environment variables: + +```bash +export DATABASE_ADAPTER="postgresql" +export DATABASE_PORT="5432" +``` diff --git a/docs/releases/2.1.0.md b/docs/releases/2.1.0.md new file mode 100644 index 0000000..1668a9b --- /dev/null +++ b/docs/releases/2.1.0.md @@ -0,0 +1,85 @@ +## Barong 2.1.0 (April 22, 2019) ## + +### Overview ### + +Release includes significant new features, numerous functional fixes and stabilizing patches. +Barong 2.2.0 comes without views, controllers, huge dependencies, but with clean, fast and readable API. +Release is optimized, more compact and elegant version of OAuth server concept. +Since we've removed dependencies like `devise` a lot of the flow was not only recoded but implemented in fully new way. + +This release notes is must-read for migrating from 2.0 version. + +### Release is NOT compatible with 1.9 or older versions of barong ### + +### New features ### + +* [#655](https://github.com/rubykube/barong/pull/655): Reworked (complaining to 1.9) seed feature. Supports seeding levels, users with optional parameters and labels + +* [#679](https://github.com/rubykube/barong/pull/679): Adds an ability to upload N number of documents. Maximum number can be configured by ENV + +* [#665](https://github.com/rubykube/barong/pull/665): Support of GeeTest captcha and captcha configuration + +* [#681](https://github.com/rubykube/barong/pull/681): Move all admin functionality to API + +* [#686](https://github.com/rubykube/barong/pull/686): New authorize endpoint (White- and Black- listing features, Rails Metal based (optimized), api keys and cookies logic) + +* [#716](https://github.com/rubykube/barong/pull/716): Ability to specify and control CORS policy + +* [#726](https://github.com/rubykube/barong/pull/726): Support asian language characters, rework validations + +* [#734](https://github.com/rubykube/barong/pull/734): Add tokens blacklisting feature. Additional checks to avoid reusing tokens + +* [741](https://github.com/rubykube/barong/pull/741): Unify errors format to prepare base for translations + + +### Enhancements ### + +* [#677](https://github.com/rubykube/barong/pull/677): Improve activities coverage +* [#688](https://github.com/rubykube/barong/pull/688): Add change password endpoint +* [#693](https://github.com/rubykube/barong/pull/693): Change multiple docs uploading logic from object to array to become compatible with browser files transfering policy +* [#697](https://github.com/rubykube/barong/pull/697): Add label on profile adding without level increase to strictly +* [#709](https://github.com/rubykube/barong/pull/709): Add referral_id to users table and as an optional param on signup +* [#707](https://github.com/rubykube/barong/pull/707): Update to ruby 2.6.0 +* [#745](https://github.com/rubykube/barong/pull/745): Add event API documentation with examples +* [#767](https://github.com/rubykube/barong/pull/767): Add language field in reset pass and confirm acc events +* [#763](https://github.com/rubykube/barong/pull/763): User controller improvements + ** Fixed inconsistent indentation in user controller + ** Rework POST '/get' request to allow to receive email and phone num + ** Added several additional tests +* [#771](https://github.com/rubykube/barong/pull/771): Add pagination on /resource/users/activity endpoint +* [#769](https://github.com/rubykube/barong/pull/769): Search on user fields, admin API +* [#785](https://github.com/rubykube/barong/pull/786): Add Entities::Activity model, include it Entities::UserWithFullInfo +* [#789](https://github.com/rubykube/barong/pull/789): Use 'paginate' on api/v2/admin/users/search +* [#804](https://github.com/rubykube/barong/pull/804): DESC order in user activity API +* [#807](https://github.com/rubykube/barong/pull/807): Allow to list API Keys without providing OTP code +* [#809](https://github.com/rubykube/barong/pull/809): Update rails-related gems versions in favor of vulnerability alerts + +### Fixes ### +* [#658](https://github.com/rubykube/barong/pull/658): Fix share cookies for development, fix Bump +* [#664](https://github.com/rubykube/barong/pull/664): Fix user activity api endpoint bug https://github.com/rubykube/barong/issues/663 +* [#674](https://github.com/rubykube/barong/pull/674): Added missing validations on password update functionality +* [#675](https://github.com/rubykube/barong/pull/675): Fix unhandled totp errors +* [#683](https://github.com/rubykube/barong/pull/683): Hotfix for whitelisting public peatio and barong routes +* [#684](https://github.com/rubykube/barong/pull/684): Add missing link_config script(required for deployment process) +* [#685](https://github.com/rubykube/barong/pull/685): Update the production database configuration with DATABASE_NAME from env +* [#694](https://github.com/rubykube/barong/pull/694): Add missing event with confirmation token on signup +* [#699](https://github.com/rubykube/barong/pull/699): Add carrierwave config for production +* [#702](https://github.com/rubykube/barong/pull/702): Small fixes (drone ci, event api updated_at bug) +* [#706](https://github.com/rubykube/barong/pull/706): Add missing users entity on login and /me +* [#718](https://github.com/rubykube/barong/pull/718): Move ActionDispatch::Session::CookieStore to sessions controller +* [#720](https://github.com/rubykube/barong/pull/720): Add ability to configure expire_after time through env variable, fix hardcoded one +* [#724](https://github.com/rubykube/barong/pull/724): Fix change password api action from post to put +* [#713](https://github.com/rubykube/barong/pull/713): Split swagger doc into restful and management) +* [#737](https://github.com/rubykube/barong/pull/737): Add storage envs in config store and update fetch logic +* [#730](https://github.com/rubykube/barong/pull/730): Fix change code on phone initialize, remove code from logs +* [#739](https://github.com/rubykube/barong/pull/739): Fix Barong::CORS load problem in production env +* [#742](https://github.com/rubykube/barong/pull/742): Add missing user details in 2fa login response +* [#749](https://github.com/rubykube/barong/pull/749): Fix session_id check & add bypass session lazy load +* [#753](https://github.com/rubykube/barong/pull/753): Change default set-cookie header policy on authz to :skip +* [#757](https://github.com/rubykube/barong/pull/757): Take only data from Vault::Secret object && minor refactoring +* [#747](https://github.com/rubykube/barong/pull/747): Phone API improvements (additional error) +* [#760](https://github.com/rubykube/barong/pull/760): Add additional error on login in case of banned user +* [#768](https://github.com/rubykube/barong/pull/768): Add more API Key validations, fix error on creating with invalid algo +* [#772](https://github.com/rubykube/barong/pull/772): Split activity no records error to wrong_topic and no_activity +* [#776](https://github.com/rubykube/barong/pull/776): Use destroy instead of delete to enable missing validations +* [#805](https://github.com/rubykube/barong/pull/805): Move event api jwt private key to Barong::App.config store diff --git a/docs/releases/2.3.0.md b/docs/releases/2.3.0.md new file mode 100644 index 0000000..c276b09 --- /dev/null +++ b/docs/releases/2.3.0.md @@ -0,0 +1,114 @@ +## Barong 2.3.0 ## + +### Overview ### + + We are pleased to present Barong Open Source 2.3.0. + + This release concentrated on improving overall project flexibility, security and session updates and several new storage/phone providers and updates + + 1. Server side sessions via rails cache + 2. Restrictions and related Admin API + 3. Support Twilio Verify service (without dropping legacy sms solution) + 4. Flexible state - labels flow + 5. Support Ali Cloud storage provider and S3 custom storages + + This release notes is must-read for migrating from older versions. + +### New Features ### +- Add ability to configure sms content for phone verification [#877](https://github.com/rubykube/barong/pull/877) ([ec](https://github.com/ec)) + - This PR introduce an ability to configurate (via ENV) before deployment the future Twilio sms content: + - "Your verification code for Barong: {{code}}"" - default one + - You can change position of verification code, words and content in template + - e.q. "Hoooray! Here is magic {{code}} for you to verify your account!"" + +- Simple rake task to create users and api keys [#816](https://github.com/rubykube/barong/pull/816) ([ec](https://github.com/ec)) + - [ATTENTION] The best usage for the rake task - testing purpose + - You can generate up to N (1000 by default) users with valid api keys to simulate any platform actions +- Add Resctrictions [#891](https://github.com/rubykube/barong/pull/891) ([dnfd](https://github.com/dnfd)) + - AuthZ level validations to ban traffic on a network base. + - Available types of validations: IP IP_SUBNET CONTINENT COUNTRY + - After being created restriction can be toggled to be turned ON or OF via admin api + - Full support of CRUD functionality in the admin module +- Feature Ability to change UID prefix with BARONG_UID_PREFIX=ABC [#893](https://github.com/rubykube/barong/pull/893) ([ec](https://github.com/ec)) + - This PR introduce an ability to configurate (via ENV) before deployment the future user UIDs: + - ID{RANDOM_HASH} - default + - MYAWESOMEAPP{RANDOM_HASH} - available to configurate +- Add Management API: push document for user [#894](https://github.com/rubykube/barong/pull/894) ([ec](https://github.com/ec)) + - New management API call that gives an ability to push documents for the user in base64 + - Good base for any third-party KYC providers +- Add endpoint for delete restriction [#902](https://github.com/rubykube/barong/pull/902) ([chumaknadya](https://github.com/chumaknadya)) + - Admin endpoint to delete Restriction (remove from DB, cant be rolled back) +- Add state to Profile model [#910](https://github.com/rubykube/barong/pull/910) ([mnaichuk](https://github.com/mnaichuk)) + - Define 2 Profile states: partial and completed + - Allow to create EMPTY profile (with empty fields) + - Profile state - attributes dependency +- Ability to update and delete users profiles [#913](https://github.com/rubykube/barong/pull/913) ([ec](https://github.com/ec)) + - New admin and user API endpoints that allows to update / delete profiles +- Flexible state - labels flow [#907](https://github.com/rubykube/barong/pull/907) ([ec](https://github.com/ec)) + - State - Label dependency + - Similar to levels configuration now you can configurate requirements for each of the user states + - Separately - ACTIVE requirements + - Now on every label change (update, remove, delete) user state recalculates and forces to update + - Default values remains the same as in the <= 2.2 version +- Add AliCloud Carrierwave storage provider [#911](https://github.com/rubykube/barong/pull/911) ([dnfd](https://github.com/dnfd)) + - Now Barong support Ali Cloud storages and easily deploys on AliBaba cloud +- Add ability to restrict by geoip [#920](https://github.com/rubykube/barong/pull/920) ([dnfd](https://github.com/dnfd)) + - Add support of CONTINENT and COUNTRY restriction scopes +- Add ability to skip label creation on doc save [#922](https://github.com/rubykube/barong/pull/922) ([dnfd](https://github.com/dnfd)) +- Add ability to disable 2fa [#925](https://github.com/rubykube/barong/pull/925) ([dnfd](https://github.com/dnfd)) +- Add AliCloud Uploader [#926](https://github.com/rubykube/barong/pull/926) ([dnfd](https://github.com/dnfd)) + - Now Barong support Ali Cloud storages and easily deploys on AliBaba cloud +- Define DocumentTypes class for flexible doc type configuration [#935](https://github.com/rubykube/barong/pull/935) ([ec](https://github.com/ec)) + - This PR introduce an ability to predefine available document types before deployment. There is hardcoded freezed array anymore. + - By default, abailable document type list remains the same as <= 2.2 versions +- Make labels acts_as_eventable on: [create update] [#936](https://github.com/rubykube/barong/pull/936) ([ec](https://github.com/ec)) + - Spread events on label CUD +- Add the support of twilio verify API [#928](https://github.com/rubykube/barong/pull/928) ([ec](https://github.com/ec)) + - Now Barong supports twilio verification service ( via CALL and SMS ) + - Should be switched from SMS to Twilio Verify via ENV before deployment +- Server side sessions via cache_store [#949](https://github.com/rubykube/barong/pull/949) ([ec](https://github.com/ec)) + - Now session stores on the server side in the cache + - User receives only 1 session cookie, that proves he got it from Barong + - Session lifetime extends after every private call + - Session will automatically close if user will try to reuse cookies in another browser or IP network + - Session will expire in 24h + +### Enhancements ### +- Updating gem multisign and jwt [45f975](https://github.com/rubykube/barong/commit/45f975fcb489aaa3b0b4f56b1307258b8bc85d18) ([mod](https://github.com/mod)) +- Allow pending user to open session [#881](https://github.com/rubykube/barong/pull/881) ([ec](https://github.com/ec)) +- Update to ruby 2.6.3 and rails 5.2.3 [#867](https://github.com/rubykube/barong/pull/867) ([ec](https://github.com/ec)) +- Update models' annotations [#895](https://github.com/rubykube/barong/pull/895) ([dnfd](https://github.com/dnfd)) +- Small fixes in document and profile model [#901](https://github.com/rubykube/barong/pull/901) ([ec](https://github.com/ec)) +- Feature: Add redeploy on devkube step to drone [#874](https://github.com/rubykube/barong/pull/874) ([alinetskyi](https://github.com/alinetskyi)) +- Add validation for referral && Add ability to get referral uid [#882](https://github.com/rubykube/barong/pull/882) ([chumaknadya](https://github.com/chumaknadya)) +- Update nokogiri version [#906](https://github.com/rubykube/barong/pull/906) ([dnfd](https://github.com/dnfd)) +- Update Barong::App validations [#904](https://github.com/rubykube/barong/pull/904) ([dnfd](https://github.com/dnfd)) +- Support 'with replace' policy on labels update [#915](https://github.com/rubykube/barong/pull/915) ([ec](https://github.com/ec)) +- UPDATES: sessions delete, permissions update, log error on 500 [#917](https://github.com/rubykube/barong/pull/917) ([chumaknadya](https://github.com/chumaknadya)) +- Add :upload in list of params to be filtered [#919](https://github.com/rubykube/barong/pull/919) ([ec](https://github.com/ec)) +- Fix structure of event API messages [#912](https://github.com/rubykube/barong/pull/912) ([shal](https://github.com/shal)) +- Use Barong::App.config.barong_uid_prefix in referral validation [#923](https://github.com/rubykube/barong/pull/923) ([ec](https://github.com/ec)) +- Allow blank doc_expire for documents controllers [#927](https://github.com/rubykube/barong/pull/927) ([dnfd](https://github.com/dnfd)) +- Add system.session.create event with user and request_ip data [#916](https://github.com/rubykube/barong/pull/916) ([chumaknadya](https://github.com/chumaknadya)) +- Update seeds.yml [#934](https://github.com/rubykube/barong/pull/934) ([ec](https://github.com/ec)) +- Simple GET levels requirements endpoint for admin [#932](https://github.com/rubykube/barong/pull/932) ([ec](https://github.com/ec)) +- Get rid of 'serialize: JSON', accept 'metadata' as json instead of pure hash [#930](https://github.com/rubykube/barong/pull/930) ([ec](https://github.com/ec)) +- Add missing labels event api documentation [#937](https://github.com/rubykube/barong/pull/937) ([ec](https://github.com/ec)) +- Add session autorenew [#903](https://github.com/rubykube/barong/pull/903) ([dnfd](https://github.com/dnfd)) +- Introduce MockPhoneVerifyService [#941](https://github.com/rubykube/barong/pull/941) ([ec](https://github.com/ec)) +- Use uid instead of id on profile update && delete api [#943](https://github.com/rubykube/barong/pull/943) ([ec](https://github.com/ec)) +- Profile act as eventable on update [#945](https://github.com/rubykube/barong/pull/945) ([ec](https://github.com/ec)) +- Update ruby to 2.6.5 for security reasons [#946](https://github.com/rubykube/barong/pull/946) ([ec](https://github.com/ec)) +- Add ability to configure aws_signature_version && endpoint [#947](https://github.com/rubykube/barong/pull/947) ([ec](https://github.com/ec)) +- Feature: allow # \ () & ' : " in profile residental address field [#950](https://github.com/rubykube/barong/pull/950) ([ymasiuk](https://github.com/ymasiuk)) +- Add redis - hiredis dependency, specify driver in dev env [#951](https://github.com/rubykube/barong/pull/951) ([ec](https://github.com/ec)) +- Protect superadmin against changes from non-superadmin users [#955](https://github.com/rubykube/barong/pull/955) ([ec](https://github.com/ec)) +- Update storage-related gems [#957](https://github.com/rubykube/barong/pull/957) ([ec](https://github.com/ec)) + +### Bug Fixes ### +- Use CGI::escape instead of pure url in documents event api [#942](https://github.com/rubykube/barong/pull/942) ([ec](https://github.com/ec)) +- fix binstubs issue [#867](https://github.com/rubykube/barong/pull/867) ([ec](https://github.com/ec)) +- Fix rollback to pending state, add missing data in entities [#914](https://github.com/rubykube/barong/pull/914) ([ec](https://github.com/ec)) +- Handle Vault errors on POST /api/v2/resource/api_keys [#918](https://github.com/rubykube/barong/pull/918) ([dnfd](https://github.com/dnfd)) +- Avoid no method error UTC for nil entities [#921](https://github.com/rubykube/barong/pull/921) ([ec](https://github.com/ec)) +- Event API changes: remove blocking check for on_update events [#933](https://github.com/rubykube/barong/pull/933) ([ec](https://github.com/ec)) \ No newline at end of file diff --git a/docs/restrictions.md b/docs/restrictions.md new file mode 100644 index 0000000..ec07017 --- /dev/null +++ b/docs/restrictions.md @@ -0,0 +1,51 @@ +# Restrictions + +### Introduction +First version of restrictions appeared in 2.3 as simple blacklist feature, by IP in several scopes (by `country`, by `continent`, by `ip_subnet` and by `ip`). + +Starting from latest 2.4 restrictions will act as system of traffic control. New fields added to restrictions table - `category`, `code`, and new available value for `scope` - `all` + +##### Main points: +Every request to the server will be validated (both `public` and `private` APIs, but not `management` one ). Request IP will match with existing restrictions and a first found rule will be applayed. +`category` - one of `whitelist`, `maintenance`, `blacklist`, `blocklogin`. + +The order of matching IP with existing rules is strict and cant be changed: +1. Whitelist ( all -> ip -> ip_subnet -> country -> continent ) +2. Maintenance ( all -> ip -> ip_subnet -> country -> continent ) +3. Blacklist ( all -> ip -> ip_subnet -> country -> continent ) +4. Blocklogin ( all -> ip -> ip_subnet -> country -> continent ) + +`Whitelist` - rule, that marks IP as trusted, as IP that can have an access to the server APIs +`Maintenance` - when enabled, will return an error - 471 (by default) to any request to server in a range of rules `scope` (Typically, should be used with `all` and in maintenance platform purposes) +`Blacklist` - when enabled, will return an error - `code`, which can be customized by the rule. Code can be different for different `scopes`, and can be used to display different error or kind alert of UI. Default `code` for errors `{ continent: 423, country: 423, ip_subnet: 403, ip: 401, all: 401 }` +`Blocklogin` - acts as `Blacklist`, but applies only on `sessions` endpoint. + +##### How to configure +Restrictions can be: +1. Seeded via seed feature. +Just put restrictions in format of `- { category: whitelist, scope: country, value: UA, state: disabled }` in seed.yml under `restrictions:` module +2. Can be added by admin via `api/v2/barong/admin/restrictions`, + requires `:scope`, requires `:value`, requires `:category`, optional `:state, default: 'enabled`', optional `:code ` +3. Can be added automatically (whitelist category) via whitelink feature + +### Whitelink feature +In order to make the process of whitelisting IPs easier starting from latest 2.4 admin can create a `whitelink_token` via +`api/v2/barong/admin/restrictions/whitelink`. Created token can be sent to `api/v2/barong/identity/users/access` and if it is valid (every token has expiry time, which is 1 day by default) and it will automatically create a `whitelist` restriction with current request IP. +Note: `api/v2/barong/identity/users/access` API available to call even if all other platform traffic is under blacklist or maintenance + +### Restrictions Usage +Combining whitelist, maintenance and blacklist rules can help in controlling platform traffic, maintaining platform, developing custom cases and complex UI structure. +##### Several usecases: +##### Maintenance - rules: +`category: 'maintenance', scope: 'all', value: 'all', state: 'enabled', code: 471` +`category: 'whitelist', scope: 'ip_subnet', value: '#{dev_team_office_ip}', state: 'enabled'` + +In this case all users, that will try to access any API of the platform will get a responce with status `471` and body `authz.restrict.maintenance`. In this case frontend can show a maintenance page for users, so they will understand that platform is under service right now. Meanwhile, all requests from `#{dev_team_office_ip}` (as they are whitelisted) will still reach server and can test the update / validate any bug found, etc. + +##### Blacklisting - rules: +`category: 'blacklist', scope: 'country', value: 'US', state: 'enabled', code: 455` +`category: 'blacklist', scope: 'continent', value: 'NA', state: 'enabled', code: 456` +`category: 'whitelist', scope: 'ip', value: '#{investor_ip}', state: 'enabled'` + +In this case all users from North America, that will try to access any API of the platform will get a responce with status `456` and body `authz.restrict.blacklist`. In this case frontend can show a page for users, so they will understand that they cant yet reach this platform from their current location, but it will come soon. All users from USA will have a different code - `455`, so UI can show the page, which will indicates, that platform is banned for USA residents and cant be reached from this country. +Meanwhile, in testing and business purpose you can whitelist one concrete or subset of IPs, for you investors, for lawyers or any demo, using `whitelist` rule. \ No newline at end of file diff --git a/docs/roadmap.md b/docs/roadmap.md new file mode 100644 index 0000000..889bcd2 --- /dev/null +++ b/docs/roadmap.md @@ -0,0 +1,32 @@ +# Barong + +## v2.4 + + * Integration of Postmaster for translated emails + * CSRF security support + * Improve KYC Profile flow + * Password strenght indicator with API + * Unification of configuration and documentation + * Public configuration endpoint to fetch non-sentive config from frontend + * Refactor recaptcha with geetest integration + +## v2.5 + + * Support of KyC provider (KyCAID)[https://kycaid.com/] + * Admin comments on users + * Double verification for user profile edit + +## v2.6 + + * Vault prefix and policies + * Configurable abilities + +## v2.7 + + * Fast barong authorizer + * Dynamic routing from database + * Configuration storage in vault + +## v3.0 + + * OAuth Sign-up and Login support diff --git a/docs/security.md b/docs/security.md new file mode 100644 index 0000000..663722b --- /dev/null +++ b/docs/security.md @@ -0,0 +1,55 @@ +# Barong Security Hardening +This document describes the available security options implemented in the application and advices for configuring with highlighting the main (high-risk) security options + +### Password hashing +Barong since 2.0 version use OpenBSD bcrypt() password hashing algorithm, that allow us easily store a secure hash of users' passwords. + +As a base Barong takes [bcrypt-ruby gem](https://github.com/codahale/bcrypt-ruby) - Ruby binding for the OpenBSD bcrypt() With [rails 5 has_secure_password](https://api.rubyonrails.org/classes/ActiveModel/SecurePassword/ClassMethods.html) it gives us full power of algorithm. + +Read more about [password hashing algorithm in barong](https://www.openware.com/sdk/docs/barong/general/password-hashing.html). + +Read more about additional [password strength and regexp configuration](https://www.openware.com/sdk/docs/barong/configuration.html#password-configuration). + +### Challenge–response test (captcha protection) + +In order to prevent script attacks on API and possible brute force on session- and user- related endpoints we implement captcha protection. + +Configuration manages through environment variable - BARONG_CAPTCHA. Available values - geetest, recaptcha, none. With a wrong value barong will fail on start with error: `#{KEY}` invalid, enabled values: `NONE GEETEST RECAPTCHA`. + +!!NOTE: `NONE` is a default value, but its highly not recommended to use in `production` environment. + +List of endpoints protected can be configured in `barong.yml` file, common (and the most secure) list of endpoints is: +``` +captcha_protected_endpoints: + - user_create + - session_create + - password_reset + - email_confirmation + ``` + +Captcha will be verified on `SERVER` side. All requests without captcha will be denied with `error` `captcha_response.missing` + +More about captcha you can read here [captcha policy documentation](https://www.openware.com/sdk/docs/barong/general/captcha.html). + +### CSRF protection +`Cross-Site Request Forgery` (`CSRF`) is an attack that forces an end user to execute unwanted actions on a web application in which they’re currently authenticated. CSRF attacks specifically target state-changing requests, not theft of data since the attacker has no way to see the response to the forged request. +`CSRF` has become a huge deal in the recent years and it’s a part of `OWASP` top 10 common vulnerabilities + +There are some common practices to protect your website. + +First of all only `POST, PUT, PATCH, DELETE` and `TRACE` HTML requests have to be protected, since only these methods are destructive and can cause any unwanted or unauthorized damage. +Therefore, every time we sent such a request we need to append a specific token to it, to verify that request is sent from a legit HTML form. The token has to be included in `X-CSRF-Token` (commonly used one). + +This is the flow we went for: +1. On session creation backend sends a unique crypto-function generated token +2. Frontend stores that token in the DOM, typically it’s in the meta tag. +3. Every time a destructive request is sent to the backend, this token is appended in the header +4. Backend validates the header and performs the action. Error is returned if the header is invalid. +5. When the session is destroyed, the token is also destroyed and can’t be used again. + +This approach is called a per-session token method. + +For further information check the links down below: +* https://www.owasp.org/index.php/Main_Page +* https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html#javascript-guidance-for-auto-inclusion-of-csrf-tokens-as-an-ajax-request-header +* https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project diff --git a/docs/service_accounts.md b/docs/service_accounts.md new file mode 100644 index 0000000..5652d28 --- /dev/null +++ b/docs/service_accounts.md @@ -0,0 +1,13 @@ +# Service Accounts +In Barong a service account belongs to a user. + +Service accounts are currently created only via Management API (server to server API). +There is no possibility to login into service account, it's used through API using an API Key. + +User has an ability to list his service accounts. Also User can create, update, delete and list API Keys for these service accounts using his own OTP. + +A user service account has the same level as the user, the role can be different. + +If User disable OTP, all API Keys for his service accounts will become inactive. + +If a user state changes, his service accounts state will change accordingly. diff --git a/docs/tasks/import.md b/docs/tasks/import.md new file mode 100644 index 0000000..3950dd3 --- /dev/null +++ b/docs/tasks/import.md @@ -0,0 +1,23 @@ +## How to import users and referrals to Barong database + +1. Create `csv` file for users and referrals with template. + +### Users table + + | uid | email | level | role | state | referral_uid | + |---------------|-----------------|-------|--------------|---------|---------------| + | ID1000003837 | admin@barong.io | 3 | superadmin | active | ID1000003828 | + + uid, email - require params + +2. For import users + +```ruby + bundle exec rake import:users['file_name.csv'] +``` + +3. For import referrals + +```ruby + bundle exec rake import:referrals['file_name.csv'] +``` diff --git a/docs/troubleshooting.md b/docs/troubleshooting.md new file mode 100644 index 0000000..d41ffed --- /dev/null +++ b/docs/troubleshooting.md @@ -0,0 +1,24 @@ +# Troubleshooting +## Permissions +- `401 authz.invalid_permission` on specific endpoint +1. Check list of your permissions on barong seeds.yml or tower admin panel +2. If there are no such permission just add new permission on tower admin panel + +- `401 authz.invalid_permission` after login +1. Check your permissions on barong rails console +```ruby +irb(main)013:0> Permission.all +irb(main)013:0> Rails.cache.read('permissions') +``` +2. If there are no permissions on rails cache or these permissions are wrong you need to run following command +When you delete permissions from rails cache they will be automatically fetched +```ruby +irb(main)013:0> Rails.cache.delete('permissions') +``` +3. If there are no permissions on DB you need to seed permissions +``` +bundle exec rake db:seed +``` +*** +## Restictions +*Be careful with testing restriction and don't ban your local IP!* \ No newline at end of file diff --git a/docs/vault.md b/docs/vault.md new file mode 100644 index 0000000..726bd1b --- /dev/null +++ b/docs/vault.md @@ -0,0 +1,135 @@ +# Vault configuration + +## Introduction + +This document describes how to create vault tokens in order to restrict components access to vault as following + +| Component | Abilities | +| ------------ | ------------------------------------------------------- | +| barong-rails | encrypt api keys
create TOTP
verify TOTP code | +| barong-authz | decrypt api keys | + + + +## Connect to vault +The the following variables in your environment with correct values: + +```bash +export VAULT_ADDR='http://127.0.0.1:8200' +export VAULT_TOKEN='s.ozytsgX1BcTQaR5Y07SAd2VE' +``` + +You can test that it works running the following command: + +``` +$ vault status +Type: shamir +Sealed: false +Key Shares: 1 +Key Threshold: 1 +Unseal Progress: 0 +Unseal Nonce: +Version: 1.3.4 +Cluster Name: vault-cluster-650930cf +Cluster ID: 9f40327d-ec71-9655-b728-7588ce47d0b4 + +High-Availability Enabled: false +``` + +## Create ACL groups + +### Create the following policy files + +**barong-rails.hcl** + +Replace *opendax* with your vault application name. See [barong vault configuration](https://www.openware.com/sdk/docs/barong/configuration.html#vault-configuration) for more details. + +```bash +# Access system health status +path "sys/health" { + capabilities = ["read", "list"] +} + +# Manage the transit secrets engine +path "transit/keys/*" { + capabilities = [ "create", "read", "list" ] +} + +# Encrypt engines secrets +path "transit/encrypt/opendax_apikeys_*" { + capabilities = [ "create", "read", "update" ] +} + +# Renew tokens +path "auth/token/renew" { + capabilities = [ "update" ] +} + +# Lookup tokens +path "auth/token/lookup" { + capabilities = [ "update" ] +} + +# Manage otp keys +path "totp/keys/opendax_*" { + capabilities = ["create", "read", "update", "delete"] +} + +# Verify an otp code +path "totp/code/opendax_*" { + capabilities = ["update"] +} +``` + +**barong-authz.hcl** + +```bash +# Access system health status +path "sys/health" { + capabilities = ["read", "list"] +} + +# Manage the transit secrets engine +path "transit/keys/*" { + capabilities = [ "create", "read", "list" ] +} + +# Decrypt engines secrets +path "transit/decrypt/opendax_apikeys_*" { + capabilities = [ "create", "read", "update" ] +} + +# Renew tokens +path "auth/token/renew" { + capabilities = [ "update" ] +} + +# Lookup tokens +path "auth/token/lookup" { + capabilities = [ "update" ] +} +``` + +### Create the ACL groups in vault + +```bash +vault policy write barong-rails barong-rails.hcl +vault policy write barong-authz barong-authz.hcl +``` + +### Create applications tokens + +```bash +vault token create -policy=barong-rails -period=240h +vault token create -policy=barong-authz -period=240h +``` + +## Configure Barong + +Set those variables according to your deployment: + +```bash +export BARONG_VAULT_ADDRESS=http://127.0.0.1:8200 +export BARONG_VAULT_TOKEN=s.jyH1vmrOmkZ0FZZ0NZtgRenS +export BARONG_VAULT_APP_NAME=opendax +``` diff --git a/docs/zagros/2fa/2fa.md b/docs/zagros/2fa/2fa.md new file mode 100644 index 0000000..3fd2b1e --- /dev/null +++ b/docs/zagros/2fa/2fa.md @@ -0,0 +1,104 @@ +#Registration: 2FA +###### Sprint: 2 + +### Outcome: +2 factor authentication is a feature that helps users to secure their activities. +For critical activities the app needs a code to be completed. +At first vault creates a code (that showed with QR) to sync with google authenticator. +After adding code in the user's google authenticator, every time a user needs OTP(one-time-password) can read it in his app. + +### Implementation description: + +#### Endpoints: +GET {$domain}/api/v2/barong/resource/otp/generate_qrcode + +POST {$domain}/api/v2/barong/resource/otp/enable + +POST {$domain}/api/v2/barong/resource/otp/enable_2fa + +POST {$domain}/api/v2/barong/resource/otp/disable + +POST {$domain}/api/v2/barong/resource/otp/disable_email + +#### File destination: +{$Dalan_Path}/app/api/v2/resource/otp.rb + +#### Commits: +bd7f980596 +dc95b308a6 +b3b5a08d60 +3c170120c1 +a79e06a71b +8c821f1ba4 +e04a58b012 +99c2552404 +63f69ed0d6 +7010449976 +4d55a48572 +2da71b1097 + +#### What did we implement: + +We add an authorization step to enable/disable 2FA. After entering the google authenticator code, an authorization email is sent to the user containing an OTP . Users only can enable or disable 2FA after entering the correct OTP from the email. + +New flow: + +System generates the code → User scan it with mobile → enters the google code → Receives the email →The user enters the code → 2FA enable/disable + + +```mermaid +sequenceDiagram + title: 2fa activation + User->>Ranj: generate Qr Code + Ranj-->>Dalan: get /generate_qrcode + Dalan->>Ranj: 400, message: '2FA has been enabled for this account' + Dalan->>Ranj: 401, message: 'Invalid bearer token' + Dalan->>Ranj: 400, message: '2FA has been already sent email for this account(enabling process started)' + Dalan->>Ranj: 200, QR params + Ranj->>User: QR + User->>Ranj: User scan and enter code + Ranj-->>Dalan: post /enable params:{code:string} + Dalan->>Ranj: 400, message: '2FA has been enabled for this account or code is missing' + Dalan->>Ranj: 401, message: 'Invalid bearer token' + Dalan->>Ranj: 422, message: 'Validation errors' + Dalan->>Ranj: 422, message: 'OTP code is invalid' + Dalan->>Ranj: 422, message: '2FA has been already sent email for this account(enabling process started)' + Ranj->>User: show result + Dalan->>User: send email in case of success + User->>Ranj: enter authorization code + Ranj-->>Dalan: post '/enable_2fa' params:{code:string} + Dalan->>Ranj: 400, message: '2FA has been enabled for this account or code is missing + Dalan->>Ranj: 401, message: 'Invalid bearer token' + Dalan->>Ranj: 422, message: 'Validation errors' + Dalan->>Ranj: 400. message: '2FA has been already enabled for this account' + Dalan->>Ranj: 400, message: '2FA hasnt been enable'(didnt start enabling process) + Dalan->>Ranj: 422, message: 'OTP code is invalid' + Dalan->>Ranj: 200 + Ranj->>User: success +``` + +```mermaid +sequenceDiagram + title: 2fa deactivation + User->>Ranj: enter google authentication code + Ranj-->>Dalan: post /disable params:{code:string} + Dalan->>Ranj: 400, message: '2FA has not been enabled for this account or code is missing' + Dalan->>Ranj: 401, message: 'Invalid bearer token' + Dalan->>Ranj: 422, message: 'Validation errors' + Dalan->>Ranj: 422, message: 'OTP code is invalid' + Dalan->>Ranj: 422, message: '2FA has been already sent email for this account(disabling process started)' + Ranj->>User: show result + Dalan->>User: send email in case of success + User->>Ranj: enter authorization code + Ranj-->>Dalan: post '/disable_email' params:{code:string} + Dalan->>Ranj: 400, message: '2FA has not been enabled for this account or code is missing + Dalan->>Ranj: 401, message: 'Invalid bearer token' + Dalan->>Ranj: 422, message: 'Validation errors' + Dalan->>Ranj: 400. message: '2FA has been already disabled for this account' + Dalan->>Ranj: 400, message: '2FA has been already sent email for this account'(didnt start enabling process) + Dalan->>Ranj: 422, message: 'OTP code is invalid' + Dalan->>Ranj: 200 + Ranj->>User: success +``` + + diff --git a/docs/zagros/Dalan-document.pdf b/docs/zagros/Dalan-document.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e80a2b201c471cbd654ede676d3a762226aaab49 GIT binary patch literal 20127 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 h4VerUnZ;z1u|oIp legacy number will be update with new number + +2.If user has verified access label --> new number must get access label to create in db and legacy one replaced + +3.If user has verified ownership label --> new number must get both labels to create in db and legacy one replaced + +```mermaid +sequenceDiagram + title: access phone + User->>Ranj: enter phone number with +98 + Ranj-->>Dalan: post /mobiles params + Dalan->>Ranj: 400, message: 'Required params are empty' + Dalan->>Ranj: 401, message: 'Invalid bearer token' + Dalan->>Ranj: 404, message: 'Record is not found' + Dalan->>Ranj: 422, message: 'Validation errors' + Dalan->>Ranj: 422, message: 'code_doesnt_expired'(there is an active process for addding new mobile) + Dalan->>Ranj: 200, message: 'New phone was added' + note left of Dalan: if there is a pending number it will be replaced with new one + Dalan->>KaveNegar: send sms to User in case of success + KaveNegar->>User: SMS with code + Ranj->>User: show result + note right of User: if didnt catch sms + + User->>Ranj: resend code + Ranj->>Dalan: Post mobiles/send_code params + Dalan->>Ranj: 400, message: 'Required params are empty' + Dalan->>Ranj: 401, message: 'Invalid bearer token' + Dalan->>Ranj: 404, message: 'Record is not found', 'phone.doesnt_exist' + Dalan->>Ranj: 422, message: 'Validation errors' + Dalan->>Ranj: 422, message: 'code_doesnt_expired' (expiration time doesnt finish) + Dalan->>KaveNegar: send sms to User in case of success + KaveNegar->>User: SMS with code + Ranj->>User: show result + User->>Ranj:enter code + Ranj->>Dalan: Post mobiles/verify params + Dalan->>Ranj: 401, message: 'Invalid bearer token' + Dalan->>Ranj: 404, message: 'Record is not found', 'phone.doesnt_exist' + Dalan->>Ranj: 422, message: 'Validation errors' + Dalan->>Ranj: 400, message: phone.verification_invalid + note right of Ranj: if user wants to replace a new verified phone and the legacy phone has owner_phone label, we should check ownership. if it doesnt legacy phone labels all changes will be rollback. + Dalan->>Ranj: success 2xx + Ranj->>User: show result +``` diff --git a/docs/zagros/KYC-steps/level-one/bank-information.md b/docs/zagros/KYC-steps/level-one/bank-information.md new file mode 100644 index 0000000..16fc268 --- /dev/null +++ b/docs/zagros/KYC-steps/level-one/bank-information.md @@ -0,0 +1,45 @@ +# KYC: Bank information + +### Outcome: +we checking ownership of card-numbers and ibans. + +### Implementation description: + +#### Endpoints: +Post {$domain}/api/v2/barong/resource/profiles/treasury + +#### File destination: +- {$Dalan_Path}/app/api/v2/resource/profiles.rb +- {$Dalan_Path}/app/workers/kyc/local/treasury_worker.rb +- {$Dalan_Path}/app/services/jibit_service.rb + + +#### Commits: +- 40177a4f +- 816fb00e +- 9e17677b +- 63977c33 +- c76f72fe +- 90cbc486 + +#### What did we implement: +We implemented a new model and table to keep users bank information and called it treasury.
+After users entered their card_number or IBAN, we are sending this information to the Jibit service,
+and then the Jibit Service returns the first name and last name of the real owner.
+Now we can check this returned information to users' profile information to find out everything is ok.
+It is worth mentioning that the steps of getting information from the Jibit and checking it with the profile are done in the background. + +```mermaid +sequenceDiagram + + Title: bank information (treasury) + note over User,Dalan: Users enter their bank information + note over User,Dalan: `data` is card-number or iban value, `kind` is 'card' or 'iban' + User->>Dalan:data, kind, title + + note over Dalan,Jibit: Dalan send request to Jibbit service (as worker) + Dalan->>Jibit:GET: iban value or card value (data) + Jibit->>Dalan:Response: first-name and last-name of real owner + Dalan->>Dalan: checking returned information with users profile data + Dalan->>User: add a confirmed label if the names matched, otherwise rejected label was created. +``` diff --git a/docs/zagros/KYC-steps/level-one/personal-info.md b/docs/zagros/KYC-steps/level-one/personal-info.md new file mode 100644 index 0000000..0aae044 --- /dev/null +++ b/docs/zagros/KYC-steps/level-one/personal-info.md @@ -0,0 +1,38 @@ +# KYC: Personal info +###### Sprint: 3 + +### Outcome: +Users add the below information to their profile + +### Implementation description: + +#### Endpoints: +POST {$domain}/api/v2/barong/resource/profiles + + +#### File destination: +{$Dalan_Path}/app/api/v2/resource/profiles.rb + +#### Commits: +9f1cde76 +2422f5d1 + +#### What did we implement: +In the Opendax, users can create their profiles by personal info and Address info in one step, also in this step there is no way to upload identity card + +So In Zagros, we separate the step of adding personal info from adding address info step, and also we add upload identity card features + + +```mermaid +sequenceDiagram + +Title: KYC - Profile Step +note over User,Ranj:**upload** is a picture of front identity card +User->>Ranj:first_name, last_name, dob, national_code, upload +Ranj->>Dalan:Post: after client side checking +Dalan->>Ranj:4xx if any required params are empty +Dalan->>Ranj:4xx if Profile model validity fails +Dalan->>Ranj:4xx if Document model validity fails +Dalan->>Ranj:2xx the profile create successfully +Ranj->>User:notify user that profile created +``` diff --git a/docs/zagros/KYC-steps/level-two/landline.md b/docs/zagros/KYC-steps/level-two/landline.md new file mode 100644 index 0000000..dd6a917 --- /dev/null +++ b/docs/zagros/KYC-steps/level-two/landline.md @@ -0,0 +1,91 @@ +# KYC: landline + +###### Sprint: 3 + +### Outcome: + +User should enter his number, after the validation app sends a call with an otp code, the user must enter the code to prove to us that he has access to the entered number. + +#### Endpoints: + +POST {$domain}/api/v2/barong/resource/phones + +POST {$domain}/api/v2/barong/resource/phones/send_code + +POST {$domain}/api/v2/barong/resource/phones/verify + +#### File destination: + +{$Dalan_Path}/app/api/v2/resource/phones.rb + +#### Commits: + +bd7f980596 +695b0b56e2 +6dd40a9c42 +e04a58b012 +36167eda10 +2089690fe0 +90cbc48649 +17a5bce849 +63722fe22a +63977c330d +bff2746686 +75490dcb22 +f13ee3f4d5 +2c05522f77 +46c053b435 +551e7cdba2 +77d7b9a9b3 +2da71b1097 + + +#### What did we implement: + +in access mobile told about KaveNegarService +user entered landline number then system send call by kave negar with otp code +user must enter send code to prove us that has access. + +if user wants to enter new number: + +1.if user have verified phone: response error + +2.if user has pending number: update that number with new one + +3.if user doesnt have number in our system: create new one + +```mermaid +sequenceDiagram + title: access landline + User->>Ranj: enter landline number with +98 + Ranj-->>Dalan: post /phones params + Dalan->>Ranj: 400, message: 'Required params are empty' + Dalan->>Ranj: 401, message: 'Invalid bearer token' + Dalan->>Ranj: 404, message: 'Record is not found' + Dalan->>Ranj: 422, message: 'Validation errors' + Dalan->>Ranj: 422, message: 'code_doesnt_expired'(there is an active process for addding new landline) and phone.exists(has verified number in system) + Dalan->>Ranj: 200, message: 'New phone was added' + note left of Dalan: if there is a pending number it will be replaced with new one + Dalan->>KaveNegar: send call to User in case of success + KaveNegar->>User: call with code + Ranj->>User: show result + note right of User: if didnt catch call + + User->>Ranj: resend code + Ranj->>Dalan: Post phones/send_code params + Dalan->>Ranj: 400, message: 'Required params are empty' + Dalan->>Ranj: 401, message: 'Invalid bearer token' + Dalan->>Ranj: 404, message: 'Record is not found', 'phone.doesnt_exist' + Dalan->>Ranj: 422, message: 'Validation errors' + Dalan->>Ranj: 422, message: 'code_doesnt_expired' (expiration time doesnt finish) + Dalan->>KaveNegar: send call to User in case of success + KaveNegar->>User: call with code + Ranj->>User: show result + User->>Ranj:enter code + Ranj->>Dalan: Post phones/verify params + Dalan->>Ranj: 401, message: 'Invalid bearer token' + Dalan->>Ranj: 404, message: 'Record is not found', 'phone.doesnt_exist', 'verification_invalid + Dalan->>Ranj: 422, message: 'Validation errors' + Dalan->>Ranj: success 2xx + Ranj->>User: show result +``` diff --git a/docs/zagros/KYC-steps/level-two/mobile-ownership.md b/docs/zagros/KYC-steps/level-two/mobile-ownership.md new file mode 100644 index 0000000..157958c --- /dev/null +++ b/docs/zagros/KYC-steps/level-two/mobile-ownership.md @@ -0,0 +1,42 @@ +# KYC: mobile ownership + +### Outcome: +we checking ownership of mobile. + +### Implementation description: + +#### Endpoints: +PUT {$domain}/api/v2/barong/admin/profiles/label + +#### File destination: +- {$Dalan_Path}/app/workers/kyc/local/owner_mobile_worker.rb +- {$Dalan_Path}/app/models/phone.rb +- {$Dalan_Path}/app/services/kyc_service.rb +- {$Dalan_Path}/app/api/v2/admin/profiles.rb +- {$Dalan_Path}/app/services/jibit_service.rb + +#### Commits: +- 7f06a2e3 +- 816fb00e +- 2c05522f +- 90cbc486 +- 91e75604 +- bdfc578d + +#### What did we implement: +Ownership of mobile is done in background (worker) after last step (selfie confirmation).
+The national code of verified profile with phone number , is sent to Jibit Service for matching.
+The label key in the `labels` table is **owner_phone** + +```mermaid +sequenceDiagram + + Title: mobile ownership + note over Admin,Dalan: admin user confirm users selfie + Admin->>PUT Dalan:user_uid, label_key, label_value + + note over Dalan,Jibit: Dalan send request to Jibbit service (as worker) + Dalan->>Jibit:GET: natonal_code, phone_number + Jibit->>Dalan:Response: matched, false or true + Dalan->>Dalan: create ownership label with reject label or verified label +``` diff --git a/docs/zagros/KYC-steps/level-two/residence.md b/docs/zagros/KYC-steps/level-two/residence.md new file mode 100644 index 0000000..cf6f5ca --- /dev/null +++ b/docs/zagros/KYC-steps/level-two/residence.md @@ -0,0 +1,72 @@ +# KYC: Residence + +###### Sprint: ? + +### Outcome: + +User can add address with complete information(city and province and etc..) + + +#### Endpoints: + +POST {$domain}/api/v2/barong/resource/profiles/address + +#### File destination: + +{$Dalan_Path}/app/api/v2/resource/profiles.rb + +#### Commits: + +f7820d8 +3e0fff4 +67c41b3 +f420fa4 +bff2746 +63977c3 + +#### What did we implement: + +Opendax just implements address as a string but we need more information like city and province and document for residency. + +So first of all we implemented city and province as below steps: + +##### 1.create migrations: + +20210420111532_create_provinces.rb → have just a name + +20210420111629_create_cities.rb → have name and must connect to province(foreign key) references :province, foreign_key: true + + + +##### 2.create models + +Province model: + +* Create validation for name: only allows letters, digits "-", "\'", and space. length: 1..255 + +* Mention to rails that this model has many cities + +City model: +* Mention to rails that this model belongs to province and this column is required. +* Create validation for name: only allows letters, digits "-", "\'", and space. length: 1..255 + +we need seeds to fill city and province tables. So we used a JSON file from git and create a seed. data of the seed was put in config/seeds.yml file and the functions are in lib/barong/seed.rb.(seed_provinces and seed_cities) they check the existence of the data(city or province) then create it in db. + +After these steps, we were ready to create a new API. we check the existence of the city and province that the user has been sent and create poa label. if user submitted another doc for poa and it has not been accepted, the new document will be replaced. + +```mermaid +sequenceDiagram + title: residence + User->>Ranj: residence information + Ranj-->>Dalan: post /profiles/address params + Dalan->>Ranj: 400, message: 'Required params are empty' + Dalan->>Ranj: 401, message: 'Invalid bearer token' + Dalan->>Ranj: 404, message: 'needed data doesnt exist' + Dalan->>Ranj: 422, message: 'Validation errors',(address.already_exist,province_doesnt_exist) + Dalan->>Ranj: 422, message: 'code_doesnt_expired'(there is an active process for addding new mobile) + Dalan->>Ranj: 200, message: 'New phone was added' + note left of Dalan: if there is a pending address it will be replaced with new one +``` + + + diff --git a/docs/zagros/KYC-steps/level-two/selfie.md b/docs/zagros/KYC-steps/level-two/selfie.md new file mode 100644 index 0000000..aee4f2a --- /dev/null +++ b/docs/zagros/KYC-steps/level-two/selfie.md @@ -0,0 +1,38 @@ +# KYC: Selfie +###### Sprint: 3 + +### Outcome: +Users can upload image for certification (the image includes selfie and signed text of the agreement ) + + +### Implementation description: + +#### Endpoints: +POST{$domain}/api/v2/barong/resource/profiles/selfie + +#### File destination: +{$Dalan_Path}/app/api/v2/resource/profiles.rb + +#### Commits: +ac083d21 +ea79c211 + +#### What did we implement: +Users can upload images for the Selfie KYC step. In the first place that image is in a `pending` state. +In the Admin panel, this image must be change state from `pending` to `confirm` or `reject` + + + +```mermaid +sequenceDiagram + + Title: KYC - Selfie + + note over User,Ranj: **upload** must be valid format of image (jpg, jpeg, png) + User->>Ranj: upload + Ranj->>Dalan:Post: after client side checking + Dalan->>Ranj:4xx if does not exist verified profile for the current user + Dalan->>Ranj:4xx if before exist verified selfie image for the current user + Dalan->>Ranj:2xx update (if exist unconfirmed ) or create new selfie + Ranj->>User:notify user that password changed +``` diff --git a/docs/zagros/KYC-steps/leveling.md b/docs/zagros/KYC-steps/leveling.md new file mode 100644 index 0000000..11060ad --- /dev/null +++ b/docs/zagros/KYC-steps/leveling.md @@ -0,0 +1,78 @@ +# KYC level logic + +###### Sprint: 3 + +### Outcome: +Users can upgrade their level by doing KYC processes + + +### Implementation description: + + +#### File destination: +{$Dalan_Path}/app/models/user.rb
+{$Dalan_Path}/app/models/document.rb
+{$Dalan_Path}/app/models/label.rb
+{$Dalan_Path}/app/models/level.rb
+{$Dalan_Path}/app/models/treasury.rb
+{$Dalan_Path}/app/models/profile.rb
+{$Dalan_Path}/app/services/kyc_service.rb + + +#### Commits: +2422f5d1 +40177a4f +ac083d21 +7f06a2e3 +816fb00e +2c05522f +9e17677b +bff27466 +63977c33 +c76f72fe +90cbc486 +6dd40a9c +695b0b56 +b3b5a08d +bd7f9805 + +#### What did we implement: +in the Opendax, KYC level handled by labels that id of them (label) shows user level, +but not support feature that per-user level has own steps +(each label is database record as Label model) +obviously per step has its own label too and the label has a unique id itself. + +so by considering this rule in the Opendax, we kept it but change some things to support multi-steps.
+we implement some kind of giving-points system. +users can achieve a new level If the sum of their label IDs reaches a certain limit that defines in the code. + +as you know, each step is a kind of record database that controlling by model so:
+bank information step is `Treasury` model +selfie and address step is `Document` model (for uploading) +mobile and landline steps are `Telephone` model +profile is `Profile` model + +so if one of the above kind records, is updated or created, we will create or update the corresponding label recording, +and if the label is created or updated we will change the users level by calculating their points (points are the sum of label ids) + +also, we keep levels (steps for KYC) in the Level model with the below data that was entered by seed + + +levels: +- key: email, id: 1 ,value: verified, description: "User enter a valid code after registration" +- key: profile, id: 2, value: verified, description: "User personal documents have been verified" +- key: access_phone, id: 3, value: verified, description: "User entered a valid code from sms" +- key: card, id: 4, value: verified, description: "User card number have been verified" +- key: iban, id: 5, value: verified, description: "User iban have been verified" +- key: poa id: 6, value: verified, description: "User card bank have been verified" +- key: telephone id: 7, value: verified, description: "User entered a valid code from ring call" +- key: selfie id: 8, value: verified, description: "User selfie documents have been verified" +- key: owner_phone id: 9, value: verified description: "User owner mobile have been verified" +- key: vip id: 10, value: verified, description: "User Vip have been verified" + +### TODO +now if the label being confirmed accidental in the admin panel, they can not delete it,
+so must implement new codes to handle this stuff + + + diff --git a/docs/zagros/admin/KYC-confirm.md b/docs/zagros/admin/KYC-confirm.md new file mode 100644 index 0000000..ba59478 --- /dev/null +++ b/docs/zagros/admin/KYC-confirm.md @@ -0,0 +1,38 @@ +# KYC: admin +###### Sprint: ? + +### Outcome: +admin can verify or reject(change state(selfie,poa)) of documents. + + +### Implementation description: + +#### Endpoints: + +POST {$domain}/api/v2/barong/admin/users/documents + +#### File destination: +{$Dalan_Path}/app/api/v2/admin/users.rb + +#### Commits: +bd7f980 + +#### What did we implement: +for admin apis, we should check access of user(authorization) at first. +after checking authorization, we checked existence of document and profile for related user. +update state of document. +we wrote some callbacks for every doc type to update labels state . + + +```mermaid +sequenceDiagram + title: admin document update + User->>Ranj: user and new state of doc + Ranj-->>Dalan: post /admin/users/documents params + Dalan->>Ranj: 400, message: 'Required params are empty' + Dalan->>Ranj: 401, message: 'Invalid bearer token', 'admin.ability.not_permitted' + Dalan->>Ranj: 404, message: 'doesnt exist'(document.user_doesnt_exist,document.document_doesnt_exist) + Dalan->>Ranj: 422, message: 'Validation errors' + Dalan->>Ranj: 200, message: 'New phone was added' + Ranj->>User: show admin result +``` diff --git a/docs/zagros/admin/treasury-list.md b/docs/zagros/admin/treasury-list.md new file mode 100644 index 0000000..da3531b --- /dev/null +++ b/docs/zagros/admin/treasury-list.md @@ -0,0 +1,28 @@ +# Admin API: list treasuries + +### Outcome: +list (Array) of users treasuries + +### Implementation description: + +#### Endpoints: +GET {$domain}/api/v2/barong/admin/profiles/treasury/list + +#### File destination: +- {$Dalan_Path}/app/api/v2/admin/profiles.rb + +#### Commits: +- 0654aa1a04 + +#### What did we implement: +We implemented one API in the panel that admin users can see a list of users' treasuries by entering user_id.
+also, admin users can filter responses as IBAN or card treasuries by sending kind value. + +```mermaid +sequenceDiagram + + Title: list treasuries + note over Admin,Dalan: **kind** is optional + Admin->>Dalan:GET user_uid, kind + Dalan->>Admin:Array of treasuries [id, title, state, data, created_at, updated_at] +``` diff --git a/docs/zagros/change-password/change-password.md b/docs/zagros/change-password/change-password.md new file mode 100644 index 0000000..417e893 --- /dev/null +++ b/docs/zagros/change-password/change-password.md @@ -0,0 +1,63 @@ +# Registration: Change password +###### Sprint: 2 + +### Outcome: +Users can change login password by entering old and new password and confirm OTP code + + +### Implementation description: + +#### Endpoints: +PUT {$domain}/api/v2/barong/resource/users/password + +POST {$domain}/api/v2/barong/identity/confirm_password + +#### File destination: +{$Dalan_Path}/app/api/v2/resource/users.rb + +#### Commits: +fb5162e5 +8b16cc49 +fb9db4ee +70104499 +63f69ed0 +0ee97595 +9e17677b +5bb29d79 + +#### What did we implement: +In the Opendax, users can change their current password without confirming the OTP code that must be sent to its mail. Also, there is not any limitation for attempting to enter the current password. + +In Zagros, if users enter the wrong current password more than 3 times, they are kicked out from the logged state and the new password is just accepted after entering the valid OTP code. + +``` +TODO: +Number of failed attempts to enter the current password must be dynamic and +changeable by the admin panel +``` + +```mermaid +sequenceDiagram + + Title: Change password + + note over User,Ranj: old password parameter is the same as current password + User->>Ranj:old_password, new_password, confirm_password + Ranj->>Dalan:Put: after client side checking + Dalan->>Ranj:4xx if attempt number for entering the valid current password is over + Dalan->>Ranj:4xx if new_password is not same to confirm_password + Dalan->>Ranj:4xx if old_password is not valid + Dalan->>Ranj:4xx if new_password is same to old_password + Dalan->>Ranj:4xx if length of new password is not valid + Dalan->>User:2xx send otp to his or her mail + Ranj->>User:Ask OTP code for confirming + User-->>Ranj:if OTP code not received, try for resend after 120 seconds + Ranj-->>Dalan: Ask for sending OTP code again + Dalan-->>User:2xx send otp to his or her mail + User->>Ranj: enter OTP code + Dalan->>Ranj:4xx if user does not exist in the system + Ranj->>Dalan:Post : OTP code for checking ice + Dalan->>Ranj:4xx if OTP code expired + Dalan->>Ranj:2xx change user password + Ranj->>User:notify user that password changed +``` diff --git a/docs/zagros/reset-password/reset-password.md b/docs/zagros/reset-password/reset-password.md new file mode 100644 index 0000000..b0f290c --- /dev/null +++ b/docs/zagros/reset-password/reset-password.md @@ -0,0 +1,53 @@ +# Registration: Reset password +###### Sprint: 2 + +### Outcome: +Users can reset login password by entering email and confirm by OTP code + +### Implementation description: + +#### Endpoints: +POST {$domain}/api/v2/barong/identity/users/password/generate_code +POST {$domain}/api/v2/barong/identity/users/password/confirm_code +POST {$domain}/api/v2/barong/identity/users/password/reset + + +#### File destination: +{$Dalan_Path}/app/api/v2/identity/users.rb + +#### Commits: +9e17677b +42b34ae2 +e04a58b0 + +#### What did we implement: +In the Opendax, users get a reset token by entering their email, after in reset password page user can reset the password by entering a valid reset token and a new password + +In Zagros, the reset password process is done in 3 steps, the first step is to generate OTP code by Vault, then is a step to check the OTP code in by separate API, and then reset the password + +```mermaid +sequenceDiagram + + Title: Reset password + + User->>Ranj:email + Ranj->>Dalan:Post: after client side checking + Dalan->>Ranj:4xx if the user does not exist + Dalan->>User:2xx send otp to his or her mail + Ranj->>User:Ask OTP code for confirming + User-->>Ranj:if OTP code not received, try for resend after 120 seconds + Ranj-->>Dalan: Ask for sending OTP code again + Dalan-->>User:2xx send otp to his or her mail + User->>Ranj: enter OTP code + Ranj->>Dalan: OTP code for checking + Dalan->>Ranj:4xx if user does not exist in the system + Dalan->>Ranj:4xx if OTP code expired + Dalan->>Ranj:2xx OTP code is check\n + Ranj->>User: show reset password page + Ranj->>Dalan: email, password, confirm_password + Dalan->>Ranj:4xx if user does not exist in the system + Dalan->>Ranj:4xx if new_password is not same to confirm_password + Dalan->>Ranj:4xx if new password is not strong + Dalan->>Ranj:2xx reset user password + Ranj->>User:notify user that password changed +``` diff --git a/docs/zagros/sign-up/sign-up.md b/docs/zagros/sign-up/sign-up.md new file mode 100644 index 0000000..3c9d113 --- /dev/null +++ b/docs/zagros/sign-up/sign-up.md @@ -0,0 +1,56 @@ +# Registration: Sign-up +###### Sprint: 2 + +### Outcome: +Users can register via an email and a strong password, then we send OTP code to this email, the user must confirm the email by entering the OTP code. + + +### Implementation description: + +#### Endpoints: +POST: {$domain}/api/v2/barong/identity/users + +POST: {$domain}/api/v2/barong/identity/confirm_email + +#### File destination: +{$Dalan_Path}/app/api/v2/identity/users.rb + +#### Commits: +42602037 +Fb5162e5 +f57aaf35 +fb9db4ee +70104499 +63f69ed0 +99c25524 +0ee97595 + +#### What did we implement? +In the Opendax, users confirm their email by a unique link that is sent to their email, also in the registration process if one person uses an incorrect email, the email locks forever so the real owner of the email can not register ever. +In the Zagros, the email will lock when confirming it and this confirming happens when the user enters the Six digits OTP code in the website. +To send OTP code, we use Vault Service and adding action variable to distinguish every use of the Vault (for example to use it in following processes: Sign up, Change password, reset password and etc) also, email duplication in the registration process is allowed until the email confirmation or ban email in the system + +`Ps: action is a new variable that passes to ruby vault service.` + +```mermaid +sequenceDiagram + +Title: Sign up + +note over User,Ranj:starred parameters are optional +User->>Ranj:email, password, *refid* +Ranj->>Dalan:Post : after client side checking +Dalan->>Ranj:4xx if user status is active or ban +Dalan->>Ranj:4xx if email or password not valid +Dalan->>User:2xx send otp to his or her mail +Ranj->>User:Ask OTP code for confirming +User-->>Ranj:if OTP code not received, try for resend after 120 seconds +Ranj-->>Dalan:Ask for sending OTP code again +Dalan-->>User:2xx send otp to his or her mail +User->>Ranj: enter OTP code +Ranj->>Dalan:Post : OTP code for checking +Dalan->>Ranj:4xx if OTP code expired +Dalan->>Ranj:4xx if user not exist in system +Dalan->>Ranj:2xx create user, return user information +Ranj->>User:Redirect user to the main page +``` diff --git a/docs/zagros/uploader/uploader.md b/docs/zagros/uploader/uploader.md new file mode 100644 index 0000000..bb3112e --- /dev/null +++ b/docs/zagros/uploader/uploader.md @@ -0,0 +1,31 @@ +# Uploader + +The uploader **principle** defines that who is responsible for saving any document type in the system and how does it. + +the Opendax support these providers as uploader type +`local` `google` `aws` `alicloud` + +for `google`, `aws`, and `local` type, the UploadUploader class is a provider, +this class is a child from this gem : +[carrierwave](https://github.com/carrierwaveuploader/carrierwave) + +**path of file** : app/uploaders/upload_uploader.rb + +but for `alicloud` type, the provider is `AliUploader` class + +**path of file** : app/uploaders/ali_uploader.rb that this class in the child of carrierwave gem too. + + +in the `Dalan` version, we save files without any encryption +and use only `local` type for uploader and this config exist in alvand/config/app.yml + +the path of uploaded file is : + +```"public/uploads/#{model.class.to_s.underscore}/upload/#{model.id}" +example : public/uploads/document/upload/1/front_card.png +``` +###TODO +#### [Fog](https://fog.io/storage/) +in app/uploaders/upload_uploader.rb , we change the config code to hardcode to always use `local` type, +if you want to use fog type you must revert these lines: +line 4 to 12 diff --git a/geolite/COPYRIGHT.txt b/geolite/COPYRIGHT.txt new file mode 100644 index 0000000..90eb0ee --- /dev/null +++ b/geolite/COPYRIGHT.txt @@ -0,0 +1 @@ +Database and Contents Copyright (c) 2021 MaxMind, Inc. diff --git a/geolite/GeoLite2-Country.mmdb b/geolite/GeoLite2-Country.mmdb new file mode 100644 index 0000000000000000000000000000000000000000..ce4db4a33cd05d54ba8c872a2ca6fa67e2521563 GIT binary patch literal 4220684 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%0D)874f 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

J_D1r+wzv)EYXEqzg^;RBuwfMJ1d6 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⁡$|y6L(kK-P+Mc7MI=Karbb#I=Fip?q#^Qpb`7v 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%0AqLp!HEi(VAA$%%a{^WVC^Zm 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 pC34fWqqpMtvI|7^s`D+cOQQm;`TW3PIo?fO*I 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�szA5(ou^^rLTZBUlZCsd#62%ZWiTYKi# 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 z zI%DbFLg!|!ChUj5T1|9rrE^72J85&aZS{q4OFYJO4p!;Ot_BURR6VdBbk> zriRkb^DR0y9ng8loYnY$r~Izpr}F`wAI$4RI+AH$()pOqXLLTH^J(LkO&Y)bp+AhS z?Mvr#I$t#YxLp6zHF536Kljr4iq5xmzNYhy{wZwY_uhanyjZ@G@8}5M*_ Z>s6N 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 z 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 ?uk2bv{89i3fK8hZvXm>@AXZ8d<5xZfv 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�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 z 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�akSCR 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 myMybmo@`vZb8Fg8>d`pv_Vx6OH(OmjZoA27-n^ e + Rails.logger.error { "Failed to create activity with params: #{params}\n" \ + "Inspect error: #{e.inspect}\n#{e.backtrace.join("\n")}" } + + # If system catch Mysql2::Error::ConnectionError + # System will reconnect to DB and push message again to the activities queue + if e.is_a? (ActiveRecord::StatementInvalid) + ActiveRecord::Base.connection.reconnect! + sleep(0.1) + @activities.push(options) + end + end + end + end + end + + def self.sync_write(options = {}) + Activity.create(format_params(options)) + end + + def self.format_params(params) + topic = params[:topic].nil? && params[:path].split('admin/')[1].nil? ? 'general' : params[:topic] || params[:path].split('admin/')[1].split('/')[0] + { + user_id: params[:user_id], + target_uid: target_user(params[:payload]) || '', + user_ip: params[:user_ip], + user_agent: params[:user_agent], + topic: topic, + action: ACTION[params[:verb].downcase.to_sym] || 'system', + result: params[:result], + category: 'admin', + data: format_payload(params[:payload]) + } + end + + def self.format_payload(payload) + return unless payload + + return payload.to_json unless valid_json?(payload.keys.first) + + payload.keys.first + end + + def self.target_user(payload) + # in case payload is missing || empty POST body: payload => {"null" => nil } + return if payload.nil? || payload.keys.first == "null" + + if valid_json?(payload.keys.first) + payload = JSON.parse(payload.keys.first) + end + + payload[:uid] || payload[:user_uid] || payload['uid'] || payload['user_uid'] + end + + def self.valid_json?(json) + JSON.parse(json) + true + rescue JSON::ParserError => e + false + end + end +end diff --git a/lib/barong/amqp/config.rb b/lib/barong/amqp/config.rb new file mode 100644 index 0000000..4ec5c86 --- /dev/null +++ b/lib/barong/amqp/config.rb @@ -0,0 +1,61 @@ +# encoding: UTF-8 +# frozen_string_literal: true + +module AMQP + class Config + class <= Barong::App.config.apikey_nonce_lifetime + # signature should be valid + error!({ errors: ['authz.invalid_signature'] }, 401) unless api_key.verify_hmac_payload? + + current_api_key = APIKey.find_by_kid(api_key_params[:kid]) + # corresponding Api Key should be active + error!({ errors: ['authz.apikey_not_active'] }, 401) unless current_api_key.active? + + # here User is either User object or ServiceAccount object + user = current_api_key.key_holder_account + validate_user!(user) + + validate_permissions!(user) + + user # returns user(api key creator) + rescue ActiveRecord::RecordNotFound + error!({ errors: ['authz.unexistent_apikey'] }, 401) + end + + def validate_csrf! + return unless Barong::App.config.csrf_protection && @request.env['REQUEST_METHOD'].in?(STATE_CHANGING_VERBS) + + unless headers['X-CSRF-Token'] + Rails.logger.info("CSRF attack warning! Missing token for uid: #{session[:uid]} in request to #{@path} by #{@request.env['REQUEST_METHOD']}") + error!({ errors: ['authz.missing_csrf_token'] }, 401) + end + + unless headers['X-CSRF-Token'] == session[:csrf_token] + Rails.logger.info("CSRF attack warning! Token is not valid for uid: #{session[:uid]} in request to #{@path} by #{@request.env['REQUEST_METHOD']}") + error!({ errors: ['authz.csrf_token_mismatch'] }, 401) + end + end + + def validate_permissions!(user) + # Caches Permission.all result to optimize + permissions = Rails.cache.fetch('permissions', expires_in: 5.minutes) { Permission.all.to_ary } + + permissions.select! { |a| a.role == user.role && ( a.verb == @request.env['REQUEST_METHOD'] || a.verb == 'ALL' ) && @path.starts_with?(a.path) } + actions = permissions.blank? ? [] : permissions.pluck(:action).uniq + + if permissions.blank? || actions.include?('DROP') || !actions.include?('ACCEPT') + log_activity(user.id, 'denied') if user.is_a?(User) + error!({ errors: ['authz.invalid_permission'] }, 401) + end + + if actions.include?('AUDIT') + topic = permissions.select { |a| a.action == 'AUDIT' }[0].topic + log_activity(user.id, 'succeed', topic) if user.is_a?(User) + end + end + + def log_activity(user_id, result, topic = nil) + if Rails.env.test? + ActivityLogger.sync_write(activity_params(user_id, result, topic)) + else + ActivityLogger.async_write(activity_params(user_id, result, topic)) + end + end + + def activity_params(user_id, result, topic) + { + user_id: user_id, + result: result, + user_agent: @request.env['HTTP_USER_AGENT'], + user_ip: remote_ip, + path: @path, + topic: topic, + verb: @request.env['REQUEST_METHOD'], + payload: @request.params + } + end + + # black/white list validation. takes ['block', 'pass'] as a parameter + def under_path_rules?(type) + return false if @rules[type].nil? # if no authz rules provided + + @rules[type].each do |t| + return true if @path.starts_with?(t) # if request path is inside the rules list + end + false # default + end + + def remote_ip + # default behaviour, IP from HTTP_X_FORWARDED_FOR + ip = @request.remote_ip + + if Barong::App.config.gateway == 'akamai' + # custom header that contains only client IP + true_client_ip = @request.env['HTTP_TRUE_CLIENT_IP'] + # take IP from TRUE_CLIENT_IP only if its not nil or empty + ip = true_client_ip unless true_client_ip.nil? || true_client_ip.empty? + end + + return ip + end + + private + + # encode helper method + def codec + @_codec ||= Barong::JWT.new(key: Barong::App.config.keystore.private_key) + end + + # fetch authz rules from yml + def lists + YAML.safe_load( + ERB.new( + File.read( + Barong::App.config.authz_rules_file + ) + ).result + ) + end + + # checks if api key headers are present in request + def api_key_headers? + return false if headers['X-Auth-Apikey'].nil? && + headers['X-Auth-Nonce'].nil? && + headers['X-Auth-Signature'].nil? + @api_key_headers = [headers['X-Auth-Apikey'], headers['X-Auth-Nonce'], headers['X-Auth-Signature']] + validate_headers? + end + + def validate_user!(user) + unless user.state.in?(%w[active pending]) + error!({ errors: ['authz.invalid_session'] }, 401) + end + + return if skip_api_key_2fa? + + if user.is_a?(User) && !user.otp + error!({ errors: ['authz.disabled_2fa'] }, 401) + end + end + + def skip_api_key_2fa? + ENV['BARONG_SKIP_API_KEY_2FA'] == 'true' + end + + # api key headers nil, blank validation + def validate_headers? + @api_key_headers.each do |k| + error!({ errors: ['authz.invalid_api_key_headers'] }, 422) if k.blank? + end + end + + # converts header into hash of parameters + def api_key_params + { + 'kid': headers['X-Auth-Apikey'], + 'nonce': headers['X-Auth-Nonce'], + 'signature': headers['X-Auth-Signature'] + } + end + + # custom error, calls AuthError class + def error!(text, code) + Rails.logger.debug "Error raised with code #{code} and error message #{text.to_json}" + raise AuthError.new(code), text.to_json + end + + def headers + @request.headers + end + + def session + @request.session + end + end +end diff --git a/lib/barong/cors/validations.rb b/lib/barong/cors/validations.rb new file mode 100644 index 0000000..64810dc --- /dev/null +++ b/lib/barong/cors/validations.rb @@ -0,0 +1,35 @@ +# frozen_string_literal: true + +# Provides CORS variables validation. +module Barong + module CORS + # Main CORS policy logic + module Validations + Error = Class.new(StandardError) + + class << self + def validate_origins(origins) + origins.split(',').each_with_object([]) do |origin, domains| + if origin == '*' + Rails.logger.info { "WARNING: API_CORS_ORIGIN is set to '*'" } + return '*' + elsif origin.match? %r{https?:\/\/([a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)*(:^[0-9]*$+)?} + domains << origin + else + raise CORS::Validations::Error, "Set right origin domain name instead of #{origin}" + end + end + end + + def validate_max_age(max_age) + if max_age.present? && max_age.match?(/^[0-9]*$/) + max_age + else + Rails.logger.info { 'WARNING: Incorect or missing API_CORS_MAX_AGE value. Using default value: 3600' } + '3600' + end + end + end + end + end +end diff --git a/lib/barong/event_api.rb b/lib/barong/event_api.rb new file mode 100644 index 0000000..aed3261 --- /dev/null +++ b/lib/barong/event_api.rb @@ -0,0 +1,235 @@ +# frozen_string_literal: true + +require 'active_support/concern' +require 'active_support/lazy_load_hooks' + +# EventAPI provides interface to platform-wide notifications in RabbitMQ. +# +# Check docs/specs/event_api.md for more details. +module EventAPI + + MAPPING = { + 'sign-up' => 'system.user.email.confirmation.code', + 'reset-password' => 'system.user.password.reset.token', + 'enable-otp' => 'system.user.email.otp.enable', + 'disable-otp' => 'system.user.email.otp.disable', + 'change-password' => 'system.user.password.confirmation.code', + }.freeze + + class << self + def notify(event_name, event_payload) + event_name = MAPPING.dig(event_name).present? ? MAPPING.dig(event_name) : event_name + raise('Dalan mailer event name is unknown') unless event_name.present? + + arguments = [event_name, event_payload] + middlewares.each do |middleware| + returned_value = middleware.call(*arguments) + case returned_value + when Array then arguments = returned_value + else return returned_value + end + rescue StandardError => e + report_exception(e) + raise + end + end + + def middlewares=(list) + @middlewares = list + end + + def middlewares + @middlewares ||= [] + end + end + + module ActiveRecord + class Mediator + attr_reader :record + + def initialize(record) + @record = record + end + + def notify(partial_event_name, event_payload) + tokens = ['model'] + tokens << record.class.event_api_settings.fetch(:prefix) { record.class.name.underscore.gsub(/\//, '_') } + tokens << partial_event_name.to_s + full_event_name = tokens.join('.') + + ::EventAPI.notify(full_event_name, event_payload) + end + + def notify_record_created + notify(:created, record: record.as_json_for_event_api.compact) + end + + def notify_record_updated + return if record.previous_changes.blank? + + current_record = record + previous_record = record.dup + record.previous_changes.each { |attribute, values| previous_record.send("#{attribute}=", values.first) } + + # Guarantee timestamps. + previous_record.created_at ||= current_record.created_at + previous_record.updated_at ||= current_record.created_at + + after = current_record.as_json_for_event_api.compact + before = previous_record.as_json_for_event_api.compact.delete_if { |atr, val| after[atr] == val } + + notify :updated, \ + record: after, + changes: before.except(:updated_at) + end + end + + module Extension + extend ActiveSupport::Concern + + included do + # We add «after_commit» callbacks immediately after inclusion. + %i[create update].each do |event| + after_commit on: event, prepend: true do + if self.class.event_api_settings[:on]&.include?(event) + event_api.public_send("notify_record_#{event}d") + end + end + end + end + + module ClassMethods + def acts_as_eventable(settings = {}) + settings[:on] = %i[create update] unless settings.key?(:on) + @event_api_settings = event_api_settings.merge(settings) + end + + def event_api_settings + @event_api_settings || superclass.instance_variable_get(:@event_api_settings) || {} + end + end + + def event_api + @event_api ||= Mediator.new(self) + end + + def as_json_for_event_api + as_json + end + end + end + + # To continue processing by further middlewares return array with event name and payload. + # To stop processing event return any value which isn't an array. + module Middlewares + class << self + def application_name + Rails.application.class.name.split('::').first.underscore + end + + def application_version + "#{application_name.camelize}::VERSION".constantize + end + end + + class IncludeEventMetadata + def call(event_name, event_payload) + event_payload[:name] = event_name + [event_name, event_payload] + end + end + + class GenerateJWT + def call(event_name, event_payload) + jwt_payload = { + iss: Middlewares.application_name, + jti: SecureRandom.uuid, + iat: Time.now.to_i, + exp: (Time.now + 1.hour).to_i, + event: event_payload + } + + private_key = Barong::App.config.keystore.private_key + algorithm = 'RS256' + + jwt = JWT::Multisig.generate_jwt jwt_payload, \ + { Middlewares.application_name.to_sym => private_key }, + { Middlewares.application_name.to_sym => algorithm } + + [event_name, jwt] + rescue KeyError + raise 'No EVENT_API_JWT_PRIVATE_KEY found in env!' + end + end + + class PrintToScreen + def call(event_name, event_payload) + Rails.logger.debug do + ['', + 'Produced new event at ' + Time.current.to_s + ': ', + 'name = ' + event_name, + 'payload = ' + event_payload.to_json, + ''].join("\n") + end + [event_name, event_payload] + end + end + + class PublishToRabbitMQ + extend Memoist + + def call(event_name, event_payload) + Rails.logger.debug do + "\nPublishing #{routing_key(event_name)} (routing key) to #{exchange_name(event_name)} (exchange name).\n" + end + exchange = bunny_exchange(exchange_name(event_name)) + exchange.publish(event_payload.to_json, routing_key: routing_key(event_name)) + [event_name, event_payload] + end + + private + + def bunny_session + Bunny::Session.new(rabbitmq_credentials).tap do |session| + session.start + Kernel.at_exit { session.stop } + end + end + memoize :bunny_session + + def bunny_channel + bunny_session.channel + end + memoize :bunny_channel + + def bunny_exchange(name) + bunny_channel.direct(name) + end + memoize :bunny_exchange + + def rabbitmq_credentials + return ENV['EVENT_API_RABBITMQ_URL'] if ENV['EVENT_API_RABBITMQ_URL'].present? + + { + host: Barong::App.config.event_api_rabbitmq_host, + port: Barong::App.config.event_api_rabbitmq_port, + username: Barong::App.config.event_api_rabbitmq_username, + password: Barong::App.config.event_api_rabbitmq_password + } + end + + def exchange_name(event_name) + "#{Middlewares.application_name}.events.#{event_name.split('.').first}" + end + + def routing_key(event_name) + event_name.split('.').drop(1).join('.') + end + end + end + + middlewares << Middlewares::IncludeEventMetadata.new + middlewares << Middlewares::GenerateJWT.new + middlewares << Middlewares::PrintToScreen.new + middlewares << Middlewares::PublishToRabbitMQ.new +end diff --git a/lib/barong/geo_ip.rb b/lib/barong/geo_ip.rb new file mode 100644 index 0000000..751123f --- /dev/null +++ b/lib/barong/geo_ip.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +module Barong +# MaxmindDB reader adapter + module GeoIP + class << self + attr_accessor :lang + + # Usage: city = Barong::GeoIP.get(ip: ip, key: :city) + def info(ip:, key:) + record = reader.get(ip) + return unless record + + case key.to_sym + when :country + return record['country']['names'][lang] if record['country'] + when :continent + return record['continent']['names'][lang] if record['continent'] + end + end + + private + + def reader + @reader ||= MaxMind::DB.new(Barong::App.config.maxminddb_path, mode: MaxMind::DB::MODE_MEMORY) + end + end + end +end diff --git a/lib/barong/json_log_formatter.rb b/lib/barong/json_log_formatter.rb new file mode 100644 index 0000000..26987fd --- /dev/null +++ b/lib/barong/json_log_formatter.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +# json formatter for logs +class JSONLogFormatter < ::Logger::Formatter + def call(severity, time, _progname, msg) + JSON.dump(level: severity, time: time, message: msg) + "\n" + end +end diff --git a/lib/barong/jwt.rb b/lib/barong/jwt.rb new file mode 100644 index 0000000..ffefc01 --- /dev/null +++ b/lib/barong/jwt.rb @@ -0,0 +1,50 @@ +module Barong + class JWT + + def initialize(options) + raise "Missing private key" unless options[:key] + @options = options.reverse_merge({ + algoritm: 'RS256', + expire: Barong::App.config.jwt_expire_time, + sub: 'session', + iss: 'barong', + aud: %w[peatio barong] + }) + end + + def encode(payload) + ::JWT.encode(merge_claims(payload), + @options[:key], @options[:algoritm]) + end + + def decode_and_verify(token, verify_options) + @verify_options = verify_options.reverse_merge({ + verify_expiration: true, + verify_not_before: true, + iss: 'barong', + verify_iss: true, + verify_iat: true, + verify_jti: true, + aud: %w[peatio barong], + verify_aud: true, + sub: 'confirmation', + verify_sub: true, + algorithms: 'RS256' + }) + payload, header = ::JWT.decode(token, @verify_options[:pub_key], true, @verify_options) + payload.keys.each { |k| payload[k.to_sym] = payload.delete(k) } + payload + end + + def merge_claims(payload) + payload.reverse_merge({ + iat: Time.now.to_i, + exp: (Time.now + @options[:expire]).to_i, + sub: @options[:sub], + iss: @options[:iss], + aud: @options[:aud], + jti: SecureRandom.hex(10) + }) + end + end +end diff --git a/lib/barong/keystore.rb b/lib/barong/keystore.rb new file mode 100644 index 0000000..0b60dc6 --- /dev/null +++ b/lib/barong/keystore.rb @@ -0,0 +1,49 @@ +# frozen_string_literal: true + +module Barong + class KeyStore + + class Fatal < StandardError; end + + def initialize(private_key) + OpenSSL::PKey.read(private_key).tap do |key| + @private_key = key + @public_key = key.public_key + end + end + + def public_key + @public_key + end + + def private_key + @private_key + end + + class << self + def open!(private_key_path) + pkeyio = File.open(private_key_path) + return OpenSSL::PKey.read(pkeyio).to_pem + rescue + raise Barong::KeyStore::Fatal + end + + def read!(private_key) + return OpenSSL::PKey.read(private_key).to_pem + rescue + raise Barong::KeyStore::Fatal + end + + def save!(key, path) + File.open(path, 'w+') { |file| file.write(key) } + rescue + raise Barong::KeyStore::Fatal + end + + def generate + OpenSSL::PKey::RSA.generate(2048) + end + end + + end +end diff --git a/lib/barong/middleware.rb b/lib/barong/middleware.rb new file mode 100644 index 0000000..7426026 --- /dev/null +++ b/lib/barong/middleware.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +require 'barong/middleware/jwt_authenticator' + +module Barong + # Barong Rack middlewares + module Middleware; end +end diff --git a/lib/barong/middleware/jwt_authenticator.rb b/lib/barong/middleware/jwt_authenticator.rb new file mode 100644 index 0000000..cd339db --- /dev/null +++ b/lib/barong/middleware/jwt_authenticator.rb @@ -0,0 +1,46 @@ +# frozen_string_literal: true + +module Barong + module Middleware + # Authenticate a user by a bearer token + class JWTAuthenticator < Grape::Middleware::Base + def initialize(app, options) + super(app, options) + raise(Peatio::Auth::Error, 'Public key missing') unless options[:pubkey] + + @keypub = options[:pubkey] + end + + def before + return if request.path.include? 'swagger' + + raise(Peatio::Auth::Error, 'Header Authorization missing') \ + unless authorization_present? + + token = request.headers['Authorization'] + env[:current_payload] = authenticator.authenticate!(token) + end + + private + + # JWT Authenticator instance from peatio-core + # + # @return [Peatio::Auth::JWTAuthenticator] + def authenticator + @authenticator ||= + Peatio::Auth::JWTAuthenticator.new(@keypub) + end + + def authorization_present? + request.headers.key?('Authorization') + end + + # Request entity + # + # @return [Grape::Request] + def request + @request ||= Grape::Request.new(env) + end + end + end +end diff --git a/lib/barong/mock_sms.rb b/lib/barong/mock_sms.rb new file mode 100644 index 0000000..968f36c --- /dev/null +++ b/lib/barong/mock_sms.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +module Barong + # empty sms service + class MockSMS + cattr_accessor :messages + self.messages = [] + + def initialize(_account_sid, _auth_token) end + + def messages + self + end + + def create(params) + self.class.messages << OpenStruct.new(params) + end + end +end diff --git a/lib/barong/seed.rb b/lib/barong/seed.rb new file mode 100644 index 0000000..09d3d19 --- /dev/null +++ b/lib/barong/seed.rb @@ -0,0 +1,191 @@ +module Barong + class Seed + class ConfigError < RuntimeError; end + + def initialize + @result = [] + end + + def seeds + YAML.safe_load( + ERB.new( + File.read( + Barong::App.config.seeds_file + ) + ).result + ) + end + + def inspect + str = "Seeded users:\n" + str += @result.map do |user| + "Email: #{user[:email]}, password: #{user[:password]}" + end.join("\n") + return str + end + + def logger + @logger ||= Logger.new(STDERR, progname: "db:seed") + end + + def seed_provinces + logger.info "Seeding provinces" + seeds["provinces"].each_with_index do |province, index| + logger.info "---" + if Province.find_by(name: province["name"]).present? + logger.info "province '#{province['name']}' already exists" + next + end + province[:id] = index+1 + Province.create!(province) + end + end + + def seed_cities + logger.info "Seeding cities" + seeds["cities"].each_with_index do |city, index| + logger.info "---" + if City.find_by(name: city["name"]).present? + logger.info "province '#{city['name']}' already exists" + next + end + city[:id] = index+1 + City.create!(city) + end + end + + def seed_levels + logger.info "Seeding levels" + seeds["levels"].each_with_index do |level, index| + logger.info "---" + if Level.find_by(key: level["key"], value: level["value"]).present? + logger.info "Level '#{level['key']}:#{level['value']}' already exists" + next + end + level[:id] = index+1 + Level.create!(level) + end + end + + def seed_permissions + logger.info "Seeding permissions" + seeds["permissions"].each do |perm| + logger.info "---" + if Permission.find_by(role: perm["role"], verb: perm["verb"], path: perm["path"], action: perm["action"]).present? + logger.info "Permission for '#{perm['role']}' : '#{perm['verb']} to #{perm['path']}' already exists" + next + end + + permission = Permission.new(perm) + + unless permission.save + raise ConfigError.new("Can't create permission: #{permission.errors.full_messages.join('; ')}") + end + end + end + + def seed_users + logger.info "Seeding users" + seeds["users"]&.each do |seed| + logger.info "---" + + raise ConfigError.new("Email missing in users seed") if seed["email"].to_s.empty? + raise ConfigError.new("Level is missing for user #{seed["email"]}") unless seed["level"].is_a?(Integer) + + # Skip existing users + if User.find_by(email: seed["email"]).present? + logger.info "User '#{seed['email']}' already exists" + @result.push(email: seed["email"]) + next + end + + user = User.new(seed) + user.password ||= SecureRandom.base64(30) + + if user.save + logger.info "Created user for '#{user.email}'" + + # Set correct level with labels + # levels = Level.where(id: 1..user.level) + levels = Level.where(id: 1..Level::LEVEL_ID_BOUNDS[user.level.to_s]) + raise ConfigError.new("No enough levels found in database to grant the user to level #{user.level}") if levels.count < user.level + + levels.find_each do |level| + user.labels.create(key: level.key, value: level.value, scope: 'private') + end + + @result.push(email: user.email, password: user.password, level: user.level) + else + logger.error "Can't create user '#{user.email}': #{user.errors.full_messages.join('; ')}" + end + end + end + + def seed_superadmin + + logger.info "Seeding superadmin" + seeds["superadmin"]&.each do |seed| + logger.info "---" + raise ConfigError.new("Email missing in users seed") if seed["email"].to_s.empty? + raise ConfigError.new("Level is missing for user #{seed["email"]}") unless seed["level"].is_a?(Integer) + + # Skip existing users + if User.find_by(email: seed["email"]).present? + logger.info "User '#{seed['email']}' already exists" + @result.push(email: seed["email"]) + next + end + + user = User.new(seed) + user.password ||= SecureRandom.base64(30) + + if user.save + logger.info "Created user for '#{user.email}'" + + # Set correct level with labels + # levels = Level.where(id: 1..user.level) + levels = Level.where(id: 1..Level::LEVEL_ID_BOUNDS[user.level.to_s]) + raise ConfigError.new("No enough levels found in database to grant the user to level #{user.level}") if levels.count < user.level + + levels.find_each do |level| + user.labels.create(key: level.key, value: level.value, scope: 'private') + end + + @result.push(email: user.email, password: user.password, level: user.level) + else + logger.error "Can't create user '#{user.email}': #{user.errors.full_messages.join('; ')}" + end + end + end + + + def seed_restrictions + logger.info "Seeding restrictions" + return logger.info "Restrictions seed is empty!" if seeds["restrictions"].empty? + + seeds["restrictions"].each do |seed| + logger.info "---" + if Restriction.find_by(category: seed["category"], scope: seed["scope"], value: seed["value"], state: seed["state"]).present? + logger.info "Restriction '#{seed['category']}' '#{seed['scope']} #{seed['value']}' #{seed['state']}' already exists" + next + end + raise ConfigError.new("category missing in restrictions seed") if seed["category"].nil? + raise ConfigError.new("scope is missing in restrictions seed") if seed["scope"].nil? + raise ConfigError.new("value is missing in restrictions seed") if seed["value"].nil? + raise ConfigError.new("state is missing in restrictions seed") if seed["state"].nil? + + restriction = Restriction.new( + category: seed["category"], + scope: seed["scope"], + value: seed["value"], + state: seed["state"], + code: seed["code"] + ) + + unless restriction.save + raise ConfigError.new("Can't create restriction: #{restriction.errors.full_messages.join('; ')}") + end + end + end + end +end diff --git a/lib/barong/string.rb b/lib/barong/string.rb new file mode 100644 index 0000000..52f936f --- /dev/null +++ b/lib/barong/string.rb @@ -0,0 +1,49 @@ +class String + CHARACTER_MAPPING = { + 'ك' => 'ک', + 'دِ' => 'د', + 'بِ' => 'ب', + 'زِ' => 'ز', + 'ذِ' => 'ذ', + 'شِ' => 'ش', + 'سِ' => 'س', + 'ى' => 'ی', + 'ي' => 'ی', + '١' => '۱', + '٢' => '۲', + '٣' => '۳', + '٤' => '۴', + '٥' => '۵', + '٦' => '۶', + '٧' => '۷', + '٨' => '۸', + '٩' => '۹', + '٠' => '۰' + }.freeze + + def to_persian + gsub(Regexp.union(CHARACTER_MAPPING.keys), CHARACTER_MAPPING) + end + + def percent_match(mold) + mold = mold.to_s.to_persian + str = self.to_persian + char_cost = (100.to_f / length).round(2) + matching = 0 + str_index = 0 + mold_index = 0 + str.each_char.with_index do |_char, index| + break if mold[mold_index].blank? + + if mold[mold_index] != str[str_index] + mold_index = index - 1 if mold.length < str.length + str_index = index - 1 if mold.length > str.length + else + matching += char_cost + end + str_index += 1 + mold_index += 1 + end + matching.round + end +end diff --git a/lib/tasks/activities.rake b/lib/tasks/activities.rake new file mode 100644 index 0000000..4776c08 --- /dev/null +++ b/lib/tasks/activities.rake @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +namespace :activities do + + desc "Delete activities for specific period. From and To parameters should be on next format 'YYYY-mm-dd'" + task :delete, [:from, :to] => [:environment] do |_, args| + if args[:from].present? && args[:to].present? + + if valid_date?(args[:from]) && valid_date?(args[:to]) + activities = Activity.where('DATE(created_at) >= ? AND DATE(created_at) <= ?', args[:from].to_date, args[:to].to_date) + + puts "Found #{activities.count} activities to delete" + activities.delete_all + end + else + puts "There is no parameters (from, to)" + end + end + + def valid_date?(date) + Date.parse(date) + true + rescue ArgumentError + puts "Invalid date #{date}, should be 'YYYY-mm-dd''" + false + end +end diff --git a/lib/tasks/auto_annotate_models.rake b/lib/tasks/auto_annotate_models.rake new file mode 100644 index 0000000..cbc0505 --- /dev/null +++ b/lib/tasks/auto_annotate_models.rake @@ -0,0 +1,53 @@ +# frozen_string_literal: true + +# NOTE: only doing this in development as some production environments (Heroku) +# NOTE: are sensitive to local FS writes, and besides -- it's just not proper +# NOTE: to have a dev-mode tool do its thing in production. +if Rails.env.development? && defined?(Annotate) + task :set_annotation_options do + # You can override any of these by setting an environment variable of the + # same name. + Annotate.set_defaults \ + "routes" => "false", + "position_in_routes" => "before", + "position_in_class" => "after", + "position_in_test" => "before", + "position_in_fixture" => "before", + "position_in_factory" => "before", + "position_in_serializer" => "before", + "show_foreign_keys" => "true", + "show_complete_foreign_keys" => "true", + "show_indexes" => "true", + "simple_indexes" => "false", + "model_dir" => "app/models", + "root_dir" => "", + "include_version" => "true", + "require" => "", + "exclude_tests" => "true", + "exclude_fixtures" => "true", + "exclude_factories" => "true", + "exclude_serializers" => "true", + "exclude_scaffolds" => "true", + "exclude_controllers" => "true", + "exclude_helpers" => "true", + "exclude_sti_subclasses" => "false", + "ignore_model_sub_dir" => "false", + "ignore_columns" => nil, + "ignore_routes" => nil, + "ignore_unknown_models" => "false", + "hide_limit_column_types" => "", + "hide_default_column_types" => "", + "skip_on_db_migrate" => "false", + "format_bare" => "true", + "format_rdoc" => "false", + "format_markdown" => "false", + "sort" => "false", + "force" => "false", + "trace" => "false", + "wrapper_open" => nil, + "wrapper_close" => nil, + "with_comment" => true + end + + Annotate.load_tasks +end diff --git a/lib/tasks/docker.rake b/lib/tasks/docker.rake new file mode 100644 index 0000000..d275a3e --- /dev/null +++ b/lib/tasks/docker.rake @@ -0,0 +1,8 @@ + +namespace 'docker' do + + desc "Build Application container" + task :build do + sh "docker build -t quay.io/openware/barong2:latest ." + end +end diff --git a/lib/tasks/export.rake b/lib/tasks/export.rake new file mode 100644 index 0000000..0f7d83a --- /dev/null +++ b/lib/tasks/export.rake @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +require 'yaml' +require 'csv' + +namespace :export do + + desc 'Export all users to csv file.' + task users: :environment do + count = 0 + errors_count = 0 + begin + CSV.open('barong_users.csv', 'w') do |csv| + csv << %w[uid email level role state] + User.find_each do |user| + csv << [user.uid, user.email, user.level, user.role, user.state] + count += 1 + end + rescue StandardError => e + message = { error: e.message, email: user.email, uid: user.uid } + Rails.logger.error message + errors_count += 1 + end + end + Kernel.puts "Exported #{count} users" + Kernel.puts "Errored #{errors_count}" + end + +end diff --git a/lib/tasks/generate.rake b/lib/tasks/generate.rake new file mode 100644 index 0000000..25154bd --- /dev/null +++ b/lib/tasks/generate.rake @@ -0,0 +1,42 @@ +# frozen_string_literal: true + +# To execute with optional user and api keys amount +# rake generate:users -- --n=1000 + +namespace 'generate' do + desc 'Build Application container' + task :users => :environment do + ### Parse options + options = {} + + o = OptionParser.new + + o.banner = 'Usage: rake generate:users [-n=100]' + o.on('-n NUMBER', '--number NUMBER') { |num| options[:num] = num.to_i } + + args = o.order!(ARGV) {} + o.parse!(args) + + options[:num] = 10 if options[:num].nil? + result_arr = [] + + options[:num].times do |i| + email = Faker::Internet.email + passwd = Faker::Internet.password(min_length: 10, special_characters: true) + u = User.create(email: email, password: passwd, level: 3, state: 'active') + + api_key = APIKey.create(user_id: u.id, kid: SecureRandom.hex(8), algorithm: 'HS256') + secret = SecureRandom.hex(16) + SecretStorage.store_secret(secret, api_key.kid) + result_arr.push({ + 'uid' => u.uid, + 'email' => u.email, + 'password' => passwd, + 'kid' => api_key.kid, + 'secret' => secret + }) + end + + File.write('tmp/payload.yml', result_arr.to_yaml) + end +end diff --git a/lib/tasks/import.rake b/lib/tasks/import.rake new file mode 100644 index 0000000..cc62f35 --- /dev/null +++ b/lib/tasks/import.rake @@ -0,0 +1,71 @@ + +#frozen_string_literal: true + +require 'csv' + +namespace :import do + # Detailed instruction https://github.com/rubykube/barong/blob/master/docs/tasks/import.md + # Required fields for import users: + # - uid + # - email + # + # Usage: + # For import users: -> bundle exec rake import:users['file_name.csv'] + + desc 'Load users from csv file.' + task :users, [:config_load_path] => [:environment] do |_, args| + csv_table = File.read(Rails.root.join(args[:config_load_path])) + import_user_log = File.open('./log/import_users.log', 'w') + count = 0 + CSV.parse(csv_table, :headers => true).map do |row| + row = row.to_h.compact.symbolize_keys! + defaults = { level: 0, role: 'member', state: 'pending', password: generate_password } + permitted_attr = %i[uid email role state] + User.new(row.slice(*permitted_attr) + .reverse_merge(defaults)) + .save! + count += 1 + rescue StandardError => e + message = { error: e.message, email: row[:email], uid: row[:uid] } + import_user_log.write(message.to_yaml + "\n") + end + import_user_log.close + Kernel.puts "Created #{count} members" + Kernel.puts "Errored #{CSV.parse(csv_table, headers: true).count - count}" + end + + # Required fields for import referrals: + # - uid + # - referral_uid + # + # Usage: + # For import users: -> bundle exec rake import:fill_referals['file_name.csv'] + + desc 'users referral relation from csv file' + task :fill_referrals, [:config_load_path] => [:environment] do |_, args| + csv_table = File.read(Rails.root.join(args[:config_load_path])) + import_affiliates_log = File.open('./log/import_referrals.log', 'w') + count = 0 + CSV.parse(csv_table, :headers => true).map do |row| + row = row.to_h.compact.symbolize_keys! + user = User.find_by_uid!(row[:uid]) + target_user = User.find_by_uid(row[:referral_uid]) + next unless target_user + + user.update!(referral_id: target_user.id) + count += 1 + rescue StandardError => e + message = { error: e.message, email: row[:email], uid: row[:uid], referral_uid: row[:referral_uid] } + import_affiliates_log.write(message.to_yaml + "\n") + end + import_affiliates_log.close + Kernel.puts "Created #{count} referrals" + end + + def generate_password + chars = ('a'..'z').to_a + numbers = ('0'..'9').to_a + special = %w[! @ # $ % & / ( ) + ? *] + chars.sort_by { rand }.join[0..3] + chars.sort_by { rand }.join[0..3].upcase + numbers.sort_by { rand }.join[0..3] + special.sort_by { rand }.join[0..3] + end +end diff --git a/lib/tasks/mailer.rake b/lib/tasks/mailer.rake new file mode 100644 index 0000000..3699753 --- /dev/null +++ b/lib/tasks/mailer.rake @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +require 'ostruct' + +namespace 'mailer' do + desc 'Generate email to the user with UID' + task :send, [:uid] => [:environment] do |_t, args| + record = OpenStruct.new + record.user = User.find_by(uid: args[:uid]) + record.domain = 'barong.io' + record.token = 'TEST_TOKEN' + + params = { + subject: 'Test Message', + template_name: 'email_confirmation.en.html.erb', + record: record, + changes: nil, + user: User.first + } + + Postmaster.process_payload(params).deliver_now + end +end diff --git a/lib/tasks/migrate.rake b/lib/tasks/migrate.rake new file mode 100644 index 0000000..73fd954 --- /dev/null +++ b/lib/tasks/migrate.rake @@ -0,0 +1,46 @@ +# frozen_string_literal: true + +namespace 'migrate' do + desc 'Migrate api keys from vault secrets to transit' + task "26-api-keys": [:environment] do + puts 'Migrating API keys from secrets to transit keys (new in 2.6)' + APIKey.find_in_batches do |keys| + keys.each do |key| + legacy_key_path = "secret/barong/api_key/#{key.kid}" + secret = TOTPService.read_data(legacy_key_path) + next unless secret + + value = secret.data[:value] + next unless value + + key.secret = value + key.save! + TOTPService.delete_data(legacy_key_path) + end + end + end + + desc 'Move TOTP secrets to include the vault application as prefix' + task "26-totp": [:environment] do + puts 'Moving TOTP secrets to include the vault application as prefix (new in 2.6)' + + User.find_in_batches do |users| + users.each do |u| + legacy_key_path = "totp/keys/#{u.uid}" + legacy_export_path = "totp/export/#{u.uid}" + + next unless TOTPService.read_data(legacy_key_path) + + params = TOTPService.read_data(legacy_export_path) + unless params + raise "Failed to export key (#{legacy_export_path})\n"\ + "Make sure vault is running with this image: quay.io/openware/vault:1.5.3-openware\n"\ + 'And make sure the token has read access to /totp/export/*' + end + key_path = TOTPService.totp_key(u.uid) + TOTPService.write_data(key_path, params.data.merge(generate: false)) + TOTPService.delete_data(legacy_key_path) + end + end + end +end diff --git a/lib/tasks/permissions.rake b/lib/tasks/permissions.rake new file mode 100644 index 0000000..46b6bfc --- /dev/null +++ b/lib/tasks/permissions.rake @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +namespace :permissions do + desc 'Reload user permissions' + task reload: :environment do + Permission.transaction do + # Delete old permissions + Permission.delete_all + # Clean permissions cache + Rails.cache.delete('permissions') + # Load permissions + Barong::Seed.new.seed_permissions + end + end +end diff --git a/lib/tasks/rotate.rake b/lib/tasks/rotate.rake new file mode 100644 index 0000000..ac6d5db --- /dev/null +++ b/lib/tasks/rotate.rake @@ -0,0 +1,24 @@ +#frozen_string_literal: true + +namespace :rotate do + desc 'Rotate profile keys' + task profiles: :environment do + Profile.find_each(batch_size: 100) do |profile| + profile.update({}) + end + end + + desc 'Rotate phones keys' + task phones: :environment do + Phone.find_each(batch_size: 100) do |phone| + phone.update({}) + end + end + + desc 'Rotate documents keys' + task documents: :environment do + Document.where.not(doc_number_encrypted: nil).find_each(batch_size: 100) do |document| + document.update({}) + end + end +end diff --git a/lib/tasks/superadmin.rake b/lib/tasks/superadmin.rake new file mode 100644 index 0000000..70703fb --- /dev/null +++ b/lib/tasks/superadmin.rake @@ -0,0 +1,52 @@ +# frozen_string_literal: true + +namespace :superadmin do + desc "create superadmin" + task create: :environment do + Kernel.puts "Seeding superadmin" + Barong::Seed.new().seeds["superadmin"]&.each do |seed| + Kernel.puts "---" + raise ConfigError.new("Email missing in users seed") if seed["email"].to_s.empty? + raise ConfigError.new("Level is missing for user #{seed["email"]}") unless seed["level"].is_a?(Integer) + + # Skip existing users + if User.find_by(email: seed["email"], state: seed['state']).present? + Kernel.puts "User '#{seed['email']}' already exists" + next + elsif User.find_by(email: seed["email"]).present? + User.find_by(email: seed["email"]).update(state: seed['state']) + next + end + + user = User.new(seed) + user.password ||= SecureRandom.base64(30) + + if user.save + Kernel.puts "Created user for '#{user.email}'" + + # Set correct level with labels + # levels = Level.where(id: 1..user.level) + levels = Level.where(id: 1..Level::LEVEL_ID_BOUNDS[user.level.to_s]) + raise ConfigError.new("No enough levels found in database to grant the user to level #{user.level}") if levels.count < user.level + + levels.find_each do |level| + user.labels.create(key: level.key, value: level.value, scope: 'private') + end + + else + Kernel.puts "Can't create user '#{user.email}': #{user.errors.full_messages.join('; ')}" + end + end + + end + + task delete: :environment do + Kernel.puts "deleting superadmin" + Barong::Seed.new().seeds["superadmin"]&.each do |seed| + user = User.find_by(email: seed['email']) + user.update(state: 'inactive') + end + end + + +end diff --git a/log/.keep b/log/.keep new file mode 100644 index 0000000..e69de29 diff --git a/public/404.html b/public/404.html new file mode 100644 index 0000000..2be3af2 --- /dev/null +++ b/public/404.html @@ -0,0 +1,67 @@ + + + + The page you were looking for doesn't exist (404) + + + + + + +

+ + diff --git a/public/422.html b/public/422.html new file mode 100644 index 0000000..c08eac0 --- /dev/null +++ b/public/422.html @@ -0,0 +1,67 @@ + + + + The change you wanted was rejected (422) + + + + + + +
+
+

The change you wanted was rejected.

+

Maybe you tried to change something you didn't have access to.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/public/500.html b/public/500.html new file mode 100644 index 0000000..78a030a --- /dev/null +++ b/public/500.html @@ -0,0 +1,66 @@ + + + + We're sorry, but something went wrong (500) + + + + + + +
+
+

We're sorry, but something went wrong.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/public/apple-touch-icon-precomposed.png b/public/apple-touch-icon-precomposed.png new file mode 100644 index 0000000..e69de29 diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png new file mode 100644 index 0000000..e69de29 diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..e69de29 diff --git a/public/logo.png b/public/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..09bff8e556ceeb4a149f3140567e0bfbaa6b7b67 GIT binary patch literal 2482 zcmV;j2~GBiP)r000*V1^@s6)PL9c00009a7bBm000XU z000XU0RWnu7ytkO0drDELIAGL9O(c600d`2O+f$vv5yP{qJpq?bK61iy#>i!-{S_zT>E$>4}$83n5g#G<;+jQVA*zJI%PtI0|-!Q!GT z%3zct`$Ppzm~Igrr{PvwhwJwS?)#!70_1o3VFsGYnC>LRjLR39xRBtqpoR9r@-4Tb zpKy`KOdKI>R)`x5pg`^Bx;JCOu3QM%D;Q&JInsRsPUi{`cIsF^jqi_=Bw^=^Xy@eU z%Wk%GVR^O9vz)dJWO2*^9+W@+Aih)8LDo@lb5nEVqucdPMM4ZjoiihsDP~%2b_0Pl|p43 z3s$PNOodjbs6xj01G}-sx9dFjr zN&i+pl;9snPqx_losxz%RB$kDmiALYg2R9pN-~Lp$9o*(w6igt4xsz>7jymV+rDeR zp*vn@J~>yO$X(kWhzm}AbZou5&mYctA~$3OdGR3Cr#G&@B21(xgtUl>g(srp^7_13 z$pQ@a{r=O_g{9k`2{<8iKQrpGxTh}E83R$Hs!n8a+Het}Y4647^Zpr6$0i^;r>2@SDiSNJHR+rsRB9lQ^QqMy7W9cr>K-#2=0$RHH(bd&HBK6tt9;m?X zPeb4dDzmqt?N8fw7HpNbcv1^#0Wu0>TtcB6w#M*XgvRA~frg%qkjoHxk++J7KLSII zct0Zat6WRLb7XQ1T8YL+f1|rS3{^kbyd%LSFHovTL23HUAIRL8 zN3Q&tc>|}znIb`4EN(C?mw1WY50qiDU>1yx*aRzBkc`{93f>N3BT(8`4hDxeNbT){B|#|9pp zGbG5ZTJUL6#G`o0%tC@q0zI4j`lEZ7*;%KM%FnnRo}7bhl|ZYWW$F9LHpjXjh?J$# z?3%WXwMves;4KKZW~|F%%2(ijg^-ZE*8}H(IO7R}S!gjw^kMu=X*!U=6fPk0ibAk| z^36dvTO96@4BIJQBxGj~vnH8eelwZvC|)+R-;+Whrt~yvAtFk@4Py|wlWugG*aAr{ zN{U^qIOwwFTOVinBD_n&%@ZY&O+$8<;_haX^TgT6EB-gJqQrcNyET{{7F7t{TwV^L zwzaM8dZI;YeY~`~mNNetcGf5q>PC8;9DHJ$p$*G3K)MMNAW~4d_M~63^p0Vm= zXCE#AC|XcE+%Lwg9_A6k7H=cPCB`% zUrN{7=qm8d3Jh48sNs&R=g>WZWb7ZMl`bA`YZGp?@{mj98qN($p8l!o79Kit6uYybD-NnDOGo z6#mHi-njQ_*G7%WvOI9}kDtAoV@9=`EEVF6`L0J}k2f$yf9=yjgW228L~;q#R+LYE z*KCju?q?fivga)qKxxy*O4R?ZiqFUsYEHbPJd?Ku=I8(isO_QvH9Fjs;%}HJJcJ7b zaX&WVfYVqnj#+q~noPt=W(i!r7&5hm!n1}^{mkFu7xRURH(V0er>cGx?q1vWH)TyG zk&9s$G`PuTel*#fW=do}tF`PDXF_L_Hew<@Rw>h`fhvQ@v!UJpz|yJghd1;j@bbiR zWQjQl6}2nM!r4wA36J@UnKOGpln$b0d}Z4VaeLfW^?VVuCppzu1MX-x)6?n}Whj}k z$Pvp1hWE9BVG!+1Dko5wp^HNrSr#U|jOG;_#u1mJw7L_!fhc}R)zjMYpaR0uvSMWR zev~u153CI+b|2wh5(;BWEiBj!)2Q!e-4p^%N5C-^Q0IgjXZ?M6&tO^BYvy=pim!w` zi9Nne90)qgD4dwMiUUK5k+Azo$^yQQ@6AGMC8SyX6xSTK)+_%!dYa=TWSUpDaAEv~`2oWjR8YJE&{ wKz)Mtxc?5j<3sivyLAHA6r#PT_!Rzs0pFr`CFNmZw*UYD07*qoM6N<$f~dj6-2eap literal 0 HcmV?d00001 diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 0000000..37b576a --- /dev/null +++ b/public/robots.txt @@ -0,0 +1 @@ +# See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file diff --git a/scripts/benchmark/phones.rb b/scripts/benchmark/phones.rb new file mode 100644 index 0000000..eeb5438 --- /dev/null +++ b/scripts/benchmark/phones.rb @@ -0,0 +1,49 @@ +require 'benchmark' +require_relative "../../config/environment" + +# Check only Error logs +ActiveRecord::Base.logger.level = 3 + +## Before benchmark +user = User.find_or_create_by(uid: "UIDExample", email: 'test_example@gmail.com') do |u| + u.password = "PasswordExample12" +end + +# Benchmark +puts '---------------------------' +puts 'Phone creating' +puts '---------------------------' +Benchmark.bm do |x| + # Creates 1 phone + x.report(:p_1) { + phone = Phone.new(user_id: user.id, country: 'UA', number: '123123123') + phone.save(validate: false) + } + # Creates 1000 phones + x.report(:p_1000) { + 1_000.times do + phone = Phone.new(user_id: user.id, country: 'UA', number: '123123123') + phone.save(validate: false) + end + } +end + +puts '---------------------------' +puts 'Descrypts data from phone' +puts '---------------------------' +Benchmark.bm do |x| + # Descrypts 1 phone + x.report(:p_1) { + Phone.last.number + } + # Descrypts 1000 phones + x.report(:p_1000) { + Phone.where(user_id: user.id).limit(1000).each do |phone| + phone.number + end + } +end + +## After benchmark +Phone.where(user_id: user.id).delete_all +user.destroy diff --git a/scripts/benchmark/profiles.rb b/scripts/benchmark/profiles.rb new file mode 100644 index 0000000..cbad897 --- /dev/null +++ b/scripts/benchmark/profiles.rb @@ -0,0 +1,55 @@ +require 'benchmark' +require_relative "../../config/environment" + +# Check only Error logs +ActiveRecord::Base.logger.level = 3 + +## Before benchmark +user = User.find_or_create_by(uid: "UIDExample", email: 'test_example@gmail.com') do |u| + u.password = "PasswordExample12" +end + +# Benchmark +puts '---------------------------' +puts 'Profile creating' +puts '---------------------------' +Benchmark.bm do |x| + # Creates 1 profile + x.report(:p_1) { + Profile.create!(user_id: user.id, first_name: 'first_name', last_name: 'last_name', + address: 'address', dob: Time.now.to_date, state: 'verified') + } + # Creates 1000 profiles + x.report(:p_1000) { + 1_000.times do + Profile.create!(user_id: user.id, first_name: 'first_name', last_name: 'last_name', + address: 'address', dob: Time.now.to_date, state: 'verified') + end + } +end + +puts '---------------------------' +puts 'Descrypts data from profile' +puts '---------------------------' +Benchmark.bm do |x| + # Descrypts 1 profile + x.report(:p_1) { + Profile.last.first_name + Profile.last.last_name + Profile.last.address + Profile.last.dob + } + # Descrypts 1000 profiles + x.report(:p_1000) { + Profile.where(user_id: user.id).limit(1000).each do |profile| + profile.first_name + profile.last_name + profile.address + profile.dob + end + } +end + +## After benchmark +Profile.where(user_id: user.id).delete_all +user.destroy diff --git a/scripts/verify-security-pins.sh b/scripts/verify-security-pins.sh new file mode 100644 index 0000000..74f92d6 --- /dev/null +++ b/scripts/verify-security-pins.sh @@ -0,0 +1,74 @@ +#!/usr/bin/env bash +# Verify phase-1/2 minimum security gem/package versions in lockfiles. +set -euo pipefail + +semver_ge() { + printf '%s\n%s\n' "$2" "$1" | sort -V | head -1 | grep -qx "$2" +} + +check_gemfile_lock() { + local file=$1 name min + echo "Checking ${file}..." + while read -r name min; do + [[ -z "$name" ]] && continue + local ver + ver=$(grep -E "^ ${name} \(" "$file" | head -1 | sed -E 's/.*\(([0-9][0-9.a-z-]*).*/\1/' || true) + if [[ -z "$ver" ]]; then + echo "FAIL: ${name} not found in ${file}" + exit 1 + fi + if ! semver_ge "$ver" "$min"; then + echo "FAIL: ${name} ${ver} < required ${min} in ${file}" + exit 1 + fi + echo " OK ${name} ${ver} (>= ${min})" + done <<'GEMS' +rack 2.2.13 +nokogiri 1.15.5 +rexml 3.3.9 +tzinfo 1.2.10 +rails-html-sanitizer 1.4.4 +GEMS + if grep -qE '^ sidekiq \(' "$file"; then + local sidekiq_ver + sidekiq_ver=$(grep -E '^ sidekiq \(' "$file" | head -1 | sed -E 's/.*\(([0-9][0-9.a-z-]*).*/\1/') + if ! semver_ge "$sidekiq_ver" "6.4.0"; then + echo "FAIL: sidekiq ${sidekiq_ver} < required 6.4.0 in ${file}" + exit 1 + fi + echo " OK sidekiq ${sidekiq_ver} (>= 6.4.0)" + fi +} + +check_yarn_lock() { + local file=$1 + echo "Checking ${file}..." + local axios ws + axios=$(grep -A1 '^axios@\^0\.32' "$file" | grep 'version "' | head -1 | sed -E 's/.*version "([^"]+)".*/\1/') + ws=$(grep -A1 '^ws@\^7\.5' "$file" | grep 'version "' | head -1 | sed -E 's/.*version "([^"]+)".*/\1/') + if [[ -z "$axios" ]] || ! semver_ge "$axios" "0.32.0"; then + echo "FAIL: axios ${axios:-missing} < 0.32.0" + exit 1 + fi + echo " OK axios ${axios} (>= 0.32.0)" + if [[ -z "$ws" ]] || ! semver_ge "$ws" "7.5.10"; then + echo "FAIL: ws ${ws:-missing} < 7.5.10" + exit 1 + fi + echo " OK ws ${ws} (>= 7.5.10)" +} + +case "${1:-}" in + ruby) + check_gemfile_lock "${2:-Gemfile.lock}" + ;; + yarn) + check_yarn_lock "${2:-yarn.lock}" + ;; + *) + echo "Usage: $0 ruby [Gemfile.lock] | yarn [yarn.lock]" + exit 1 + ;; +esac + +echo "Security pin verification passed." diff --git a/spec/api/base_spec.rb b/spec/api/base_spec.rb new file mode 100644 index 0000000..2d39538 --- /dev/null +++ b/spec/api/base_spec.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe API::Base do + describe 'API::Base' do + it 'should exist' do + expect(API::Base).to eq(API::Base) + end + end +end diff --git a/spec/api/v2/admin/abilities_spec.rb b/spec/api/v2/admin/abilities_spec.rb new file mode 100644 index 0000000..33b52f3 --- /dev/null +++ b/spec/api/v2/admin/abilities_spec.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true + +describe API::V2::Admin::Abilities, type: :request do + include_context 'bearer authentication' + + let!(:create_admin_permission) do + create :permission, + role: 'admin' + end + let!(:create_member_permission) do + create :permission, + role: 'member' + end + + describe 'GET /api/v2/admin/abilities' do + context 'superadmin user' do + let(:test_user) { create(:user, email: 'example@gmail.com', role: 'admin') } + it 'get all roles and permissions' do + get '/api/v2/admin/abilities', headers: auth_header + result = JSON.parse(response.body) + expect(response).to be_successful + expect(result).to eq( + 'read' => %w[Level APIKey Permission], + 'manage' => %w[User Activity Profile Label] + ) + end + end + + context 'member user' do + let(:test_user) { create(:user, email: 'example@gmail.com', role: 'member') } + it 'get all roles and permissions' do + get '/api/v2/admin/abilities', headers: auth_header + result = JSON.parse(response.body) + expect(response).to be_successful + expect(result).to eq({}) + end + end + end +end diff --git a/spec/api/v2/admin/activities_spec.rb b/spec/api/v2/admin/activities_spec.rb new file mode 100644 index 0000000..409d638 --- /dev/null +++ b/spec/api/v2/admin/activities_spec.rb @@ -0,0 +1,145 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe API::V2::Admin::Activities do + include_context 'bearer authentication' + + describe 'GET /api/v2/admin/activities' do + let!(:create_admin_permission) do + create :permission, + role: 'admin' + end + let!(:create_member_permission) do + create :permission, + role: 'member' + end + let(:do_request) { get '/api/v2/admin/activities', headers: auth_header } + + context 'admin user' do + let!(:test_user) { create(:user, email: 'testa@gmail.com', role: 'admin') } + let!(:first_user) { create(:user, email: 'test1@gmail.com') } + let!(:second_user) { create(:user, email: 'test2@gmail.com') } + + context 'user activities' do + let!(:create_actitivites) do + create(:activity, category: 'user', topic: 'session', action: 'login', user: first_user) + create(:activity, category: 'user', topic: 'session', action: 'login', user: second_user) + create(:activity, category: 'user', topic: 'otp', action: 'otp::enable', user: second_user) + create(:activity, category: 'admin', topic: 'otp', action: 'otp::enable', user: second_user) + end + + it 'doesnt return admin activities' do + get '/api/v2/admin/activities', headers: auth_header + activities = JSON.parse(response.body) + expect(Activity.where(category: 'user').count).to eq activities.count + expect(Activity.all.count).not_to eq activities.count + end + + it 'returns list of activities' do + get '/api/v2/admin/activities', headers: auth_header + activities = JSON.parse(response.body) + user_activites = Activity.where(category: 'user') + expect(user_activites.count).to eq activities.count + expect(user_activites.last.user_ip).to eq activities[0]['user_ip'] + expect(user_activites.last.user_agent).to eq activities[0]['user_agent'] + expect(user_activites.last.topic).to eq activities[0]['topic'] + expect(user_activites.last.action).to eq activities[0]['action'] + expect(user_activites.last.result).to eq activities[0]['result'] + expect(user_activites.last.user.email).to eq activities[0]['user']['email'] + expect(first_user.email).to eq activities[2]['user']['email'] + end + + it 'returns list of activities filtered by action' do + get '/api/v2/admin/activities', headers: auth_header, params: {action: 'login'} + activities = JSON.parse(response.body) + expect(activities.count).to eq 2 + end + + it 'returns list of activities filtered by uid' do + get '/api/v2/admin/activities', headers: auth_header, params: {uid: first_user.uid} + activities = JSON.parse(response.body) + expect(activities.count).to eq 1 + end + + it 'returns list of activities filtered by email' do + get '/api/v2/admin/activities', headers: auth_header, params: {email: first_user.email} + activities = JSON.parse(response.body) + expect(activities.count).to eq 1 + end + + it 'returns list of activities filtered by topic' do + get '/api/v2/admin/activities', headers: auth_header, params: {topic: 'otp'} + activities = JSON.parse(response.body) + expect(activities.count).to eq 1 + end + + it 'returns list of activities filtered by action and uid' do + get '/api/v2/admin/activities', headers: auth_header, params: {topic: 'session', action: 'login', uid: second_user.uid} + activities = JSON.parse(response.body) + expect(activities.count).to eq 1 + end + end + + context 'admin activities' do + let!(:create_actitivites) do + create(:activity, topic: 'session', action: 'login', user: first_user, category: 'admin', target_uid: second_user.uid) + create(:activity, topic: 'session', action: 'login', user: second_user, category: 'admin') + create(:activity, topic: 'otp', action: 'otp::enable', user: second_user, category: 'admin', target_uid: second_user.uid) + end + + it 'returns list of activities' do + get '/api/v2/admin/activities/admin', headers: auth_header + activities = JSON.parse(response.body) + + expect(Activity.count).to eq activities.count + expect(Activity.third.user_ip).to eq activities[0]['user_ip'] + expect(Activity.third.user_agent).to eq activities[0]['user_agent'] + expect(Activity.third.topic).to eq activities[0]['topic'] + expect(Activity.third.action).to eq activities[0]['action'] + expect(Activity.third.result).to eq activities[0]['result'] + expect(Activity.third.user.email).to eq activities[0]['admin']['email'] + expect(Activity.third.target.email).to eq activities[0]['target']['email'] + expect(Activity.first.user.email).to eq activities[2]['admin']['email'] + expect(Activity.first.target.email).to eq activities[2]['target']['email'] + end + + it 'returns list of activities filtered by action' do + get '/api/v2/admin/activities/admin', headers: auth_header, params: { action: 'login' } + activities = JSON.parse(response.body) + expect(activities.count).to eq 2 + end + + it 'returns list of activities filtered by uid' do + get '/api/v2/admin/activities/admin', headers: auth_header, params: { uid: first_user.uid } + activities = JSON.parse(response.body) + expect(activities.count).to eq 1 + end + + it 'returns list of activities filtered by email' do + get '/api/v2/admin/activities/admin', headers: auth_header, params: { email: first_user.email } + activities = JSON.parse(response.body) + expect(activities.count).to eq 1 + end + + it 'returns list of activities filtered by topic' do + get '/api/v2/admin/activities/admin', headers: auth_header, params: { topic: 'otp' } + activities = JSON.parse(response.body) + expect(activities.count).to eq 1 + end + + it 'returns list of activities filtered by action and uid' do + get '/api/v2/admin/activities/admin', headers: auth_header, params: { topic: 'session', action: 'login', uid: second_user.uid } + activities = JSON.parse(response.body) + expect(activities.count).to eq 1 + end + + it 'returns list of activities filtered by affected user' do + get '/api/v2/admin/activities/admin', headers: auth_header, params: { target_uid: second_user.uid } + activities = JSON.parse(response.body) + expect(activities.count).to eq 2 + end + end + end + end +end diff --git a/spec/api/v2/admin/api_keys_spec.rb b/spec/api/v2/admin/api_keys_spec.rb new file mode 100644 index 0000000..fb8d703 --- /dev/null +++ b/spec/api/v2/admin/api_keys_spec.rb @@ -0,0 +1,105 @@ +# frozen_string_literal: true + +describe 'Api::V2::Admin::APIKeys' do + include_context 'bearer authentication' + + let!(:create_member_permission) do + create :permission, + role: 'member' + end + let!(:create_superadmin_permission) do + create :permission, + role: 'superadmin' + end + + describe 'GET /api/v2/admin/api_keys' do + let!(:test_user) { create(:user, otp: otp_enabled, role: 'superadmin') } + let(:otp_enabled) { true } + let!(:first_api_key) { create :api_key, key_holder_account: test_user } + let!(:second_api_key) { create :api_key, key_holder_account: test_user } + let(:expected_fields) do + { + kid: first_api_key.kid, + state: first_api_key.state, + scope: %w[trade] + } + end + let(:params) do + { + uid: test_user.uid + } + end + let(:do_request) { get "/api/v2/admin/api_keys", params: params, headers: auth_header } + + context 'successful' do + it 'Returns api keys for selected account' do + do_request + + expect(response.status).to eq(200) + expect(json_body.first.keys).to match_array %i[kid algorithm scope state created_at updated_at] + expect(json_body.first).to include(expected_fields) + expect(json_body.first).not_to include(:secret) + end + + it 'Returns api keys for selected account in ASC order' do + params[:ordering] = 'asc' + params[:order_by] = 'id' + do_request + + expect(response.status).to eq(200) + expect(json_body.first.keys).to match_array %i[kid algorithm scope state created_at updated_at] + expect(json_body.first).to include(expected_fields) + expect(json_body.first).not_to include(:secret) + end + + it 'Returns api keys for selected account in DESC order' do + params[:ordering] = 'desc' + params[:order_by] = 'id' + do_request + + expect(response.status).to eq(200) + expect(json_body.first.keys).to match_array %i[kid algorithm scope state created_at updated_at] + expect(json_body.second).to include(expected_fields) + expect(json_body.second).not_to include(:secret) + end + + it 'Returns empty array if no api keys exist for selected account' do + test_user.api_keys.delete_all + + do_request + expect(response.status).to eq(200) + expect(json_body).to eq([]) + end + end + + context 'error' do + let(:params) do + { + uid: 'random' + } + end + + it 'Returns error if user doesnt exist' do + do_request + expect(response.status).to eq(404) + expect(json_body.first).to include(:errors, ["admin.user.doesnt_exist"]) + end + + it 'Returns error if api key attribute doesnt exist' do + params[:uid] = test_user.uid + params[:order_by] = 'length' + do_request + expect(response.status).to eq(422) + expect(json_body.first).to include(:errors, ["api_keys.ordering.invalid_attribute"]) + end + + it 'Returns error if invalid ordering' do + params[:uid] = test_user.uid + params[:ordering] = 'res' + do_request + expect(response.status).to eq(422) + expect(json_body.first).to include(:errors, ["api_keys.ordering.invalid_ordering"]) + end + end + end +end diff --git a/spec/api/v2/admin/levels_spec.rb b/spec/api/v2/admin/levels_spec.rb new file mode 100644 index 0000000..c39ed97 --- /dev/null +++ b/spec/api/v2/admin/levels_spec.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe API::V2::Admin::Levels do + include_context 'bearer authentication' + let!(:create_admin_permission) do + create :permission, + role: 'admin' + end + let!(:create_member_permission) do + create :permission, + role: 'member' + end + describe 'GET /api/v2/admin/levels' do + let(:do_request) { get '/api/v2/admin/levels', headers: auth_header } + + context 'admin user' do + let(:test_user) { create(:user, role: 'admin') } + + it 'returns levels' do + do_request + + expect(response.status).to eq(200) + + result = JSON.parse(response.body) + + expect(result.length).to eq(Level.count) + + result.each do |level| + expected_level = Level.find(level['id']) + + expect(level['key']).to eq(expected_level.key) + expect(level['value']).to eq(expected_level.value) + end + end + end + end +end diff --git a/spec/api/v2/admin/metrics_spec.rb b/spec/api/v2/admin/metrics_spec.rb new file mode 100644 index 0000000..f084789 --- /dev/null +++ b/spec/api/v2/admin/metrics_spec.rb @@ -0,0 +1,49 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe API::V2::Admin::Metrics do + include_context 'bearer authentication' + let!(:create_admin_permission) do + create :permission, + role: 'admin' + end + let!(:create_member_permission) do + create :permission, + role: 'member' + end + describe 'GET /api/v2/admin/users' do + let(:do_request) { get '/api/v2/admin/metrics', headers: auth_header } + + context 'admin user' do + let(:test_user) { create(:user, role: 'admin') } + + it 'returns empty hashes if no activity in database' do + do_request + + expect(response.status).to eq(200) + expect(response.body).to eq("{\"signups\":{},\"sucessful_logins\":{},\"failed_logins\":{},\"pending_applications\":0}") + + result = JSON.parse(response.body) + expect(result['signups']).to eq({}) + expect(result['sucessful_logins']).to eq({}) + expect(result['failed_logins']).to eq({}) + end + + context 'with data' do + let!(:login_activity) { create(:activity, action: 'login', result: 'succeed', topic: 'session', user: test_user) } + let!(:signup_activity) { create(:activity, action: 'signup', result: 'succeed', topic: 'account', user: test_user) } + let!(:failed_login_activity) { create(:activity, topic: 'session', action: 'login', result: 'failed', user: test_user) } + + it 'returns data as expected' do + do_request + + expect(response.status).to eq(200) + expect(JSON.parse(response.body)['failed_logins']).not_to eq({}) + expect(JSON.parse(response.body)['sucessful_logins']).not_to eq({}) + expect(JSON.parse(response.body)['signups']).not_to eq({}) + end + end + end + end +end diff --git a/spec/api/v2/admin/permissions_spec.rb b/spec/api/v2/admin/permissions_spec.rb new file mode 100644 index 0000000..6dc222e --- /dev/null +++ b/spec/api/v2/admin/permissions_spec.rb @@ -0,0 +1,144 @@ +# frozen_string_literal: true + +require 'spec_helper' +describe API::V2::Admin::Permissions do + include_context 'bearer authentication' + + let!(:create_admin_permission) { create(:permission, role: 'superadmin', action: 'accept', verb: 'get') } + let!(:test_user) { create(:user, role: 'superadmin') } + let!(:create_member_permission) { create(:permission, role: 'member') } + + describe 'GET /api/v2/admin/permissions' do + context 'successful response' do + it 'returns all permissions' do + get '/api/v2/admin/permissions', headers: auth_header + + result = JSON.parse(response.body) + expect(response).to be_successful + expect(result.count).to eq(Permission.count) + end + + it 'returns paginated permissions' do + get '/api/v2/admin/permissions', params: { limit: 1, page: 1 }, headers: auth_header + result = JSON.parse(response.body) + + expect(response).to be_successful + expect(response.headers.fetch('Total')).to eq '2' + expect(result.size).to eq 1 + expect(result.first['role']).to eq 'superadmin' + + get '/api/v2/admin/permissions', params: { limit: 1, page: 2 }, headers: auth_header + result = JSON.parse(response.body) + + expect(response).to be_successful + expect(response.headers.fetch('Total')).to eq '2' + expect(result.size).to eq 1 + expect(result.first['role']).to eq 'member' + end + end + end + + describe 'POST /api/v2/admin/permissions' do + context 'unsuccessful response' do + it 'returns error while invalid verb creating' do + post '/api/v2/admin/permissions', params: { role: 'admin', action: 'drop', verb: 'options', path: 'api/v2' }, headers: auth_header + result = JSON.parse(response.body) + + expect(response.code).to eq '422' + expect(result['errors']).to eq(['admin.permissions.invalid_verb']) + end + + it 'returns error while invalid action creating' do + post '/api/v2/admin/permissions', params: { role: 'admin', action: 'delete', verb: 'put', path: 'api/v2' }, headers: auth_header + result = JSON.parse(response.body) + + expect(response.code).to eq '422' + expect(result['errors']).to eq(['admin.permissions.invalid_action']) + end + + it 'returns error while invalid role creating' do + post '/api/v2/admin/permissions', params: { role: 'supertrader', action: 'accept', verb: 'put', path: 'api/v2' }, headers: auth_header + result = JSON.parse(response.body) + + expect(response.code).to eq '422' + expect(result['errors']).to eq(['admin.permission.role_doesnt_exist']) + end + + it 'returns error while empty action creating' do + post '/api/v2/admin/permissions', params: { role: 'supertrader', action: '', verb: 'put', path: 'api/v2' }, headers: auth_header + result = JSON.parse(response.body) + + expect(response.code).to eq '422' + expect(result['errors']).to eq(['admin.permission.empty_action']) + end + end + + context 'successful response' do + let(:do_request) { post '/api/v2/admin/permissions', params: { role: 'superadmin', action: 'accept', verb: 'put', path: 'api/v2/admin' }, headers: auth_header } + it 'creates new permission' do + expect { do_request }.to change { Permission.count }.by(1) + expect(response).to be_successful + end + end + end + + describe 'DELETE /api/v2/admin/permissions' do + context 'successful response' do + let(:do_request) { delete '/api/v2/admin/permissions', params: { id: create_member_permission.id }, headers: auth_header } + + it 'delete permission' do + expect { do_request }.to change { Permission.count }.by(-1) + expect(response).to be_successful + end + end + + context 'unsuccessful response' do + it 'return error while permission doesnt exist' do + delete '/api/v2/admin/permissions', params: { id: 0 }, headers: auth_header + result = JSON.parse(response.body) + expect(response.code).to eq '404' + expect(result['errors']).to eq(['admin.permission.doesnt_exist']) + end + end + end + + describe 'PUT /api/v2/admin/permissions' do + context 'successful response' do + let(:permission) { Permission.find_by(id: create_admin_permission.id) } + + it 'returns updated path for permission' do + put '/api/v2/admin/permissions', params: { id: create_admin_permission.id , path: 'api/v2/admin' }, headers: auth_header + + expect(response).to be_successful + expect(permission.path).to eq 'api/v2/admin' + end + + it 'returns updated verb for permission' do + put '/api/v2/admin/permissions', params: { id: create_admin_permission.id , verb: 'PUT' }, headers: auth_header + + expect(response).to be_successful + expect(permission.verb).to eq 'PUT' + end + + it 'returns updated fileds for permission' do + put '/api/v2/admin/permissions', params: { id: create_admin_permission.id , verb: 'POST', action: 'all', path: 'api/v2' }, headers: auth_header + + expect(response).to be_successful + expect(permission.verb).to eq 'POST' + expect(permission.action).to eq 'ALL' + expect(permission.path).to eq 'api/v2' + end + end + + context 'unsuccessful response' do + it 'return error while permission doesnt exist' do + put '/api/v2/admin/permissions', params: { id: 0, action: 'accept' }, headers: auth_header + + result = JSON.parse(response.body) + + expect(response.code).to eq '404' + expect(result['errors']).to eq(['admin.permission.doesnt_exist']) + end + end + end +end diff --git a/spec/api/v2/admin/profiles_spec.rb b/spec/api/v2/admin/profiles_spec.rb new file mode 100644 index 0000000..b146799 --- /dev/null +++ b/spec/api/v2/admin/profiles_spec.rb @@ -0,0 +1,211 @@ +# frozen_string_literal: true + +require 'spec_helper' +describe API::V2::Admin::Profiles do + include_context 'bearer authentication' + + let!(:create_admin_permission) do + create :permission, + role: 'admin' + create :permission, + role: 'superadmin' + end + + let!(:create_member_permission) do + create :permission, + role: 'member' + end + let!(:test_user) { create(:user, role: 'superadmin') } + let!(:profile1) { create(:profile) } + let!(:profile2) { create(:profile) } + let!(:profile3) { create(:profile) } + let!(:profile4) { create(:profile) } + let!(:profile5) { create(:profile) } + + describe 'GET /api/v2/admin/profiles' do + context 'successful response' do + it 'returns all profiles' do + get '/api/v2/admin/profiles', headers: auth_header + + result = JSON.parse(response.body) + expect(response).to be_successful + + expect(result.count).to eq(Profile.count) + expect(result.first.keys).to match_array %w[first_name last_name dob address postcode city country state metadata created_at updated_at] + end + + it 'returns paginated profiles' do + get '/api/v2/admin/profiles', params: { limit: 1, page: 1 }, headers: auth_header + result = JSON.parse(response.body) + + expect(response).to be_successful + expect(response.headers.fetch('Total')).to eq '5' + expect(result.size).to eq 1 + expect(result.first['first_name']).to eq profile1.first_name + expect(result.first['last_name']).to eq profile1.last_name + expect(result.first['dob']).to eq profile1.dob.to_s + + get '/api/v2/admin/profiles', params: { limit: 1, page: 2 }, headers: auth_header + result = JSON.parse(response.body) + + expect(response).to be_successful + expect(response.headers.fetch('Total')).to eq '5' + expect(result.size).to eq 1 + expect(result.first['first_name']).to eq profile2.first_name + expect(result.first['last_name']).to eq profile2.last_name + expect(result.first['dob']).to eq profile2.dob.to_s + + end + end + end + + describe 'POST /api/v2/admin/profiles' do + let(:user) { create :user } + let!(:request_params) do + { + last_name: Faker::Name.last_name, + first_name: Faker::Name.first_name, + dob: Faker::Date.birthday, + country: Faker::Address.country_code_long, + city: Faker::Address.city, + address: Faker::Address.street_address, + postcode: Faker::Address.zip_code + } + end + + context 'successful response' do + it 'works correctly' do + expect { post '/api/v2/admin/profiles', params: request_params.merge(uid: user.uid), headers: auth_header } + .to change { Profile.count }.by(1) + + expect(response.status).to eq(201) + expect(json_body.keys).to match_array %i[first_name last_name dob address postcode city country state metadata created_at updated_at] + expect(json_body[:first_name]).to eq Profile.last.first_name + expect(json_body[:last_name]).to eq Profile.last.last_name + expect(json_body[:dob]).to eq Profile.last.dob.to_s + expect(json_body[:state]).to eq('submitted') + expect(json_body[:metadata]).to be_blank + expect(Profile.last.author).to eq(test_user.uid) + end + end + end + + describe 'PUT /api/v2/admin/profiles' do + context 'successful response' do + let!(:member_with_profile) do + @member = create :user, role: 'member' + create(:profile, user_id: @member.id, state: 'submitted') + end + + it 'returns profile' do + put '/api/v2/admin/profiles', params: { uid: @member.uid, state: 'verified' }, headers: auth_header + + expect(response.status).to eq(200) + profile = @member.profiles.last + expect(profile).to be + expect(json_body.keys).to match_array %i[first_name last_name dob address postcode city country state metadata created_at updated_at] + expect(json_body[:first_name]).to eq profile.first_name + expect(json_body[:last_name]).to eq profile.last_name + expect(json_body[:dob]).to eq profile.dob.to_s + expect(json_body[:state]).to eq('verified') + expect(profile.state).to eq('verified') + end + + let!(:superadmin_with_profile) do + @user = create :user, role: 'superadmin' + create(:profile, user_id: @user.id, state: 'submitted') + end + + it 'return profiles when superadmin updates superadmin' do + test_user.update!(role: 'superadmin') + put '/api/v2/admin/profiles', params: { uid: @user.uid, state: 'verified' }, headers: auth_header + + expect(response.status).to eq(200) + profile = @user.profiles.last + expect(profile).to be + expect(json_body.keys).to match_array %i[first_name last_name dob address postcode city country state metadata created_at updated_at] + expect(json_body[:first_name]).to eq profile.first_name + expect(json_body[:last_name]).to eq profile.last_name + expect(json_body[:dob]).to eq profile.dob.to_s + expect(json_body[:state]).to eq('verified') + expect(profile.state).to eq('verified') + expect(profile.metadata).to be_blank + end + end + + context 'unsuccessful response' do + let!(:admin_test) { test_user.update(role: 'admin') } + + let!(:superadmin_with_profile) do + @user = create :user, role: 'superadmin' + create(:profile, user_id: @user.id, state: 'submitted', author: test_user.uid) + + @user_admin = create :user, role: 'admin' + create(:profile, user_id: @user_admin.id, state: 'submitted', author: test_user.uid) + end + + it 'return error when non-superadmin user updates superadmin' do + put '/api/v2/admin/profiles', params: { uid: @user.uid, state: 'rejected' }, headers: auth_header + + result = JSON.parse(response.body) + expect(response.code).to eq '422' + expect(result['errors']).to eq(['admin.profiles.superadmin_change']) + end + + it 'return error when author is trying to approve himself' do + allow(Barong::App.config).to receive_messages(profile_double_verification: 'true') + + put '/api/v2/admin/profiles', params: { uid: @user_admin.uid, state: 'rejected' }, headers: auth_header + + result = JSON.parse(response.body) + expect(response.code).to eq '422' + expect(result['errors']).to eq(['admin.profiles.second_admin_approval']) + end + + it 'renders an error when profile doesnt exist' do + put '/api/v2/admin/profiles', params: { uid: '0', state: 'rejected' }, headers: auth_header + expect_status.to eq(404) + expect_body.to eq(errors: ['admin.profiles.doesnt_exist_or_not_editable']) + end + + it 'renders an error when profile is not editable' do + put '/api/v2/admin/profiles', params: { uid: profile3.user.uid, state: 'rejected' }, headers: auth_header + expect_status.to eq(404) + expect_body.to eq(errors: ['admin.profiles.doesnt_exist_or_not_editable']) + end + end + + context 'user with different amount of profile fields' do + let!(:profile) { create(:profile, user: test_user, last_name: nil, first_name: nil, state: 'submitted') } + + it 'returns partial updated profile' do + put '/api/v2/admin/profiles', params: { uid: test_user.uid, state: 'rejected' }, headers: auth_header + + expect(response.status).to eq(200) + profile = test_user.profiles.last + expect(profile).to be + expect(json_body.keys).to match_array %i[first_name last_name dob address postcode city country state metadata created_at updated_at] + expect(json_body[:first_name]).to eq profile.first_name + expect(json_body[:last_name]).to eq profile.last_name + expect(json_body[:dob]).to eq profile.dob.to_s + expect(json_body[:state]).to eq('rejected') + expect(profile.state).to eq('rejected') + end + + it 'returns full updated profile' do + put '/api/v2/admin/profiles', params: { uid: test_user.uid, state: 'rejected' }, headers: auth_header + + expect(response.status).to eq(200) + profile = test_user.profiles.last + expect(profile).to be + expect(json_body.keys).to match_array %i[first_name last_name dob address postcode city country state metadata created_at updated_at] + expect(json_body[:first_name]).to eq profile.first_name + expect(json_body[:last_name]).to eq profile.last_name + expect(json_body[:dob]).to eq profile.dob.to_s + expect(json_body[:state]).to eq('rejected') + expect(profile.state).to eq('rejected') + expect(profile.metadata).to be_blank + end + end + end +end diff --git a/spec/api/v2/admin/restrictions_spec.rb b/spec/api/v2/admin/restrictions_spec.rb new file mode 100644 index 0000000..cc71341 --- /dev/null +++ b/spec/api/v2/admin/restrictions_spec.rb @@ -0,0 +1,202 @@ +# frozen_string_literal: true + +require 'spec_helper' +describe API::V2::Admin::Restrictions do + include_context 'bearer authentication' + + before { create(:permission, role: 'superadmin') } + let!(:test_user) { create(:user, role: 'superadmin') } + + describe 'GET /api/v2/admin/restrictions' do + before do + create(:restriction, scope: 'ip', value: '0.0.0.1', category: 'blacklist', updated_at: 1.days.ago) + create(:restriction, scope: 'ip', value: '0.0.0.0', category: 'blacklist', updated_at: 3.days.ago) + create(:restriction, scope: 'ip_subnet', value: '1.2.3.4/24', category: 'blacklist', updated_at: 3.days.ago) + end + + context 'successful response' do + it 'returns all restrictions' do + get '/api/v2/admin/restrictions', headers: auth_header + + expect(response).to be_successful + expect(json_body.count).to eq(Restriction.count) + end + + it 'filters by scope' do + get '/api/v2/admin/restrictions', headers: auth_header, params: { scope: 'ip' } + + expect(json_body.length).to eq Restriction.where(scope: 'ip').count + expect(json_body.map { |r| r[:scope] }).to all eq 'ip' + end + + it 'filters by category' do + get '/api/v2/admin/restrictions', headers: auth_header, params: { category: 'blacklist' } + + expect(json_body.length).to eq Restriction.where(category: 'blacklist').count + expect(json_body.map { |r| r[:category] }).to all eq 'blacklist' + end + + it 'filters with date range' do + get '/api/v2/admin/restrictions', headers: auth_header, params: { from: 2.days.ago.to_i, range: 'updated' } + + expected = Restriction.where("updated_at >= ?", 2.days.ago) + expect(json_body.map { |r| r[:id] }).to match_array expected.map(&:id) + end + + it 'returns paginated restrictions' do + get '/api/v2/admin/restrictions', headers: auth_header, params: { limit: 1 } + result = json_body + + expect(response).to be_successful + expect(response.headers.fetch('Total')).to eq '3' + expect(result.size).to eq 1 + end + end + end + + describe 'POST /api/v2/admin/whitelink' do + context 'with default expire time' do + it 'create a whitelink token' do + post '/api/v2/admin/restrictions/whitelink', headers: auth_header + + expect(response).to be_successful + expect(json_body[:whitelink_token]).not_to be nil + end + end + + context 'with custom expire time' do + it 'create a whitelink token' do + post '/api/v2/admin/restrictions/whitelink', headers: auth_header, params: { expire_time: 30 } + + expect(response).to be_successful + expect(json_body[:whitelink_token]).not_to be nil + end + + it 'returns error if expire time too big' do + post '/api/v2/admin/restrictions/whitelink', headers: auth_header, params: { expire_time: 31 } + + expect(response.status).to eq 422 + expect(json_body[:whitelink_token]).to be nil + expect(json_body[:errors]).to include "invalid_expire" + end + end + end + + describe 'POST /api/v2/admin/restrictions' do + it 'creates new restriction' do + expect { + post '/api/v2/admin/restrictions', headers: auth_header, params: { scope: 'ip', value: '127.0.0.0', category: 'blacklist' } + }.to change { Restriction.count }.by(1) + + expect(response).to be_successful + end + + it 'creates new restriction with code' do + expect { + post '/api/v2/admin/restrictions', headers: auth_header, params: { scope: 'ip', value: '127.0.0.0', category: 'blacklist', code: 522 } + }.to change { Restriction.count }.by(1) + + expect(response).to be_successful + end + + it 'creates new whitelist restriction' do + expect { + post '/api/v2/admin/restrictions', headers: auth_header, params: { scope: 'ip', value: '127.0.0.0', category: 'whitelist' } + }.to change { Restriction.count }.by(1) + + expect(response).to be_successful + end + + it 'creates new maintenance restriction' do + expect { + post '/api/v2/admin/restrictions', headers: auth_header, params: { scope: 'ip', value: '127.0.0.0', category: 'maintenance' } + }.to change { Restriction.count }.by(1) + + expect(response).to be_successful + end + + context 'validation' do + it 'scope and state' do + post '/api/v2/admin/restrictions', headers: auth_header, params: { scope: 'office', value: '127.0.0.0', state: 'running' } + + expect(json_body[:errors]).to include "admin.restriction.invalid_scope" + expect(json_body[:errors]).to include "admin.restriction.invalid_state" + end + + it 'value' do + post '/api/v2/admin/restrictions', headers: auth_header, params: { scope: 'ip', value: '127.a.b.c', category: 'blacklist' } + + expect(json_body[:errors]).to include "value.invalid" + end + + it 'category' do + post '/api/v2/admin/restrictions', headers: auth_header, params: { scope: 'country', value: 'Ukraine', category: 'allow' } + + expect(json_body[:errors]).to include "admin.restriction.invalid_category" + end + end + end + + describe 'PUT /api/v2/admin/restrictions' do + let!(:restriction) { create(:restriction, scope: 'ip', value: '127.0.0.1', category: 'blacklist') } + + it 'updates state' do + expect { + put '/api/v2/admin/restrictions', headers: auth_header, params: { id: restriction.id, state: 'disabled' } + }.to change { restriction.reload.state }.to('disabled') + end + + it 'updates value' do + expect { + put '/api/v2/admin/restrictions', headers: auth_header, params: { id: restriction.id, value: '192.168.0.1' } + }.to change { restriction.reload.value }.to('192.168.0.1') + end + + it 'does not change scope if value becomes invalid' do + expect { + put '/api/v2/admin/restrictions', headers: auth_header, params: { id: restriction.id, scope: 'ip_subnet' } + }.not_to change { restriction.reload.scope } + end + + it 'validates value' do + put '/api/v2/admin/restrictions', headers: auth_header, params: { id: restriction.id, value: '192.168.0.abc' } + + expect(response).not_to be_successful + end + + it 'updates scope' do + expect { + put '/api/v2/admin/restrictions', headers: auth_header, params: { id: restriction.id, scope: 'ip_subnet', value: '192.168.0.1/24' } + }.to change { restriction.reload.scope }.to('ip_subnet').and change { restriction.reload.value }.to '192.168.0.1/24' + end + + it 'updates category' do + expect { + put '/api/v2/admin/restrictions', headers: auth_header, params: { id: restriction.id, category: 'whitelist' } + }.to change { restriction.reload.category }.to('whitelist') + end + end + + describe 'DELETE /api/v2/admin/restrictions' do + let!(:restriction) { create(:restriction, scope: 'ip', value: '127.0.0.1', category: 'blacklist') } + + context 'successful response' do + let(:do_request) { delete '/api/v2/admin/restrictions', params: { id: restriction.id }, headers: auth_header } + + it 'delete restriction' do + expect { do_request }.to change { Restriction.count }.by(-1) + expect(response).to be_successful + end + end + + context 'unsuccessful response' do + it 'return error while restriction doesnt exist' do + delete '/api/v2/admin/restrictions', headers: auth_header, params: { id: 0 } + + result = JSON.parse(response.body) + expect(response.code).to eq '404' + expect(result['errors']).to eq(['admin.restriction.doesnt_exist']) + end + end + end +end diff --git a/spec/api/v2/admin/users_spec.rb b/spec/api/v2/admin/users_spec.rb new file mode 100644 index 0000000..83c667a --- /dev/null +++ b/spec/api/v2/admin/users_spec.rb @@ -0,0 +1,1176 @@ +# frozen_string_literal: true + +require 'spec_helper' +describe API::V2::Admin::Users do + include_context 'bearer authentication' + let!(:create_admin_permission) do + create :permission, + role: 'admin' + create :permission, + role: 'superadmin' + end + let!(:create_member_permission) do + create :permission, + role: 'member' + end + + let(:experimental_user) { create(:user, :with_document_phone_profile, state: "pending") } + + describe 'GET /api/v2/admin/users' do + let(:do_request) { get '/api/v2/admin/users', headers: auth_header } + + context 'admin user' do + let!(:test_user) { create(:user, email: 'testa@gmail.com', role: 'admin') } + let!(:second_user) { create(:user, email: 'testb@gmail.com', level: 2, state: 'active') } + let!(:third_user) { create(:user, email: 'testd@gmail.com', level: 2, state: 'pending') } + let!(:fourth_user) { create(:user, email: 'testc@gmail.com', level: 1, state: 'active') } + + let(:params) { {} } + let(:do_search_request) { get '/api/v2/admin/users', headers: auth_header, params: params } + + def validate_fields(user) + user.attributes.slice('email', 'role', 'level', 'otp', 'state', 'uid', 'data').symbolize_keys + end + + it 'returns list of users' do + do_request + + expect(json_body.first.keys).to match_array %i[email uid role level otp state referral_uid data] + expect(User.count).to eq json_body.count + expect(validate_fields(User.first)).to eq json_body.first.except(:referral_uid) + expect(validate_fields(User.second)).to eq json_body.second.except(:referral_uid) + expect(validate_fields(User.third)).to eq json_body.third.except(:referral_uid) + expect(validate_fields(User.fourth)).to eq json_body.fourth.except(:referral_uid) + + expect(json_body.first.keys).to_not include(:profiles) + + expect(response.headers.fetch('Total')).to eq User.all.count.to_s + expect(response.headers.fetch('Page')).to eq '1' + expect(response.headers.fetch('Per-Page')).to eq '100' + end + + it 'returns list of users in ASC order' do + params[:ordering] = 'asc' + params[:order_by] = 'id' + do_search_request + + expect(json_body.first.keys).to match_array %i[email uid role level otp state referral_uid data] + expect(User.count).to eq json_body.count + expect(validate_fields(User.first)).to eq json_body.first.except(:referral_uid) + expect(validate_fields(User.second)).to eq json_body.second.except(:referral_uid) + expect(validate_fields(User.third)).to eq json_body.third.except(:referral_uid) + expect(validate_fields(User.fourth)).to eq json_body.fourth.except(:referral_uid) + end + + it 'returns list of users in DESC order' do + params[:ordering] = 'desc' + params[:order_by] = 'id' + do_search_request + + expect(json_body.first.keys).to match_array %i[email uid role level otp state referral_uid data] + expect(User.count).to eq json_body.count + expect(validate_fields(User.first)).to eq json_body.fifth.except(:referral_uid) + expect(validate_fields(User.second)).to eq json_body.fourth.except(:referral_uid) + expect(validate_fields(User.third)).to eq json_body.third.except(:referral_uid) + expect(validate_fields(User.fourth)).to eq json_body.second.except(:referral_uid) + end + + it 'returns error if invalid ordering' do + params[:ordering] = 'resc' + params[:order_by] = 'id' + do_search_request + + expect(response.status).to eq 422 + expect(response.body).to eq "{\"errors\":[\"user.ordering.invalid_ordering\"]}" + end + + it 'returns error when user attribute doesnt exist' do + params[:ordering] = 'asc' + params[:order_by] = 'algorithm' + do_search_request + + expect(response.status).to eq 422 + expect(response.body).to eq "{\"errors\":[\"user.ordering.invalid_attribute\"]}" + end + + it 'returns filtered list of users when only one filter param given created_at and from' do + params[:range] = 'created' + test_user.update(created_at: 1.day.ago) + params[:from] = fourth_user.created_at.to_i + do_search_request + + expect(response.status).to eq 200 + expect(json_body.first.keys).to match_array %i[email uid role level otp state referral_uid data] + expect(json_body).not_to include(test_user) + end + + it 'returns filtered list of users when only one filter param given (user attribute) level' do + params[:level] = 2 + do_search_request + expect(response.status).to eq 200 + expect(json_body.first.keys).to match_array %i[email uid role level otp state referral_uid data] + expect(json_body.count).to eq User.where(level: 2).count + end + + it 'returns filtered list of users when only one filter param given (user attribute) state' do + params[:state] = 'active' + do_search_request + expect(response.status).to eq 200 + expect(json_body.first.keys).to match_array %i[email uid role level otp state referral_uid data] + expect(json_body.count).to eq User.where(state: 'active').count + end + + it 'returns filtered list of users when several params given (user attribute) : state and level' do + params[:level] = 2 + params[:state] = 'active' + do_search_request + expect(response.status).to eq 200 + expect(json_body.first.keys).to match_array %i[email uid role level otp state referral_uid data] + expect(json_body.count).to eq User.where(level: 2, state: 'active').count + end + + let!(:user_with_profiles) do + user = create :user, email: 'peatio@barong.com' + create :profile, user_id: user.id, first_name: 'peatio', last_name: 'barong', country: 'us', state: 'rejected' + create :profile, user_id: user.id, first_name: 'peatio', last_name: 'barong', country: 'us', state: 'rejected' + end + + it 'returns only uniq set of users' do + user_with_profiles + + do_search_request + expect(response.status).to eq 200 + expect(json_body.first.keys).to match_array %i[email uid role level otp state referral_uid data] + expect(json_body.count).to eq User.count + end + + it 'returns filtered list of users when only one filter param given (profile attribute) first_name' do + params[:first_name] = 'peatio' + do_search_request + expect(response.status).to eq 200 + expect(json_body.first.keys).to match_array %i[email uid role level otp state referral_uid data] + end + + it 'returns filtered list of users when several params given (profile attribute) : first_name and country' do + params[:first_name] = 'peatio' + params[:last_name] = 'barong' + params[:country] = 'barong' + do_search_request + expect(response.status).to eq 200 + end + + context 'extended params' do + let(:extended_params) { { extended: true } } + let(:do_extended_info_request) { get '/api/v2/admin/users', headers: auth_header, params: extended_params } + let!(:user) { create(:user, :with_profile) } + + it 'returns list of users with full info' do + do_extended_info_request + expect(User.count).to eq json_body.count + + expect(json_body.first.keys).to include(:profiles) + + expect(response.headers.fetch('Total')).to eq User.all.count.to_s + expect(response.headers.fetch('Page')).to eq '1' + expect(response.headers.fetch('Per-Page')).to eq '100' + expect(json_body.first.keys).to match_array %i[email uid role level otp state data profiles referral_uid created_at updated_at] + expect(json_body.last[:profiles][0][:first_name]).to eq user.profiles.first.first_name + expect(json_body.last[:profiles][0][:last_name]).to eq user.profiles.first.last_name + expect(json_body.last[:profiles][0][:address]).to eq user.profiles.first.address + expect(json_body.last[:profiles][0][:dob]).to eq user.profiles.first.dob.to_s + end + end + + it 'returns list of users (ASC ordered) in search' do + params[:email] = 'testa@gmail.com' + do_search_request + + expect(json_body.count).to eq 1 + expect(json_body.first.keys).to match_array %i[email uid role level otp state referral_uid data] + expect(json_body[0][:email]).to eq 'testa@gmail.com' + end + + it 'returns all users (ASC ordered) in search req if field is not in the list' do + params.clear + params[:field] = 'bazz' + do_search_request + + expect(json_body.count).to eq User.all.count + + expect_status.to eq(200) + expect(json_body.first.keys).to match_array %i[email uid role level otp state referral_uid data] + end + + context 'pagination test' do + it 'returns 1st page as default, limit 2 users per page' do + get '/api/v2/admin/users', headers: auth_header, params: { + limit: 2 + } + expect(validate_fields(User.first)).to eq json_body.first.except(:referral_uid) + expect(validate_fields(User.second)).to eq json_body.second.except(:referral_uid) + + expect(response.headers.fetch('Total')).to eq User.all.count.to_s + expect(response.headers.fetch('Page')).to eq '1' + expect(response.headers.fetch('Per-Page')).to eq '2' + expect(json_body.first.keys).to match_array %i[email uid role level otp state referral_uid data] + end + + it 'returns 2nd page, limit 2 users per page' do + get '/api/v2/admin/users', headers: auth_header, params: { + limit: 2, + page: 2 + } + expect(validate_fields(User.third)).to eq json_body.first.except(:referral_uid) + expect(validate_fields(User.fourth)).to eq json_body.second.except(:referral_uid) + expect(response.headers.fetch('Total')).to eq User.all.count.to_s + expect(response.headers.fetch('Page')).to eq '2' + expect(response.headers.fetch('Per-Page')).to eq '2' + expect(json_body.first.keys).to match_array %i[email uid role level otp state referral_uid data] + end + end + end + end + + describe 'PUT /api/v2/admin/users' do + let(:do_request) { put '/api/v2/admin/users', headers: auth_header } + + context 'admin user' do + let(:test_user) { create(:user, role: "admin") } + let(:user_with_api_keys) { create(:user, state: "active", otp: true) } + let!(:api_key1) { create(:api_key, key_holder_account: user_with_api_keys) } + let!(:api_key2) { create(:api_key, key_holder_account: user_with_api_keys) } + + it 'renders error if uid is misssing' do + put '/api/v2/admin/users', headers: auth_header, params: { + state: 'active' + } + expect(response.status).to eq 422 + expect(response.body).to eq "{\"errors\":[\"admin.user.missing_uid\",\"admin.user.empty_uid\"]}" + end + + let!(:superadmin) { create(:user, role: 'superadmin') } + + it 'renders error when non-superadmin user updates superadmin' do + put '/api/v2/admin/users', headers: auth_header, params: { + uid: superadmin.uid, + state: 'active' + } + + result = JSON.parse(response.body) + expect(response.code).to eq '422' + expect(result['errors']).to eq(['admin.user.superadmin_change']) + end + + it 'renders error if state is misssing' do + put '/api/v2/admin/users', headers: auth_header, params: { + uid: experimental_user.uid + } + expect(response.status).to eq 422 + expect(response.body).to eq "{\"errors\":[\"admin.user.one_of_state_otp_email\"]}" + end + + it 'renders error if otp is misssing' do + put '/api/v2/admin/users', headers: auth_header, params: { + uid: experimental_user.uid + } + expect(response.status).to eq 422 + expect(response.body).to eq "{\"errors\":[\"admin.user.one_of_state_otp_email\"]}" + end + + it 'renders error if role is misssing' do + put '/api/v2/admin/users', headers: auth_header, params: { + uid: experimental_user.uid + } + expect(response.status).to eq 422 + expect(response.body).to eq "{\"errors\":[\"admin.user.one_of_state_otp_email\"]}" + end + + it 'renders error if uid is incorrect' do + put '/api/v2/admin/users', headers: auth_header, params: { + uid: 'asdasdasd', + state: 'active' + } + expect(response.status).to eq 404 + expect(response.body).to eq "{\"errors\":[\"admin.user.doesnt_exist\"]}" + end + + it 'sets state to active' do + put '/api/v2/admin/users', headers: auth_header, params: { + uid: experimental_user.uid, + state: 'active' + } + expect(response.status).to eq 200 + expect(experimental_user.reload.state).to eq 'active' + end + + it 'sets otp to false' do + experimental_user.update(otp: 'true') + experimental_user.labels.create(key: :otp, value: :enabled, scope: :private) + put '/api/v2/admin/users', headers: auth_header, params: { + uid: experimental_user.uid, + otp: 'false' + } + expect(response.status).to eq 200 + expect(experimental_user.reload.otp).to eq false + expect(experimental_user.reload.labels.find_by(key: :otp, scope: :private)).to eq nil + end + + it 'sets role to admin' do + post '/api/v2/admin/users/role', headers: auth_header, params: { + uid: experimental_user.uid, + role: 'admin' + } + expect(response.status).to eq 200 + expect(experimental_user.reload.role).to eq 'admin' + end + + it 'renders error when state is the same' do + put '/api/v2/admin/users', headers: auth_header, params: { + uid: experimental_user.uid, + state: 'pending' + } + expect(response.status).to eq 422 + expect(response.body).to eq "{\"errors\":[\"admin.user.state_no_change\"]}" + end + + it 'doesnt disable api keys for enabling otp' do + put '/api/v2/admin/users', headers: auth_header, params: { + uid: user_with_api_keys.uid, + otp: true + } + expect(api_key1.reload.state).to eq 'active' + expect(api_key2.reload.state).to eq 'active' + end + + it 'doesnt disable api keys for activating user' do + put '/api/v2/admin/users', headers: auth_header, params: { + uid: user_with_api_keys.uid, + state: 'active' + } + expect(api_key1.reload.state).to eq 'active' + expect(api_key2.reload.state).to eq 'active' + end + + it 'disables api_keys when state changes' do + put '/api/v2/admin/users', headers: auth_header, params: { + uid: user_with_api_keys.uid, + state: 'banned' + } + expect(api_key1.reload.state).to eq 'inactive' + expect(api_key2.reload.state).to eq 'inactive' + end + + it 'disables api_keys when sets otp to false' do + put '/api/v2/admin/users', headers: auth_header, params: { + uid: user_with_api_keys.uid, + otp: false + } + expect(api_key1.reload.state).to eq 'inactive' + expect(api_key2.reload.state).to eq 'inactive' + end + end + + context 'superadmin user' do + let(:do_request) { put '/api/v2/admin/users', params: params, headers: auth_header } + let(:test_user) { create(:user, role: "superadmin") } + + let(:params) do + { + uid: experimental_user.uid, + email: new_email, + } + end + let(:new_email) { '' } + context "when email is blank" do + it 'renders an error' do + do_request + expect(response.status).to eq(422) + expect_body.to eq(errors: ["admin.user.empty_email"]) + end + end + context 'when email is invalid' do + let(:new_email) { 'bad_format' } + it 'renders an error' do + do_request + expect_status_to_eq 422 + expect_body.to eq(errors: ["email.invalid"]) + end + end + context 'when email is valid' do + let(:new_email) { 'valid.email@gmail.com' } + it 'change an email' do + do_request + expect_status_to_eq 200 + expect(experimental_user.reload.email).to eq 'valid.email@gmail.com' + end + end + context 'when non-superadmin user updates email' do + let(:test_user) { create(:user, role: "admin") } + let(:new_email) { 'valid.email@gmail.com' } + it 'renders an error' do + do_request + expect_status_to_eq 422 + expect_body.to eq(errors: ["superadmin.user.update_email"]) + end + end + end + end + + describe 'Get /api/v2/admin/users/:uid' do + let(:do_request) { get '/api/v2/admin/users/' + experimental_user.uid, headers: auth_header } + + context 'admin user' do + let(:test_user) { create(:user, :with_document_phone_profile, role: "admin") } + + it 'renders error if uid is invalid' do + get '/api/v2/admin/users/asdasdsad', headers: auth_header + expect(response.status).to eq 404 + expect(response.body).to eq "{\"errors\":[\"admin.user.doesnt_exist\"]}" + end + + it 'returns user info' do + do_request + + expect(response.status).to eq 200 + + expect(json_body.keys).to match_array %i[email uid role level otp state data profiles labels phones documents data_storages comments referral_uid created_at updated_at] + expect(json_body[:uid]).to eq experimental_user.uid + expect(json_body[:role]).to eq experimental_user.role + expect(json_body[:email]).to eq experimental_user.email + expect(json_body[:level]).to eq experimental_user.level + expect(json_body[:otp]).to eq experimental_user.otp + expect(json_body[:state]).to eq experimental_user.state + expect(json_body[:profiles][0][:first_name]).to eq experimental_user.profiles[0].first_name + expect(json_body[:profiles][0][:last_name]).to eq experimental_user.profiles[0].last_name + expect(json_body[:profiles][0][:address]).to eq experimental_user.profiles[0].address + expect(json_body[:profiles][0][:dob]).to eq experimental_user.profiles[0].dob.to_s + expect(json_body[:documents][0][:doc_number]).to eq experimental_user.documents[0].doc_number + expect(json_body[:phones][0][:number]).to eq experimental_user.phones[0].number + end + end + end + + describe 'GET /api/v2/admin/labels/list' do + let(:do_request) { get '/api/v2/admin/users/labels/list', headers: auth_header } + let!(:test_user) { create(:user, role: 'admin') } + + context 'it returns array of labels attributes' do + let(:create_labels) { 10.times do create(:label, scope: 'private') end } + + it 'acts as expected' do + create_labels + do_request + labels_from_db = Label.where(scope: 'private').group(:key, :value).size + expect(response.body).to eq(labels_from_db.to_json) + expect(response.status).to eq 200 + end + end + + context 'no labels in database' do + it 'returns empty array' do + do_request + + expect(response.body).to eq '{}' + expect(response.status).to eq 200 + end + end + end + + describe 'POST /api/v2/admin/labels' do + + let(:do_request) { post '/api/v2/admin/users/labels', headers: auth_header } + + context 'admin user' do + let(:test_user) { create(:user, role: 'admin') } + + it 'renders error when uid is missing' do + post '/api/v2/admin/users/labels', headers: auth_header, params: { + key: 'email', + value: 'vedified' + } + expect(response.status).to eq 422 + expect(response.body).to eq "{\"errors\":[\"admin.user.missing_uid\",\"admin.user.empty_uid\"]}" + end + + let!(:superadmin) { create(:user, role: 'superadmin') } + + it 'renders error when non-superadmin user updates superadmin' do + post '/api/v2/admin/users/labels', headers: auth_header, params: { + uid: superadmin.uid, + key: 'email', + value: 'vedified' + } + + result = JSON.parse(response.body) + expect(response.code).to eq '422' + expect(result['errors']).to eq(['admin.user.superadmin_change']) + end + + it 'renders error when key is missing' do + post '/api/v2/admin/users/labels', headers: auth_header, params: { + uid: experimental_user.uid, + value: 'vedified' + } + expect(response.status).to eq 422 + expect(response.body).to eq "{\"errors\":[\"admin.user.missing_key\",\"admin.user.empty_key\"]}" + end + + it 'renders error when description is empty' do + post '/api/v2/admin/users/labels', headers: auth_header, params: { + uid: experimental_user.uid, + key: 'email', + value: 'vedified', + description: '' + } + expect(response.status).to eq 422 + expect(response.body).to eq "{\"errors\":[\"admin.user.empty_description\"]}" + end + + it 'renders error when value is missing' do + post '/api/v2/admin/users/labels', headers: auth_header, params: { + uid: experimental_user.uid, + key: 'email' + } + expect(response.status).to eq 422 + expect(response.body).to eq "{\"errors\":[\"admin.user.missing_value\",\"admin.user.empty_value\"]}" + end + + it 'renders error when uid is invalid' do + post '/api/v2/admin/users/labels', headers: auth_header, params: { + uid: 'asdasds', + key: 'email', + value: 'verified' + } + expect(response.status).to eq 404 + expect(response.body).to eq "{\"errors\":[\"admin.user.doesnt_exist\"]}" + end + + it 'adds label with default public scope and description' do + post '/api/v2/admin/users/labels', headers: auth_header, params: { + uid: experimental_user.uid, + key: 'email', + value: 'verified', + description: 'public label test' + } + updated_user = experimental_user.reload + added_label = updated_user.labels.last + expect(response.status).to eq 200 + expect(added_label.key).to eq 'email' + expect(added_label.value).to eq 'verified' + expect(added_label.scope).to eq 'public' + expect(added_label.description).to eq 'public label test' + end + + it 'adds label with private scope' do + post '/api/v2/admin/users/labels', headers: auth_header, params: { + uid: experimental_user.uid, + key: 'email', + value: 'verified', + scope: 'private' + } + updated_user = experimental_user.reload + added_label = updated_user.labels.last + expect(response.status).to eq 200 + expect(added_label.key).to eq 'email' + expect(added_label.value).to eq 'verified' + expect(added_label.scope).to eq 'private' + end + end + end + + describe 'DELETE /api/v2/admin/labels' do + let(:do_request) { delete '/api/v2/admin/users/labels', headers: auth_header } + + context 'admin user' do + let(:test_user) { create(:user, role: 'admin') } + let(:add_label) { + post '/api/v2/admin/users/labels', headers: auth_header, params: { + uid: experimental_user.uid, + key: 'email', + value: 'verified', + description: 'experimental QA signup' + } + } + + it 'renders error when uid is missing' do + delete '/api/v2/admin/users/labels', headers: auth_header, params: { + key: 'email', + scope: 'public' + } + expect(response.status).to eq 422 + expect(response.body).to eq "{\"errors\":[\"admin.user.missing_uid\",\"admin.user.empty_uid\"]}" + end + + it 'renders error when key is missing' do + delete '/api/v2/admin/users/labels', headers: auth_header, params: { + uid: experimental_user.uid, + scope: 'public' + } + expect(response.status).to eq 422 + expect(response.body).to eq "{\"errors\":[\"admin.user.missing_key\",\"admin.user.empty_key\"]}" + end + + it 'renders error when scope is missing' do + delete '/api/v2/admin/users/labels', headers: auth_header, params: { + key: 'email', + uid: experimental_user.uid + } + expect(response.status).to eq 422 + expect(response.body).to eq "{\"errors\":[\"admin.user.missing_scope\",\"admin.user.empty_scope\"]}" + end + + it 'renders error when uid is invalid' do + delete '/api/v2/admin/users/labels', headers: auth_header, params: { + key: 'email', + uid: 'asdasdasdsadas', + scope: 'public' + } + expect(response.status).to eq 404 + expect(response.body).to eq "{\"errors\":[\"admin.user.doesnt_exist\"]}" + end + + it 'renders error when label does not exist' do + delete '/api/v2/admin/users/labels', headers: auth_header, params: { + key: 'email', + uid: experimental_user.uid, + scope: 'public' + } + expect(response.status).to eq 404 + expect(response.body).to eq "{\"errors\":[\"admin.label.doesnt_exist\"]}" + end + + it 'deletes label' do + add_label + delete '/api/v2/admin/users/labels', headers: auth_header, params: { + key: 'email', + uid: experimental_user.uid, + scope: 'public' + } + experimental_user.reload + expect(response.status).to eq 200 + expect(experimental_user.labels.count).to eq 2 + end + end + end + + describe 'POST /api/v2/admin/users/labels/update' do + let(:user) { create(:user, role: 'admin') } + let!(:create_superadmin_permission) { create(:permission, role: 'superadmin', action: 'accept', verb: 'get') } + let!(:test_user) { create(:user, role: 'superadmin') } + let(:data) do + { + uid: user.uid, + key: 'phone', + value: 'verified', + scope: 'private', + description: 'experimental phone verification' + } + end + let(:do_request) do + post '/api/v2/admin/users/labels/update', headers: auth_header, params: data + end + + context 'with default replace policy(true)' do + it 'creates a label' do + expect(user.labels.find_by(key: 'phone')).to eq(nil) + + do_request + expect(response.status).to eq 200 + expect(user.labels.find_by(key: 'phone')).not_to eq(nil) + end + + context 'when data is incomplete and description is empty' do + let(:data) do + { + uid: user.uid, + key: 'phone', + scope: 'private', + description: '' + } + end + + it 'receive an error' do + expect(user.labels.find_by(key: 'phone')).to eq(nil) + + do_request + expect(response.status).to eq 422 + expect(response.body).to eq "{\"errors\":[\"admin.user.missing_value\",\"admin.user.empty_value\",\"admin.user.empty_description\"]}" + expect(user.labels.find_by(key: 'phone')).to eq(nil) + end + end + end + + context 'with false replace policy' do + let(:data) do + { + uid: user.uid, + key: 'phone', + value: 'verified', + scope: 'private', + replace: false + } + end + + it 'receives an error' do + expect(user.labels.find_by(key: 'phone')).to eq(nil) + + do_request + expect(response.status).to eq 404 + expect(user.labels.find_by(key: 'phone')).to eq(nil) + expect(response.body).to eq "{\"errors\":[\"admin.label.doesnt_exist\"]}" + end + end + end + + describe 'GET /api/v2/admin/users/labels' do + let(:params) { { key: 'document', value: 'pending' } } + let(:do_request) { get '/api/v2/admin/users/labels', headers: auth_header, params: params } + + context 'admin user' do + let(:test_user) { create(:user, role: 'admin') } + + let(:document_pending_count) { 3 } + let(:document_rejected_count) { 2 } + let(:public_labels_count) { 2 } + + before(:example) do + document_pending_count.times do |i| + create(:label, key: 'document', value: 'pending', scope: 'private') + end + + document_rejected_count.times do |i| + create(:label, key: 'document', value: 'rejected', scope: 'private') + end + end + + it 'renders error when key is missing' do + get '/api/v2/admin/users/labels', headers: auth_header, params: { + value: 'pending' + } + expect(response.status).to eq 422 + expect(response.body).to eq "{\"errors\":[\"admin.user.missing_key\"]}" + end + + it 'renders error when value is missing' do + get '/api/v2/admin/users/labels', headers: auth_header, params: { + key: 'document' + } + expect(response.status).to eq 422 + expect(response.body).to eq "{\"errors\":[\"admin.user.missing_value\"]}" + end + + it 'returns users' do + get '/api/v2/admin/users/labels', headers: auth_header, params: { + key: 'document', + value: 'pending' + } + + expect(json_body.count).to eq document_pending_count + end + + context 'pagination test' do + it 'returns 1st page as default, limit 2 users per page' do + get '/api/v2/admin/users/labels', headers: auth_header, params: { + key: 'document', + value: 'pending', + limit: 2 + } + + expect(json_body.count).to eq 2 + + expect(json_body.first.keys).to match_array %i[email uid role level otp state referral_uid data] + expect(User.first.email).to eq json_body.first[:email] + expect(User.second.email).to eq json_body.second[:email] + + expect(response.headers.fetch('Total')).to eq document_pending_count.to_s + expect(response.headers.fetch('Page')).to eq '1' + expect(response.headers.fetch('Per-Page')).to eq '2' + end + + it 'returns 2nd page, limit 2 users per page' do + get '/api/v2/admin/users/labels', headers: auth_header, params: { + key: 'document', + value: 'pending', + limit: 2, + page: 2 + } + + expect(User.third.email).to eq json_body.first[:email] + + expect(json_body.first.keys).to match_array %i[email uid role level otp state referral_uid data] + expect(response.headers.fetch('Total')).to eq document_pending_count.to_s + expect(response.headers.fetch('Page')).to eq '2' + expect(response.headers.fetch('Per-Page')).to eq '2' + end + end + end + end + + describe 'POST /api/v2/admin/users/update' do + let!(:user) { create(:user, otp: true) } + let(:new_state) { 'banned' } + let(:request) { '/api/v2/admin/users/update' } + let!(:superadmin) { create(:user, role: 'superadmin') } + + context 'admin user' do + let(:test_user) { create(:user, role: 'admin') } + + it 'changes state' do + post request, headers: auth_header, params: { uid: user.uid, state: new_state } + + expect(response.status).to eq 200 + expect(user.reload.state). to eq new_state + end + + it 'changes state when superadmin user updates superadmin' do + test_user.update!(role: 'superadmin') + post request, headers: auth_header, params: { uid: superadmin.uid, state: 'banned' } + + expect(response.status).to eq 200 + expect(superadmin.reload.state). to eq 'banned' + end + + it 'disables otp' do + post request, headers: auth_header, params: { uid: user.uid, otp: false } + + expect(response.status).to eq 200 + expect(user.reload.otp).to eq false + end + + it 'renders error when non-superadmin user updates superadmin' do + post request, headers: auth_header, params: { uid: superadmin.uid, state: 'banned' } + + result = JSON.parse(response.body) + expect(response.code).to eq '422' + expect(result['errors']).to eq(['admin.user.superadmin_change']) + end + + it 'renders error when state does not change' do + post request, headers: auth_header, params: { uid: user.uid, state: user.state } + + expect(response.status).to eq 422 + expect(response.body).to eq "{\"errors\":[\"admin.user.state_no_change\"]}" + end + end + end + + describe 'GET /api/v2/admin/users/documents/pending' do + let(:do_request) { get '/api/v2/admin/users/documents/pending', headers: auth_header} + + context 'admin user' do + let(:test_user) { create(:user, role: 'admin') } + + let(:private_document_pending_count) { 3 } + let(:private_document_replaced_count) { 3 } + let(:public_document_pending_count) { 2 } + + context 'private pending documents' do + before(:example) do + private_document_pending_count.times do |i| + create(:label, key: 'document', value: 'pending', scope: 'private') + end + public_document_pending_count.times do |i| + create(:label, key: 'document', value: 'pending', scope: 'public') + end + end + + it 'returns users with profile and documents if params extended' do + get '/api/v2/admin/users/documents/pending', headers: auth_header, params: { extended: true } + + expect(json_body.first.keys).to include(:profiles) + expect(json_body.first.keys).to include(:documents) + expect(json_body.count).to eq private_document_pending_count + end + + it 'doesnt returns users with profile and documents if extended false' do + get '/api/v2/admin/users/documents/pending', headers: auth_header, params: { extended: false } + + expect(json_body.first.keys).not_to include(:profile) + expect(json_body.first.keys).not_to include(:documents) + expect(json_body.count).to eq private_document_pending_count + end + + it 'doesnt returns users with profile and documents if extended not provided' do + get '/api/v2/admin/users/documents/pending', headers: auth_header + + expect(json_body.first.keys).not_to include(:profile) + expect(json_body.first.keys).not_to include(:documents) + expect(json_body.count).to eq private_document_pending_count + end + + it 'returns users' do + get '/api/v2/admin/users/documents/pending', headers: auth_header + + expect(json_body.first.keys).to_not include(:profile) + expect(json_body.count).to eq private_document_pending_count + end + + it 'returns users users with extended info' do + get '/api/v2/admin/users/documents/pending', headers: auth_header, params: {extended: true} + + expect(json_body.first.keys).to include(:profiles) + expect(json_body.count).to eq private_document_pending_count + end + end + + context 'private pending and replaced documents' do + before(:example) do + private_document_pending_count.times do |i| + create(:label, key: 'document', value: 'pending', scope: 'private') + end + + private_document_replaced_count.times do |i| + create(:label, key: 'document', value: 'replaced', scope: 'private') + end + + public_document_pending_count.times do |i| + create(:label, key: 'document', value: 'pending', scope: 'public') + end + end + + it 'returns users with profile and documents with value pending and replaces' do + get '/api/v2/admin/users/documents/pending', headers: auth_header, params: { extended: true } + + expect(json_body.first.keys).to include(:profiles) + expect(json_body.first.keys).to include(:documents) + expect(json_body.count).to eq private_document_pending_count + private_document_replaced_count + end + end + + context 'filtering' do + before(:example) do + private_document_pending_count.times do |i| + create(:label, key: 'document', value: 'pending', scope: 'private') + end + public_document_pending_count.times do |i| + create(:label, key: 'document', value: 'pending', scope: 'public') + end + end + + let(:params) { {} } + let(:do_search_request) { get '/api/v2/admin/users/documents/pending', headers: auth_header, params: params } + + it 'returns filtered list of users when only one filter param given created_at and from' do + params[:range] = 'created' + User.first.update(created_at: 1.day.ago) + params[:from] = 8.hours.ago.to_i + do_search_request + + expect(response.status).to eq 200 + expect(json_body.count).to eq (private_document_pending_count - 1) + end + + it 'returns filtered list of users when only one filter param given updated_at' do + params[:range] = 'updated' + User.first.update(updated_at: 1.day.ago) + params[:from] = 8.hours.ago.to_i + do_search_request + + expect(response.status).to eq 200 + expect(json_body.count).to eq (private_document_pending_count - 1) + end + + it 'returns filtered list of users when only one filter param given (user attribute) level' do + User.first.update(level: 2) + params[:level] = 2 + do_search_request + + expect(json_body.count).to eq User.joins(:labels).where(labels: { key: 'document', value: 'pending', scope: 'private' }).where(level: 2).count + end + + it 'returns filtered list of users when only one filter param given (user attribute) state' do + params[:state] = 'active' + do_search_request + expect(response.status).to eq 200 + expect(json_body.count).to eq User.joins(:labels).where(labels: { key: 'document', value: 'pending', scope: 'private' }).where(state: 'active').count + end + + it 'returns filtered list of users when several params given (user attribute) : state and level' do + User.first.update(level: 2) + params[:level] = 2 + params[:state] = 'active' + do_search_request + expect(response.status).to eq 200 + expect(json_body.count).to eq User.joins(:labels).where(labels: { key: 'document', value: 'pending', scope: 'private' }).where(level: 2, state: 'active').count + end + + let(:profile) do + create :profile, first_name: 'peatio', + last_name: 'barong', + country: 'us' + Label.create(key: 'document', value: 'pending', scope: 'private', user_id: Profile.last.user_id) + end + + it 'returns filtered list of users when only one filter param given (profile attribute) first_name' do + profile + params[:first_name] = 'peatio' + do_search_request + + expect(response.status).to eq 200 + end + + it 'returns filtered list of users when several params given (profile attribute) : first_name and country' do + profile + params[:first_name] = 'peatio' + params[:last_name] = 'barong' + params[:country] = 'us' + do_search_request + + expect(response.status).to eq 200 + end + end + + context 'sorting test' do + let!(:first_user) { create(:user) } + let!(:second_user) { create(:user) } + let!(:test_user) { create(:user, role: 'admin') } + + before(:example) do + create(:label, key: 'document', value: 'pending', scope: 'private', user_id: second_user.id, created_at: 10.minutes.ago) + create(:label, key: 'document', value: 'pending', scope: 'private', user_id: first_user.id, created_at: 5.minutes.ago) + end + + it 'returns users sorted by time of label creation' do + get '/api/v2/admin/users/documents/pending', headers: auth_header + expect(json_body.last[:email]).to eq first_user.email + end + end + + context 'pagination test' do + before(:example) do + private_document_pending_count.times do |i| + create(:label, key: 'document', value: 'pending', scope: 'private') + end + public_document_pending_count.times do |i| + create(:label, key: 'document', value: 'pending', scope: 'public') + end + end + + it 'returns 1st page as default, limit 2 users per page' do + get '/api/v2/admin/users/documents/pending', headers: auth_header, params: { + limit: 2 + } + + expect(json_body.count).to eq 2 + expect(response.headers.fetch('Total')).to eq private_document_pending_count.to_s + expect(response.headers.fetch('Page')).to eq '1' + expect(response.headers.fetch('Per-Page')).to eq '2' + end + + it 'returns 2nd page, limit 2 users per page' do + get '/api/v2/admin/users/documents/pending', headers: auth_header, params: { + limit: 2, + page: 2 + } + + expect(response.headers.fetch('Total')).to eq private_document_pending_count.to_s + expect(response.headers.fetch('Page')).to eq '2' + expect(response.headers.fetch('Per-Page')).to eq '2' + end + end + end + end + + context 'comments' do + describe 'POST /api/v2/admin/users/comments' do + let(:url) { '/api/v2/admin/users/comments' } + let(:params) { {} } + let(:do_request) { post url, headers: auth_header, params: params } + + + context 'successfull request' do + let(:params) do + { + uid: experimental_user.uid, + title: 'some useful title', + data: 'some useless data.', + } + end + let(:do_request) { post url, headers: auth_header, params: params } + + it 'creates new comment' do + expect { do_request }.to change { Comment.count }.by 1 + expect(response.status).to eq 201 + end + + it 'saves author_uid' do + do_request + + expect(json_body.keys).to match_array %i[email uid role level otp state data profiles labels phones documents data_storages comments referral_uid created_at updated_at] + expect(Comment.last.author_uid).to eq test_user.uid + expect(json_body[:comments][0][:author_uid]).to eq test_user.uid + expect(json_body[:profiles][0][:first_name]).to eq experimental_user.profiles[0].first_name + expect(json_body[:profiles][0][:last_name]).to eq experimental_user.profiles[0].last_name + expect(json_body[:profiles][0][:address]).to eq experimental_user.profiles[0].address + expect(json_body[:profiles][0][:dob]).to eq experimental_user.profiles[0].dob.to_s + expect(json_body[:documents][0][:doc_number]).to eq experimental_user.documents[0].doc_number + expect(json_body[:phones][0][:number]).to eq experimental_user.phones[0].number + expect(response.status).to eq 201 + end + end + + context 'errored request' do + let(:params) do + { + uid: experimental_user.uid, + title: Faker::Lorem.characters(number: 65), + data: 'some useless data.', + } + end + + it 'returns error because of length of comment' do + expect { do_request }.to change { Comment.count }.by 0 + expect(json_body[:errors]).to eq ['admin.comments.title_too_long'] + expect(response.status).to eq 422 + end + end + end + + describe 'PUT /api/v2/admin/users/comments' do + let(:url) { '/api/v2/admin/users/comments' } + let!(:seeded) { Comment.create(author_uid: test_user.uid, user_id: experimental_user.id, title: 'preseeded record', data: 'prev') } + let(:params) do + { + id: seeded.id, + uid: experimental_user.uid, + data: 'next.', + } + end + let(:do_request) { put url, headers: auth_header, params: params } + + it 'does not create new comment' do + expect { do_request }.not_to change { Comment.count } + expect(response.status).to eq 200 + end + + it 'comment does not exist' do + put url, headers: auth_header, params: { id: seeded.id+1, uid: experimental_user.uid, title: 'vv', data: 'ww' } + expect(response.status).to eq 404 + end + + it 'changes data' do + do_request + expect(seeded.reload.data).to eq 'next.' + expect(seeded.reload.title).to eq 'preseeded record' + expect(response.status).to eq 200 + end + end + + describe 'DELETE /api/v2/admin/users/comments' do + let(:url) { '/api/v2/admin/users/comments' } + let!(:seeded) { Comment.create(author_uid: test_user.uid, user_id: experimental_user.id, title: 'preseeded record', data: 'prev') } + let(:params) { { id: seeded.id } } + let(:do_request) { delete url, headers: auth_header, params: params } + + it 'does not create new comment' do + expect { do_request }.to change { Comment.count }.by -1 + expect(response.status).to eq 200 + end + + it 'comment does not exist' do + put url, headers: auth_header, params: { id: seeded.id+1, uid: experimental_user.uid, title: 'vv', data: 'ww' } + expect(response.status).to eq 404 + end + end + end +end diff --git a/spec/api/v2/auth/audit_spec.rb b/spec/api/v2/auth/audit_spec.rb new file mode 100644 index 0000000..6417a28 --- /dev/null +++ b/spec/api/v2/auth/audit_spec.rb @@ -0,0 +1,307 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe '/api/v2/auth functionality test' do + include_context 'geoip mock' + before do + end + before do + create :permission, role: 'admin', action: 'AUDIT', verb: 'put', path: 'api/v2/admin/users' + create :permission, role: 'member' + create :permission, role: 'technical', action: 'AUDIT', verb: 'post', path: 'api/v2/admin/wallets' + create :permission, role: 'accountant', action: 'AUDIT', verb: 'delete', path: 'api/v2/admin/markets' + @user = create(:user) + @accountant_user = create(:user, role: 'accountant') + @admin_user = create(:user, role: 'admin') + @technical_user = create(:user, role: 'technical') + + Permission.create(role: 'admin', action: 'ACCEPT', verb: 'get', path: 'api/v2/admin/users/list') + Permission.create(role: 'accountant', action: 'ACCEPT', verb: 'post', path: 'api/v2/accountant/documents') + end + + let(:uri) { '/api/v2/identity/sessions' } + + let(:do_create_session_request_acc) { post uri, params: { email: @accountant_user.email, password: @accountant_user.password }, headers: { 'HTTP_USER_AGENT' => 'random-browser' }} + let(:do_create_session_request_adm) { post uri, params: { email: @admin_user.email, password: @admin_user.password, otp_code: '1357' }, headers: { 'HTTP_USER_AGENT' => 'random-browser' } } + let(:do_create_session_request_tech) { post uri, params: { email: @technical_user.email, password: @technical_user.password }, headers: { 'HTTP_USER_AGENT' => 'random-browser' } } + + let(:do_create_session_request) { post uri, params: { email: @user.email, password: @user.password }, headers: { 'HTTP_USER_AGENT' => 'random-browser' } } + let(:auth_request) { '/api/v2/auth/not_in_the_rules_path' } + let(:protected_request) { '/api/v2/resource/users/me' } + + describe 'audit permissions testing' do + let!(:turn_off_2fa) do + User.all.each { |u| u.update(otp: false) } + end + let(:do_some_requests) do + delete '/api/v2/auth/api/v2/admin', headers: { 'HTTP_USER_AGENT' => 'random-browser' } + post '/api/v2/auth/api/v2/admin', headers: { 'HTTP_USER_AGENT' => 'random-browser' } + put '/api/v2/auth/api/v2/admin', headers: { 'HTTP_USER_AGENT' => 'random-browser' } + end + + context 'records activity if path doesnt match with AUDIT permission path but matches with DROP or BLANK' do + context 'acts as expected with different roles with another permission type match' do + before do + Permission.delete_all + Rails.cache.delete('permissions') + end + + it 'for accountant' do + expect(Permission.all.count).to eq(0) + # accountant + do_create_session_request_acc + do_some_requests + expect(Activity.where(category: 'admin', result: 'denied').count).to eq(3) + + end + + it 'for admin' do + expect(Permission.all.count).to eq(0) + # admin + do_create_session_request_adm + do_some_requests + expect(Activity.where(category: 'admin', result: 'denied').count).to eq(3) + end + end + + context 'acts as expected with different roles without any permissions' do + before do + Permission.delete_all + Rails.cache.delete('permissions') + expect(Permission.all.count).to eq(0) + end + + it 'for accountant' do + # accountant + do_create_session_request_acc + do_some_requests + expect(response.status).to eq(401) + expect(Activity.where(category: 'admin', result: 'denied').count).to eq(3) + end + + it 'for admin' do + # admin + do_create_session_request_adm + do_some_requests + expect(response.status).to eq(401) + expect(Activity.where(category: 'admin', result: 'denied').count).to eq(3) + end + end + end + + context 'records failed activity if path matches with AUDIT permission path' do + context 'creates only one thread' do + before do + Permission.delete_all + Permission.create(role: 'technical', action: 'AUDIT', verb: 'post', path: 'api/v2/admin/wallets') + Permission.create(role: 'admin', action: 'AUDIT', verb: 'put', path: 'api/v2/admin/users') + Permission.create(role: 'accountant', action: 'AUDIT', verb: 'delete', path: 'api/v2/admin/markets') + Rails.cache.delete('permissions') + end + end + + context 'without topic specified and without user_uid in params' do + let!(:create_audit_permissions) do + Permission.create(role: 'technical', action: 'AUDIT', verb: 'post', path: 'api/v2/admin/wallets') + Permission.create(role: 'admin', action: 'AUDIT', verb: 'put', path: 'api/v2/admin/users') + Permission.create(role: 'accountant', action: 'AUDIT', verb: 'delete', path: 'api/v2/admin/markets') + Rails.cache.delete('permissions') + end + + it 'works for general topic' do + do_create_session_request_acc + expect(Activity.where(category: 'admin').count).to eq(0) + get '/api/v2/auth/api/v2/admin', headers: { 'HTTP_USER_AGENT' => 'random-browser' } + expect(Activity.where(category: 'admin').count).to eq(1) + expect(Activity.last.topic).to eq('general') + expect(Activity.last.result).to eq('denied') + end + + it 'works for patch request' do + do_create_session_request_acc + expect(Activity.where(category: 'admin').count).to eq(0) + patch '/api/v2/auth/api/v2/admin', headers: { 'HTTP_USER_AGENT' => 'random-browser' } + expect(Activity.where(category: 'admin').count).to eq(1) + expect(Activity.last.topic).to eq('general') + expect(Activity.last.action).to eq('update') + expect(Activity.last.result).to eq('denied') + end + + it 'works for non - put post patch get delete requests' do + do_create_session_request_acc + expect(Activity.where(category: 'admin').count).to eq(0) + head '/api/v2/auth/api/v2/admin', headers: { 'HTTP_USER_AGENT' => 'random-browser' } + expect(Activity.where(category: 'admin').count).to eq(1) + expect(Activity.last.topic).to eq('general') + expect(Activity.last.action).to eq('system') + expect(Activity.last.result).to eq('denied') + end + + it 'for account role' do + do_create_session_request_acc + expect(Activity.where(category: 'admin').count).to eq(0) + delete '/api/v2/auth/api/v2/admin/markets', headers: { 'HTTP_USER_AGENT' => 'random-browser' } + expect(Activity.where(category: 'admin').count).to eq(1) + expect(Activity.last.topic).to eq('markets') + expect(Activity.last.result).to eq('denied') + end + + it 'for admin role' do + do_create_session_request_adm + expect(Activity.where(category: 'admin').count).to eq(0) + put '/api/v2/auth/api/v2/admin/users', headers: { 'HTTP_USER_AGENT' => 'random-browser' } + expect(Activity.where(category: 'admin').count).to eq(1) + expect(Activity.last.topic).to eq('users') + expect(Activity.last.result).to eq('denied') + end + + it 'for technical role' do + do_create_session_request_tech + expect(Activity.where(category: 'admin').count).to eq(0) + post '/api/v2/auth/api/v2/admin/wallets', headers: { 'HTTP_USER_AGENT' => 'random-browser' } + expect(Activity.where(category: 'admin').count).to eq(1) + expect(Activity.last.topic).to eq('wallets') + expect(Activity.last.result).to eq('denied') + end + end + + context 'with specified topic and without user_uid' do + let!(:create_audit_permissions) do + Permission.delete_all + Permission.create(role: 'technical', action: 'ACCEPT', verb: 'post', path: 'api/v2/admin/wallets', topic: 'tech_support') + Permission.create(role: 'admin', action: 'ACCEPT', verb: 'put', path: 'api/v2/admin/users', topic: 'administrating') + Permission.create(role: 'accountant', action: 'ACCEPT', verb: 'delete', path: 'api/v2/admin/markets', topic: 'accounting') + + Permission.create(role: 'technical', action: 'AUDIT', verb: 'post', path: 'api/v2/admin/wallets', topic: 'tech_support') + Permission.create(role: 'admin', action: 'AUDIT', verb: 'put', path: 'api/v2/admin/users', topic: 'administrating') + Permission.create(role: 'accountant', action: 'AUDIT', verb: 'delete', path: 'api/v2/admin/markets', topic: 'accounting') + Rails.cache.delete('permissions') + end + context 'for different roles' do + it 'accountant' do + do_create_session_request_acc + expect(Activity.where(category: 'admin').count).to eq(0) + delete '/api/v2/auth/api/v2/admin/markets', headers: { 'HTTP_USER_AGENT' => 'random-browser' } + expect(Activity.where(category: 'admin').count).to eq(1) + expect(Activity.last.topic).to eq('accounting') + expect(Activity.last.result).to eq('succeed') + end + + it 'technical' do + do_create_session_request_tech + expect(Activity.where(category: 'admin').count).to eq(0) + post '/api/v2/auth/api/v2/admin/wallets', headers: { 'HTTP_USER_AGENT' => 'random-browser' } + expect(Activity.where(category: 'admin').count).to eq(1) + expect(Activity.last.topic).to eq('tech_support') + expect(Activity.last.result).to eq('succeed') + end + + it 'admin' do + do_create_session_request_adm + expect(Activity.where(category: 'admin').count).to eq(0) + put '/api/v2/auth/api/v2/admin/users', headers: { 'HTTP_USER_AGENT' => 'random-browser' } + expect(Activity.where(category: 'admin').count).to eq(1) + expect(Activity.last.topic).to eq('administrating') + expect(Activity.last.result).to eq('succeed') + end + end + end + + context 'with specified topic and user_uid' do + let!(:create_audit_permissions) do + Permission.create(role: 'technical', action: 'AUDIT', verb: 'post', path: 'api/v2/admin/wallets', topic: 'tech_support') + Permission.create(role: 'admin', action: 'AUDIT', verb: 'put', path: 'api/v2/admin/users', topic: 'administrating') + Permission.create(role: 'accountant', action: 'AUDIT', verb: 'delete', path: 'api/v2/admin/markets', topic: 'accounting') + Rails.cache.delete('permissions') + end + + it 'for different roles' do + do_create_session_request_acc + expect(Activity.where(category: 'admin').count).to eq(0) + delete '/api/v2/auth/api/v2/admin/markets', params: { uid: @user.uid } ,headers: { 'HTTP_USER_AGENT' => 'random-browser' } + expect(Activity.where(category: 'admin').count).to eq(1) + expect(Activity.last.topic).to eq('markets') + expect(Activity.last.result).to eq('denied') + end + + it 'includes data in denied activity' do + do_create_session_request_acc + expect(Activity.where(category: 'admin').count).to eq(0) + delete '/api/v2/auth/api/v2/admin/markets', headers: { 'HTTP_USER_AGENT' => 'random-browser' }, params: { user_uid: @user.uid } + expect(Activity.where(category: 'admin').count).to eq(1) + expect(Activity.last.topic).to eq('markets') + expect(Activity.last.result).to eq('denied') + expect(Activity.last.target_uid).to eq(@user.uid) + expect(JSON.parse(Activity.last.data).keys).to include('user_uid', 'path', 'note') + end + end + end + + context 'records succesfull activity if path matches with AUDIT permission path' do + context 'with different params combination' do + let!(:create_audit_permissions) do + Permission.create(role: 'accountant', action: 'ACCEPT', verb: 'delete', path: 'api/v2/admin/markets') + Permission.create(role: 'admin', action: 'ACCEPT', verb: 'put', path: 'api/v2/admin/users') + Permission.create(role: 'technical', action: 'ACCEPT', verb: 'post', path: 'api/v2/admin/wallets') + Permission.create(role: 'technical', action: 'AUDIT', verb: 'post', path: 'api/v2/admin/wallets') + Permission.create(role: 'admin', action: 'AUDIT', verb: 'put', path: 'api/v2/admin/users') + Permission.create(role: 'accountant', action: 'AUDIT', verb: 'delete', path: 'api/v2/admin/markets') + Rails.cache.delete('permissions') + end + + context 'for different roles without params' do + it 'accountant' do + do_create_session_request_acc + expect(Activity.where(category: 'admin').count).to eq(0) + delete '/api/v2/auth/api/v2/admin/markets', headers: { 'HTTP_USER_AGENT' => 'random-browser' } + expect(Activity.where(category: 'admin').count).to eq(1) + expect(Activity.last.topic).to eq('markets') + expect(Activity.last.result).to eq('succeed') + end + + it 'technical' do + do_create_session_request_tech + expect(Activity.where(category: 'admin').count).to eq(0) + post '/api/v2/auth/api/v2/admin/wallets', headers: { 'HTTP_USER_AGENT' => 'random-browser' } + expect(Activity.where(category: 'admin').count).to eq(1) + expect(Activity.last.topic).to eq('wallets') + expect(Activity.last.result).to eq('succeed') + end + + it 'admin' do + do_create_session_request_adm + expect(Activity.where(category: 'admin').count).to eq(0) + put '/api/v2/auth/api/v2/admin/users', headers: { 'HTTP_USER_AGENT' => 'random-browser' } + expect(Activity.where(category: 'admin').count).to eq(1) + expect(Activity.last.topic).to eq('users') + expect(Activity.last.result).to eq('succeed') + end + end + + context 'for different roles with user_uid in params' do + it 'includes data in succesfull activity' do + do_create_session_request_acc + expect(Activity.where(category: 'admin').count).to eq(0) + delete '/api/v2/auth/api/v2/admin/markets', headers: { 'HTTP_USER_AGENT' => 'random-browser' }, params: { user_uid: @user.uid } + expect(Activity.where(category: 'admin').count).to eq(1) + expect(Activity.last.topic).to eq('markets') + expect(Activity.last.result).to eq('succeed') + expect(Activity.last.target_uid).to eq(@user.uid) + expect(JSON.parse(Activity.last.data).keys).to include('user_uid', 'path', 'note') + end + + it 'create activity and save target_uid for accountant if user with this uid exists' do + do_create_session_request_acc + expect(Activity.where(category: 'admin').count).to eq(0) + delete '/api/v2/auth/api/v2/admin/markets', headers: { 'HTTP_USER_AGENT' => 'random-browser' }, params: { user_uid: @user.uid } + expect(Activity.where(category: 'admin').count).to eq(1) + expect(Activity.last.topic).to eq('markets') + expect(Activity.last.result).to eq('succeed') + expect(Activity.last.target_uid).to eq(@user.uid) + end + end + end + end + end +end diff --git a/spec/api/v2/auth/auth_spec.rb b/spec/api/v2/auth/auth_spec.rb new file mode 100644 index 0000000..e3012a7 --- /dev/null +++ b/spec/api/v2/auth/auth_spec.rb @@ -0,0 +1,366 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe '/api/v2/auth functionality test' do + include_context 'geoip mock' + + let(:uri) { '/api/v2/identity/sessions' } + let!(:create_permissions) do + create :permission, role: 'admin' + create :permission, role: 'member', action: 'ACCEPT', verb: 'all', path: 'not_in_the_rules_path' + create :permission, role: 'member', action: 'ACCEPT', verb: 'get', path: '/api/v2/resource/users/me' + create :permission, role: 'accountant' + end + let!(:user) { create(:user) } + let(:params) do + { + email: user.email, + password: user.password + } + end + + let(:do_create_session_request) { post uri, params: params } + let(:auth_request) { '/api/v2/auth/not_in_the_rules_path' } + let(:protected_request) { '/api/v2/resource/users/me' } + + describe 'testing workability with session' do + before do + Rails.cache.delete('permissions') + end + + context 'with valid session' do + before do + do_create_session_request + end + + it 'returns bearer token on valid session' do + get auth_request + + expect(response.status).to eq(200) + expect(response.headers['Authorization']).not_to be_nil + expect(response.headers['Authorization']).to include "Bearer" + end + + it 'allows any type of request' do + available_types = %w[post get put head delete patch] + available_types.each do |ping| + method("#{ping}").call auth_request + + expect(response.headers['Authorization']).not_to be_nil + + get protected_request, headers: { 'Authorization' => response.headers['Authorization'] } + expect(response.status).to eq(200) + end + end + end + + context 'ip related' do + let(:create_session_uri) { uri } + let(:auth_uri) { '/api/v2/auth/not_in_the_rules_path' } + let(:ip_to_be_equal) { '168.238.57.64' } + let(:ip_that_differs) { '168.27.3.225' } + + context 'default ip behaviour from HTTP_X_FORWARDED_FOR via action_dispatch.remote_ip' do + it 'works if ip from session matches request ip' do + post create_session_uri, params: params, headers: { 'HTTP_X_FORWARDED_FOR' => ip_to_be_equal } + get auth_uri, headers: { 'HTTP_X_FORWARDED_FOR' => ip_to_be_equal } + + expect(response.status).to eq(200) + expect(response.headers['Authorization']).not_to be_nil + expect(response.headers['Authorization']).to include "Bearer" + end + + it 'denies access if ip from session doesnt match request ip' do + post create_session_uri, params: params, headers: { 'HTTP_X_FORWARDED_FOR' => ip_to_be_equal } + get auth_uri, headers: { 'HTTP_X_FORWARDED_FOR' => ip_that_differs } + + expect(response.status).to eq(401) + expect(response.headers['Authorization']).to be_nil + end + end + + context 'ip behaviour from TRUE_CLIENT_IP header' do + before do + allow(Barong::App.config).to receive_messages(gateway: 'akamai') + end + + it 'works if ip from session matches request ip' do + post create_session_uri, params: params, headers: { 'HTTP_X_FORWARDED_FOR' => ip_to_be_equal, 'HTTP_TRUE_CLIENT_IP' => ip_to_be_equal } + get auth_uri, headers: { 'HTTP_X_FORWARDED_FOR' => ip_that_differs, 'HTTP_TRUE_CLIENT_IP' => ip_to_be_equal } + + expect(response.status).to eq(200) + expect(response.headers['Authorization']).not_to be_nil + expect(response.headers['Authorization']).to include "Bearer" + end + + it 'uses HTTP_X_FORWARDED_FOR if TRUE_CLIENT_IP missing and works' do + post create_session_uri, params: params, headers: { 'HTTP_X_FORWARDED_FOR' => ip_to_be_equal } + get auth_uri, headers: { 'HTTP_X_FORWARDED_FOR' => ip_to_be_equal } + + expect(response.status).to eq(200) + expect(response.headers['Authorization']).not_to be_nil + expect(response.headers['Authorization']).to include "Bearer" + end + + it 'uses HTTP_X_FORWARDED_FOR if TRUE_CLIENT_IP empty and works' do + post create_session_uri, params: params, headers: { 'HTTP_X_FORWARDED_FOR' => ip_to_be_equal, 'HTTP_TRUE_CLIENT_IP' => '' } + get auth_uri, headers: { 'HTTP_X_FORWARDED_FOR' => ip_to_be_equal, 'HTTP_TRUE_CLIENT_IP' => '' } + + expect(response.status).to eq(200) + expect(response.headers['Authorization']).not_to be_nil + expect(response.headers['Authorization']).to include "Bearer" + end + + it 'denies access if ip from session doesnt match request ip in HTTP_TRUE_CLIENT_IP' do + post create_session_uri, params: params, headers: { 'HTTP_X_FORWARDED_FOR' => ip_to_be_equal, 'HTTP_TRUE_CLIENT_IP' => ip_to_be_equal } + get auth_uri, headers: { 'HTTP_X_FORWARDED_FOR' => ip_that_differs, 'HTTP_TRUE_CLIENT_IP' => ip_that_differs } + + expect(response.status).to eq(401) + expect(response.headers['Authorization']).to be_nil + end + + it 'uses HTTP_X_FORWARDED_FOR if TRUE_CLIENT_IP empty or missing and denies access' do + post create_session_uri, params: params, headers: { 'HTTP_X_FORWARDED_FOR' => ip_to_be_equal, 'HTTP_TRUE_CLIENT_IP' => '' } + get auth_uri, headers: { 'HTTP_X_FORWARDED_FOR' => ip_that_differs } + + expect(response.status).to eq(401) + expect(response.headers['Authorization']).to be_nil + end + end + end + + context 'testing session related errors' do + it 'renders error if no session or api key headers provided' do + get auth_request + expect(response.status).to eq(401) + expect(response.body).to eq("{\"errors\":[\"authz.invalid_session\"]}") + end + + it 'renders error if session belongs to non-active user' do + do_create_session_request + expect(response.status).to eq(200) + user.update(state: 'banned') + + get auth_request + expect(response.status).to eq(401) + expect(response.body).to eq("{\"errors\":[\"authz.user_not_active\"]}") + end + end + + context 'testing restrictions' do + before do + Rails.cache.delete('permissions') + do_create_session_request + expect(response.status).to eq(200) + end + + let(:do_restricted_request) { put '/api/v2/auth/api/v2/peatio/management/ping' } + + it 'receives access error if path is blacklisted' do + do_restricted_request + expect(response.status).to eq(401) + expect(response.body).to eq("{\"errors\":[\"authz.permission_denied\"]}") + end + + let(:do_whitelisted_request) { put '/api/v2/auth/api/v2/peatio/public/ping' } + + it 'receives access error if path is blacklisted' do + do_whitelisted_request + expect(response.status).to eq(200) + expect(response.body).to be_empty + expect(response.headers['Authorization']).to be_nil + end + end + end + + describe 'testing workability with api keys' do + include_context 'bearer authentication' + let!(:test_user) { create(:user, otp: otp_enabled) } + let(:otp_enabled) { true } + let!(:api_key) { create :api_key, key_holder_account: test_user } + let(:otp_code) { '1357' } + let(:nonce) { (Time.now.to_f * 1000).to_i } + let(:kid) { api_key.kid } + let(:secret) { api_key.secret } + let(:data) { nonce.to_s + kid } + let(:algorithm) { 'SHA' + api_key.algorithm[2..4]} + let(:signature) { OpenSSL::HMAC.hexdigest(algorithm, secret, data) } + + before do + Rails.cache.delete('permissions') + SecretStorage.store_secret(secret, api_key.kid) + allow(TOTPService).to receive(:validate?) + .with(test_user.uid, otp_code) { true } + end + + context 'testing api key related errors' do + it 'catches api key headers and renders error on missing header' do + get auth_request, headers: { + 'X-Auth-Apikey' => kid, + 'X-Auth-Nonce' => nonce, + } + expect(response.status).to eq(422) + expect(response.body).to eq("{\"errors\":[\"authz.invalid_api_key_headers\"]}") + expect(response.headers['Authorization']).to be_nil + end + + it 'catches api key headers and renders error if nonce is string' do + get auth_request, headers: { + 'X-Auth-Apikey' => kid, + 'X-Auth-Nonce' => 'nonce', + 'X-Auth-Signature' => signature + } + expect(response.status).to eq(401) + expect(response.body).to eq("{\"errors\":[\"authz.nonce_not_valid_timestamp\"]}") + expect(response.headers['Authorization']).to be_nil + end + + it 'catches api key headers and renders error if nonce is zero' do + get auth_request, headers: { + 'X-Auth-Apikey' => kid, + 'X-Auth-Nonce' => 0, + 'X-Auth-Signature' => signature + } + expect(response.status).to eq(401) + expect(response.body).to eq("{\"errors\":[\"authz.nonce_not_valid_timestamp\"]}") + expect(response.headers['Authorization']).to be_nil + end + + it 'catches api key headers and renders error if nonce is older than default 5 seconds in milliseconds' do + get auth_request, headers: { + 'X-Auth-Apikey' => kid, + 'X-Auth-Nonce' => ((Time.now - 10.seconds).to_f * 1000).to_i, + 'X-Auth-Signature' => signature + } + expect(response.status).to eq(401) + expect(response.body).to eq("{\"errors\":[\"authz.nonce_expired\"]}") + expect(response.headers['Authorization']).to be_nil + end + + it 'catches api key headers and renders error if nonce is from future with milisecond' do + get auth_request, headers: { + 'X-Auth-Apikey' => kid, + 'X-Auth-Nonce' => ((Time.now + 10.seconds).to_f * 1000).to_i, + 'X-Auth-Signature' => signature + } + expect(response.status).to eq(401) + expect(response.body).to eq("{\"errors\":[\"authz.nonce_expired\"]}") + expect(response.headers['Authorization']).to be_nil + end + + it 'catches api key headers and renders error on blank header' do + get auth_request, headers: { + 'X-Auth-Apikey' => kid, + 'X-Auth-Nonce' => nonce, + 'X-Auth-Signature' => ' ' + } + expect(response.status).to eq(422) + expect(response.body).to eq("{\"errors\":[\"authz.invalid_api_key_headers\"]}") + expect(response.headers['Authorization']).to be_nil + end + + it 'renders error when signature is invalid' do + get auth_request, headers: { + 'X-Auth-Apikey' => kid, + 'X-Auth-Nonce' => nonce, + 'X-Auth-Signature' => 'some-random-signature' + } + expect(response.status).to eq(401) + expect(response.body).to eq("{\"errors\":[\"authz.invalid_signature\"]}") + expect(response.headers['Authorization']).to be_nil + end + + let(:ban_api_key) { APIKey.last.update(state: 'banned') } + + it 'renders error when api key state is not active' do + ban_api_key + get auth_request, headers: { + 'X-Auth-Apikey' => kid, + 'X-Auth-Nonce' => nonce, + 'X-Auth-Signature' => signature + } + expect(response.status).to eq(401) + expect(response.body).to eq("{\"errors\":[\"authz.apikey_not_active\"]}") + expect(response.headers['Authorization']).to be_nil + end + + let(:ban_user) { test_user.update(state: 'banned') } + + it 'renders error when api key state is not active' do + ban_user + get auth_request, headers: { + 'X-Auth-Apikey' => kid, + 'X-Auth-Nonce' => nonce, + 'X-Auth-Signature' => signature + } + expect(response.status).to eq(401) + expect(response.body).to eq("{\"errors\":[\"authz.apikey_not_active\"]}") + expect(response.headers['Authorization']).to be_nil + end + + let(:disable_user_2fa) { test_user.update(otp: false) } + + it 'renders error when api key is valid but user have disabled 2fa' do + disable_user_2fa + get auth_request, headers: { + 'X-Auth-Apikey' => kid, + 'X-Auth-Nonce' => nonce, + 'X-Auth-Signature' => signature + } + + expect(response.status).to eq(401) + expect(response.body).to eq("{\"errors\":[\"authz.apikey_not_active\"]}") + expect(response.headers['Authorization']).to be_nil + end + end + + context 'testing api key with valid params' do + it 'catches api key headers and works as expected with milisecond nonce' do + get auth_request, headers: { + 'X-Auth-Apikey' => kid, + 'X-Auth-Nonce' => nonce, + 'X-Auth-Signature' => signature + } + expect(response.status).to eq(200) + expect(response.body).to be_empty + expect(response.headers['Authorization']).to include "Bearer" + expect(response.headers['Authorization']).not_to be_nil + + get protected_request, headers: { 'Authorization' => response.headers['Authorization'] } + expect(response.status).to eq(200) + end + end + + context 'testing restrictions' do + let(:do_restricted_request) { + put '/api/v2/auth/api/v2/peatio/management/ping', headers: { + 'X-Auth-Apikey' => kid, + 'X-Auth-Nonce' => nonce, + 'X-Auth-Signature' => signature + } + } + + it 'receives access error if path is blacklisted' do + do_restricted_request + expect(response.status).to eq(401) + expect(response.body).to eq("{\"errors\":[\"authz.permission_denied\"]}") + end + + let(:do_whitelisted_request) { + put '/api/v2/auth/api/v2/peatio/public/ping', headers: { + 'X-Auth-Apikey' => kid, + 'X-Auth-Nonce' => nonce, + 'X-Auth-Signature' => signature + } + } + + it 'receives access error if path is whitelisted' do + do_whitelisted_request + expect(response.status).to eq(200) + expect(response.body).to be_empty + expect(response.headers['Authorization']).to be_nil + end + end + end +end diff --git a/spec/api/v2/auth/csrf_spec.rb b/spec/api/v2/auth/csrf_spec.rb new file mode 100644 index 0000000..a70f08f --- /dev/null +++ b/spec/api/v2/auth/csrf_spec.rb @@ -0,0 +1,138 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe '/api/v2/auth CSRF functionality test' do + include_context 'geoip mock' + + before do + allow_any_instance_of(Barong::Authorize).to receive(:validate_csrf!).and_call_original + end + let(:uri) { '/api/v2/identity/sessions' } + let!(:create_permissions) do + create :permission, role: 'admin' + create :permission, role: 'member', action: 'ACCEPT', verb: 'all', path: 'not_in_the_rules_path' + create :permission, role: 'member', action: 'ACCEPT', verb: 'get', path: '/api/v2/resource/users/me' + create :permission, role: 'accountant' + end + let!(:user) { create(:user) } + let(:params) do + { + email: user.email, + password: user.password + } + end + + let(:do_create_session_request) { post uri, params: params } + let(:auth_request) { '/api/v2/auth/not_in_the_rules_path' } + let(:protected_request) { '/api/v2/resource/users/me' } + + describe 'testing workability with session' do + context 'without CSRF token' do + before do + Rails.cache.delete('permissions') + do_create_session_request + end + + it 'doesnt return bearer token on valid session without CSRF' do + post auth_request + + expect(response.status).to eq(401) + expect(response.headers['Authorization']).to be_nil + expect(response.body).to eq("{\"errors\":[\"authz.missing_csrf_token\"]}") + end + + it 'works with any type of changing state verb request' do + available_types = %w[post put delete patch] + available_types.each do |ping| + method("#{ping}").call auth_request + + expect(response.status).to eq(401) + expect(response.headers['Authorization']).to be_nil + expect(response.body).to eq("{\"errors\":[\"authz.missing_csrf_token\"]}") + + get protected_request, headers: { 'Authorization' => response.headers['Authorization'] } + expect(response.status).to eq(401) + end + end + + it 'works without CSRF token on any type of safe verb request' do + available_types = %w[get head] + available_types.each do |ping| + method("#{ping}").call auth_request + + expect(response.status).to eq(200) + expect(response.headers['Authorization']).not_to be_nil + + get protected_request, headers: { 'Authorization' => response.headers['Authorization'] } + expect(response.status).to eq(200) + end + end + end + + context 'with CSRF token' do + before do + Rails.cache.delete('permissions') + do_create_session_request + @csrf = json_body[:csrf_token] + end + + it 'doesnt return bearer token on valid session without CSRF' do + get auth_request, headers: { 'X-CSRF-Token': @csrf } + + expect(response.status).to eq(200) + expect(response.headers['Authorization']).not_to be_nil + end + + it 'doesnt work on any type of request without csrf' do + available_types = %w[post get put delete patch] + available_types.each do |ping| + method("#{ping}").call auth_request, headers: { 'X-CSRF-Token': @csrf } + + expect(response.status).to eq(200) + expect(response.headers['Authorization']).not_to be_nil + + get protected_request, headers: { 'Authorization' => response.headers['Authorization'] } + expect(response.status).to eq(200) + end + end + end + end + + describe 'testing workability with api keys' do + let!(:test_user) { create(:user, otp: otp_enabled) } + let(:otp_enabled) { true } + let!(:api_key) { create :api_key, key_holder_account: test_user } + let(:otp_code) { '1357' } + let(:nonce) { (Time.now.to_f * 1000).to_i } + let(:kid) { api_key.kid } + let(:secret) { api_key.secret } + let(:data) { nonce.to_s + kid } + let(:algorithm) { 'SHA' + api_key.algorithm[2..4]} + let(:signature) { OpenSSL::HMAC.hexdigest(algorithm, secret, data) } + + before do + Rails.cache.delete('permissions') + SecretStorage.store_secret(secret, api_key.kid) + allow(TOTPService).to receive(:validate?) + .with(test_user.uid, otp_code) { true } + end + + context 'with valid api keys' do + it 'works without CSRF' do + get auth_request, headers: { + 'X-Auth-Apikey' => kid, + 'X-Auth-Nonce' => nonce, + 'X-Auth-Signature' => signature + } + expect(response.status).to eq(200) + expect(response.body).to be_empty + expect(response.headers['Authorization']).to include 'Bearer' + expect(response.headers['Authorization']).not_to be_nil + + get protected_request, headers: { 'Authorization' => response.headers['Authorization'] } + expect(response.status).to eq(200) + end + end + end +end diff --git a/spec/api/v2/auth/rbac_spec.rb b/spec/api/v2/auth/rbac_spec.rb new file mode 100644 index 0000000..45ea4a9 --- /dev/null +++ b/spec/api/v2/auth/rbac_spec.rb @@ -0,0 +1,144 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe '/api/v2/auth functionality test' do + include_context 'geoip mock' + + let(:do_protected_request) { get '/api/v2/auth/api/v2/resource/users/me' } + + describe 'testing rbac workability' do + before(:example) do + Thread.list.last.kill if Thread.list.last.to_s.include?('activity') + end + let!(:create_permissions) do + Permission.create(role: 'superadmin', action: 'ACCEPT', verb: 'get', path: 'api/v2/admin/users/list') + Rails.cache.delete('permissions') + @admin = User.create(email: 'superadmin@admin.io', password: 'Tecohvi0', role: 'superadmin', state: 'active') + end + + context 'with cookies' do + let(:do_create_session_request_superadm) { post '/api/v2/identity/sessions', params: { email: 'superadmin@admin.io', password: 'Tecohvi0' }} + + context 'not enough permissions' do + it 'denies access for user with missing cookies' do + do_protected_request + expect(response.status).to eq(401) + expect(response.body).to eq("{\"errors\":[\"authz.invalid_session\"]}") + end + + it 'denies access for non-accountant user with valid cookies trying to GET accountant api' do + do_create_session_request_superadm + + get '/api/v2/auth/api/v2/accountant/documents' + + expect(response.status).to eq(401) + expect(response.body).to eq("{\"errors\":[\"authz.invalid_permission\"]}") + expect(response.headers['Authorization']).to be_nil + end + + it 'denies POST for endpoint but allowing GET for admin user according to permissions' do + do_create_session_request_superadm + + post '/api/v2/auth/api/v2/admin/users/list' + expect(response.status).to eq(401) + expect(response.body).to eq("{\"errors\":[\"authz.invalid_permission\"]}") + expect(response.headers['Authorization']).to be_nil + + get '/api/v2/auth/api/v2/admin/users/list' + expect(response.status).to eq(200) + expect(response.headers['Authorization']).not_to be_nil + expect(response.headers['Authorization']).to include "Bearer" + end + + it 'denies access because of the typo in the path' do + do_create_session_request_superadm + get '/api/v2/auth/api/v2/admon/users/list' + expect(response.status).to eq(401) + expect(response.body).to eq("{\"errors\":[\"authz.invalid_permission\"]}") + end + end + + context 'enough permissions' do + it 'allowes access with for user with valid cookies, verb, role and path' do + do_create_session_request_superadm + + get '/api/v2/auth/api/v2/admin/users/list' + expect(response.status).to eq(200) + expect(response.headers['Authorization']).not_to be_nil + expect(response.headers['Authorization']).to include "Bearer" + end + end + end + + context 'with api_keys' do + let!(:admin_api_key) { create :api_key, key_holder_account: @admin } + let(:nonce) { (Time.now.to_f * 1000).to_i } + let(:secret) { admin_api_key.secret } + let(:signature) { OpenSSL::HMAC.hexdigest('SHA256', secret, nonce.to_s + admin_api_key.kid ) } + let!(:turn_on_2fa) { @admin.update(otp: true) } + + context 'with valid api key headers' do + context 'enough permissions' do + it 'allowes access with for api key owner for valid verb, owner role and path' do + allow(TOTPService).to receive(:validate?) + .with(@admin.uid, '1357') { true } + + get '/api/v2/auth/api/v2/admin/users/list', headers: { + 'X-Auth-Apikey' => admin_api_key.kid, + 'X-Auth-Nonce' => nonce, + 'X-Auth-Signature' => signature + } + expect(response.status).to eq(200) + + expect(response.headers['Authorization']).not_to be_nil + expect(response.headers['Authorization']).to include "Bearer" + end + end + + context 'not enough permissions' do + it 'denies access for non-accountant api key owner with valid api_key trying to POST accountant api' do + allow(TOTPService).to receive(:validate?) + .with(@admin.uid, '1357') { true } + allow(SecretStorage).to receive(:get_secret) + .with(admin_api_key.kid) { Vault::Secret.new(data: { value: secret }) } + + post '/api/v2/auth/api/v2/accountant/documents', headers: { + 'X-Auth-Apikey' => admin_api_key.kid, + 'X-Auth-Nonce' => nonce, + 'X-Auth-Signature' => signature + } + expect(response.status).to eq(401) + expect(response.body).to eq("{\"errors\":[\"authz.invalid_permission\"]}") + end + + it 'denies POST for endpoint but allowing GET for api key owner according to permissions' do + allow(TOTPService).to receive(:validate?) + .with(@admin.uid, '1357') { true } + allow(SecretStorage).to receive(:get_secret) + .with(admin_api_key.kid) { Vault::Secret.new(data: { value: secret }) } + + post '/api/v2/auth/api/v2/accountant/documents', headers: { + 'X-Auth-Apikey' => admin_api_key.kid, + 'X-Auth-Nonce' => nonce, + 'X-Auth-Signature' => signature + } + Rails.cache.delete(admin_api_key.kid) + expect(response.status).to eq(401) + expect(response.body).to eq("{\"errors\":[\"authz.invalid_permission\"]}") + + get '/api/v2/auth/api/v2/admin/users/list', headers: { + 'X-Auth-Apikey' => admin_api_key.kid, + 'X-Auth-Nonce' => nonce, + 'X-Auth-Signature' => signature + } + + expect(response.status).to eq(200) + expect(response.headers['Authorization']).not_to be_nil + expect(response.headers['Authorization']).to include "Bearer" + end + end + end + end + end +end diff --git a/spec/api/v2/auth/restriction_spec.rb b/spec/api/v2/auth/restriction_spec.rb new file mode 100644 index 0000000..fadf814 --- /dev/null +++ b/spec/api/v2/auth/restriction_spec.rb @@ -0,0 +1,196 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe '/api/v2/auth functionality test' do + include_context 'geoip mock' + + let(:uri) { '/api/v2/identity/sessions' } + let!(:create_permissions) do + create :permission, role: 'member', action: 'ACCEPT', verb: 'all', path: 'tasty_endpoint' + Rails.cache.delete('permissions') + end + let!(:user) { create(:user) } + let(:params) do + { + email: user.email, + password: user.password + } + end + let(:do_create_session_request) { post uri, params: params } + let(:auth_request) { '/api/v2/auth/tasty_endpoint' } + let(:auth_session_create_request) { '/api/v2/auth/api/v2/barong/identity/sessions' } + + + describe 'test blocklogin restriction' do + before do + allow(Rails.cache).to receive(:delete_matched).and_return(nil) + Rails.cache.delete('restrictions') + end + + context 'block session creation' do + let!(:restriction) { create(:restriction, value: 'EUROPE', scope: 'continent', category: 'blocklogin', code: 425) } + before do + allow_any_instance_of(Barong::Authorize).to receive(:validate_session!).and_return(true) + allow_any_instance_of(ActionDispatch::Request).to receive(:remote_ip).and_return(london_ip) + end + + it do + post auth_session_create_request, params: params + expect(response.status).to eq(restriction.code) + end + + it do + do_create_session_request # This request will be successful because path doesn't include 'api/v2/auth' + get auth_request + expect(response.status).to eq(200) + end + end + end + describe 'test blacklist restrictions' do + before do + allow_any_instance_of(Barong::Authorize).to receive(:validate_session!).and_return(true) + Rails.cache.delete('restrictions') + do_create_session_request + end + + context 'restrict by ip' do + let!(:restriction) { create(:restriction, value: '192.168.0.1', scope: 'ip', category: 'blacklist') } + let!(:disabled) { create(:restriction, value: '192.168.0.3', scope: 'ip', state: 'disabled', category: 'blacklist') } + + it 'request with restricted ip' do + allow_any_instance_of(ActionDispatch::Request).to receive(:remote_ip).and_return('192.168.0.1') + get auth_request + + expect(response.status).to eq(401) + expect(response.headers['Authorization']).to be_nil + end + + it 'request with non-restricted ip' do + allow_any_instance_of(ActionDispatch::Request).to receive(:remote_ip).and_return('192.168.0.2') + get auth_request + expect(response.status).to eq(200) + end + + it 'request with disabled restriction' do + allow_any_instance_of(ActionDispatch::Request).to receive(:remote_ip).and_return('192.168.0.3') + get auth_request + expect(response.status).to eq(200) + end + end + + context 'restricts with ip subnet' do + let!(:restriction) { create(:restriction, value: '192.168.32.0/24', scope: 'ip_subnet', category: 'blacklist') } + + it 'request with restricted ip' do + allow_any_instance_of(ActionDispatch::Request).to receive(:remote_ip).and_return('192.168.32.42') + get auth_request + + expect(response.status).to eq(403) + expect(response.headers['Authorization']).to be_nil + expect(response.body).to eq("{\"errors\":[\"authz.restrict.blacklist\"]}") + end + + it 'request with non-restricted ip' do + allow_any_instance_of(ActionDispatch::Request).to receive(:remote_ip).and_return('192.168.33.3') + get auth_request + + expect(response.status).to eq(200) + end + end + + context 'geoip' do + context 'restricts with country' do + let!(:restriction) { create(:restriction, value: 'japan', scope: 'country', category: 'blacklist') } + + it 'with restricted ip' do + allow_any_instance_of(ActionDispatch::Request).to receive(:remote_ip).and_return(tokyo_ip) + get auth_request + expect(response.status).to eq(423) + expect(response.headers['Authorization']).to be_nil + expect(response.body).to eq("{\"errors\":[\"authz.restrict.blacklist\"]}") + end + + it 'with non-restricted ip' do + allow_any_instance_of(ActionDispatch::Request).to receive(:remote_ip).and_return(london_ip) + get auth_request + expect(response.status).to eq(200) + end + end + + context 'restricts with continent' do + let!(:restriction) { create(:restriction, value: 'EUROPE', scope: 'continent', category: 'blacklist') } + + it 'with restricted ip' do + allow_any_instance_of(ActionDispatch::Request).to receive(:remote_ip).and_return(london_ip) + get auth_request + expect(response.status).to eq(423) + expect(response.headers['Authorization']).to be_nil + expect(response.body).to eq("{\"errors\":[\"authz.restrict.blacklist\"]}") + end + + it 'with non-restricted ip' do + allow_any_instance_of(ActionDispatch::Request).to receive(:remote_ip).and_return(tokyo_ip) + get auth_request + expect(response.status).to eq(200) + end + end + end + end + + describe 'test restriction ierarchy' do + before do + allow_any_instance_of(Barong::Authorize).to receive(:validate_session!).and_return(true) + Rails.cache.delete('restrictions') + do_create_session_request + allow_any_instance_of(ActionDispatch::Request).to receive(:remote_ip).and_return('192.168.0.1') + end + + context 'whitelist -> maintenance' do + let!(:maintenance_restriction) { create(:restriction, value: '192.168.0.1', scope: 'ip', category: 'maintenance') } + let!(:whitelist_restriction) { create(:restriction, value: '192.168.0.1', scope: 'ip', category: 'whitelist') } + + it '200' do + get auth_request + + expect(response.status).to eq(200) + end + end + + + context 'maintenance -> blacklist' do + let!(:blacklist_restriction) { create(:restriction, value: '192.168.0.1', scope: 'ip', category: 'blacklist') } + let!(:maintenance_restriction) { create(:restriction, value: '192.168.0.1', scope: 'ip', category: 'maintenance') } + + context 'standard code error' do + it '471' do + get auth_request + + expect(response.status).to eq(471) + end + end + end + + context 'blacklist' do + context 'standard code error' do + let!(:blacklist_restriction) { create(:restriction, value: '192.168.0.1', scope: 'ip', category: 'blacklist') } + + it '401' do + get auth_request + + expect(response.status).to eq(401) + end + end + + context 'custom code error' do + let!(:blacklist_restriction) { create(:restriction, value: '192.168.0.1', scope: 'ip', category: 'blacklist', code: 403) } + + it '403' do + get auth_request + + expect(response.status).to eq(403) + end + end + end + end +end diff --git a/spec/api/v2/auth/sessions_spec.rb b/spec/api/v2/auth/sessions_spec.rb new file mode 100644 index 0000000..cc99bd8 --- /dev/null +++ b/spec/api/v2/auth/sessions_spec.rb @@ -0,0 +1,158 @@ +# frozen_string_literal: true + +require 'spec_helper' +include ActiveSupport::Testing::TimeHelpers + +describe '/api/v2/auth functionality test' do + include_context 'geoip mock' + + let(:session_expire_time) do + Barong::App.config.session_expire_time.to_i.seconds + end + let!(:create_permissions) do + create :permission, role: 'admin' + create :permission, role: 'member', action: 'ACCEPT', verb: 'all', path: 'not_in_the_rules_path' + create :permission, role: 'member', action: 'ACCEPT', verb: 'get', path: '/api/v2/resource/users/me' + create :permission, role: 'accountant' + end + let!(:user) { create(:user) } + let(:params) do + { + email: user.email, + password: user.password + } + end + + let(:do_destroy_session_request) { delete '/api/v2/identity/sessions', headers: { 'HTTP_USER_AGENT': 'legacy-browser' } } + let(:do_create_session_request) { post '/api/v2/identity/sessions', params: params, headers: { 'HTTP_USER_AGENT': 'legacy-browser' } } + let(:auth_request) { '/api/v2/auth/not_in_the_rules_path' } + + describe 'testing session hash validations' do + before do + Rails.cache.delete('permissions') + end + + context 'with valid ip, browser' do + it 'authorize traffic' do + do_create_session_request + expect(response.status).to eq(200) + post auth_request, headers: { 'HTTP_USER_AGENT': 'legacy-browser' } + + expect(response.status).to eq(200) + expect(response.headers['Authorization']).not_to be_nil + expect(response.headers['Authorization']).to include "Bearer" + end + end + + context 'when session params has changed after session opening' do + it 'return error if USER_AGENT changes' do + do_create_session_request + expect(response.status).to eq(200) + + post auth_request, headers: { 'HTTP_USER_AGENT': 'new-browser' } + expect(response.status).to eq(401) + expect(response.headers['Authorization']).to be_nil + end + + it 'return error if IP changes' do + do_create_session_request + expect(response.status).to eq(200) + + post auth_request, headers: { 'REMOTE_ADDR': '128.0.0.12' } + expect(response.status).to eq(401) + expect(response.headers['Authorization']).to be_nil + end + + it 'return error if everything changes' do + do_create_session_request + expect(response.status).to eq(200) + + post auth_request, headers: { 'REMOTE_ADDR': '128.0.0.12', 'HTTP_USER_AGENT': 'new-browser' } + expect(response.status).to eq(401) + expect(response.headers['Authorization']).to be_nil + end + end + end + + describe 'testing session renewal' do + before do + Rails.cache.delete('permissions') + end + + context 'with valid session' do + it 'authorize traffic and renew session every request' do + do_create_session_request + expect(response.status).to eq(200) + + post auth_request, headers: { 'HTTP_USER_AGENT': 'legacy-browser' } + + expect(response.status).to eq(200) + expect(response.headers['Authorization']).not_to be_nil + expect(response.headers['Authorization']).to include "Bearer" + start_time = Time.current + + 30.times do + # 5 minute before session will expire + travel session_expire_time - 5.minutes + + # renew session with private request + post auth_request, headers: { 'HTTP_USER_AGENT': 'legacy-browser' } + + expect(response.status).to eq(200) + expect(response.headers['Authorization']).not_to be_nil + expect(response.headers['Authorization']).to include "Bearer" + end + + expect(Time.current).to be > (start_time + session_expire_time) + + travel session_expire_time + 10.minutes + post auth_request, headers: { 'HTTP_USER_AGENT': 'legacy-browser' } + expect(response.status).to eq(401) + end + end + end + + describe 'testing session destroy' do + before do + Rails.cache.delete('permissions') + end + + context 'with valid session' do + it 'deletes session from cache on #logout' do + do_create_session_request + expect(response.status).to eq(200) + + post auth_request, headers: { 'HTTP_USER_AGENT': 'legacy-browser' } + + expect(response.status).to eq(200) + expect(response.headers['Authorization']).not_to be_nil + expect(response.headers['Authorization']).to include "Bearer" + + do_destroy_session_request + expect(response.status).to eq(200) + + post auth_request, headers: { 'HTTP_USER_AGENT': 'legacy-browser' } + expect(response.status).to eq(401) + end + end + + context 'with invalid session params' do + it 'deletes session from cache on auth if params is wrong' do + do_create_session_request + expect(response.status).to eq(200) + + post auth_request, headers: { 'HTTP_USER_AGENT': 'legacy-browser' } + + expect(response.status).to eq(200) + expect(response.headers['Authorization']).not_to be_nil + expect(response.headers['Authorization']).to include "Bearer" + + post auth_request, headers: { 'HTTP_USER_AGENT': 'new-browser' } + expect(response.status).to eq(401) + + post auth_request, headers: { 'HTTP_USER_AGENT': 'legacy-browser' } + expect(response.status).to eq(401) + end + end + end +end diff --git a/spec/api/v2/cors/cors_spec.rb b/spec/api/v2/cors/cors_spec.rb new file mode 100644 index 0000000..95caa51 --- /dev/null +++ b/spec/api/v2/cors/cors_spec.rb @@ -0,0 +1,141 @@ +# encoding: UTF-8 +# frozen_string_literal: true + +require 'rack/cors' +require 'env-tweaks' + +describe Rack::Cors, type: :request do + include_context 'bearer authentication' + let!(:create_member_permission) do + create :permission, + role: 'member' + end + let(:member) { create(:member, :level_3) } + let(:frontend_url) { 'https://frontend.io' } + let(:local_url) { 'http://localhost:3000' } + let(:token) { jwt_for(member) } + + let(:app) { + Rack::Builder.new do + use Rack::Cors do + allow do + origins Barong::CORS::Validations.validate_origins(ENV['API_CORS_ORIGINS']) + resource '/api/*', + methods: %i[get post delete put patch options head], + headers: :any, + credentials: ENV.true?('API_CORS_ALLOW_CREDENTIALS'), + max_age: Barong::CORS::Validations.validate_max_age(ENV['API_CORS_MAX_AGE']) + end + end + run Rails.application + end + } + + def check_cors(response, origin, allow_crendentails, max_age = '3600') + expect(response.headers['Access-Control-Allow-Origin']).to eq(origin) + expect(response.headers['Access-Control-Allow-Methods']).to eq('GET, POST, DELETE, PUT, PATCH, OPTIONS, HEAD') + expect(response.headers['Access-Control-Allow-Credentials']).to eq(allow_crendentails) + expect(response.headers['Access-Control-Max-Age']).to eq(max_age) + end + + def without_cors(response) + expect(response.headers['Access-Control-Allow-Origin']).to eq(nil) + expect(response.headers['Access-Control-Allow-Methods']).to eq(nil) + expect(response.headers['Access-Control-Allow-Credentials']).to eq(nil) + expect(response.headers['Access-Control-Max-Age']).to eq(nil) + end + + context 'set API_CORS_ORIGINS as "*"' do + let(:origin) { '*' } + let(:allow_crendentails) { nil } + let(:max_age) { '3600' } + + before do + ENV['API_CORS_ORIGINS'] = origin + ENV['API_CORS_ALLOW_CREDENTIALS'] = allow_crendentails + ENV['API_CORS_MAX_AGE'] = max_age + end + + after do + ENV['API_CORS_ORIGINS'] = nil + ENV['API_CORS_ALLOW_CREDENTIALS'] = nil + ENV['API_CORS_MAX_AGE'] = nil + end + + it 'sends CORS headers when requesting using GET from frontend url' do + get '/api/v2/identity/ping', headers: { 'origin' => frontend_url } + expect(response).to be_successful + check_cors(response, '*', allow_crendentails, max_age) + end + + it 'sends CORS headers when requesting using GET from localhost' do + get '/api/v2/identity/ping', headers: { 'origin' => local_url } + expect(response).to be_successful + check_cors(response, '*', allow_crendentails, max_age) + end + end + + context 'set multiple API_CORS_ORIGINS for frontend and localhost' do + let(:allow_crendentails) { 'true' } + let(:max_age) { '6200' } + + before do + ENV['API_CORS_ORIGINS'] = "#{frontend_url},#{local_url}" + ENV['API_CORS_ALLOW_CREDENTIALS'] = allow_crendentails + ENV['API_CORS_MAX_AGE'] = max_age + end + + after do + ENV['API_CORS_ORIGINS'] = nil + ENV['API_CORS_ALLOW_CREDENTIALS'] = nil + ENV['API_CORS_MAX_AGE'] = nil + end + + it 'sends CORS headers when requesting using GET from frontend url' do + get '/api/v2/identity/ping', headers: { 'Origin' => frontend_url } + expect(response).to be_successful + check_cors(response, frontend_url, allow_crendentails, max_age) + end + + it 'sends CORS headers when requesting using GET from localhost' do + get '/api/v2/identity/ping', headers: { 'Origin' => local_url } + expect(response).to be_successful + check_cors(response, local_url, allow_crendentails, max_age) + end + + it 'doesn\'t sends CORS headers when requesting using GET from unkown domain' do + get '/api/v2/identity/ping', headers: { 'Origin' => 'http://domain.com' } + expect(response).to be_successful + without_cors(response) + end + end + + context 'send invalid request' do + let(:allow_crendentails) { 'true' } + let(:max_age) { '3600' } + + before do + ENV['API_CORS_ORIGINS'] = "#{frontend_url},#{local_url}" + ENV['API_CORS_ALLOW_CREDENTIALS'] = allow_crendentails + ENV['API_CORS_MAX_AGE'] = max_age + end + + after do + ENV['API_CORS_ORIGINS'] = nil + ENV['API_CORS_ALLOW_CREDENTIALS'] = nil + ENV['API_CORS_MAX_AGE'] = nil + end + + it 'sends CORS headers ever when user is not authenticated' do + get '/api/v2/resource/users/me', headers: { 'Origin' => local_url } + expect(response).to have_http_status 401 + check_cors(response, local_url, allow_crendentails) + end + + it 'sends CORS headers when invalid parameter supplied' do + get '/api/v2/resource/users/activity/topic', headers: auth_header.merge!('Origin' => local_url ) + expect(response).to have_http_status 422 + check_cors(response, local_url, allow_crendentails) + end + end +end diff --git a/spec/api/v2/cors/validations_spec.rb b/spec/api/v2/cors/validations_spec.rb new file mode 100644 index 0000000..2f40789 --- /dev/null +++ b/spec/api/v2/cors/validations_spec.rb @@ -0,0 +1,82 @@ +# encoding: UTF-8 +# frozen_string_literal: true + +describe Barong::CORS::Validations do + describe 'validate origins' do + subject { Barong::CORS::Validations.validate_origins(ENV['API_CORS_ORIGINS']) } + + context 'set API_CORS_ORIGINS as "*"' do + before do + ENV['API_CORS_ORIGINS'] = '*' + end + + it do + is_expected.to eq('*') + end + end + + context 'set mulitple API_CORS_ORIGINS with "*"' do + before do + ENV['API_CORS_ORIGINS'] = 'https://localhost,*,https://domain.com' + end + + it do + is_expected.to eq('*') + end + end + + context 'set multiple API_CORS_ORIGINS' do + before do + ENV['API_CORS_ORIGINS'] = 'https://localhost,https://domain.com' + end + + it do + is_expected.to eq(['https://localhost','https://domain.com']) + end + end + + context 'set invalid domain into API_CORS_ORIGINS' do + before do + ENV['API_CORS_ORIGINS'] = 'htt:://localhost' + end + + it do + expect { subject }.to raise_error(Barong::CORS::Validations::Error) + end + end + end + + describe 'validate max age' do + subject { Barong::CORS::Validations.validate_max_age(ENV['API_CORS_MAX_AGE']) } + + context 'set API_CORS_MAX_AGE as "6200"' do + before do + ENV['API_CORS_MAX_AGE'] = '6200' + end + + it do + is_expected.to eq('6200') + end + end + + context 'set API_CORS_MAX_AGE as "6200.1"' do + before do + ENV['API_CORS_MAX_AGE'] = '6200.1' + end + + it do + is_expected.to eq('3600') + end + end + + context 'doesn\'t set API_CORS_MAX_AGE"' do + before do + ENV['API_CORS_MAX_AGE'] = nil + end + + it do + is_expected.to eq('3600') + end + end + end +end diff --git a/spec/api/v2/entities/activities_spec.rb b/spec/api/v2/entities/activities_spec.rb new file mode 100644 index 0000000..3b94f9b --- /dev/null +++ b/spec/api/v2/entities/activities_spec.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +describe API::V2::Entities::Activity do + let!(:create_member_permission) do + create :permission, + role: 'member' + end + let(:record) { create(:activity, topic: 'otp', result: 'succeed', action: 'login') } + + subject { OpenStruct.new API::V2::Entities::Activity.represent(record).serializable_hash } + + it { expect(subject.topic).to eq record.topic } + it { expect(subject.result).to eq record.result } + it { expect(subject.user_ip).to eq record.user_ip } + it { expect(subject.action).to eq record.action } + it { expect(subject.data).to eq record.data } + it { expect(subject.user_agent).to eq record.user_agent } + + it { expect(subject.created_at).to eq record.created_at.iso8601 } +end diff --git a/spec/api/v2/entities/labels_spec.rb b/spec/api/v2/entities/labels_spec.rb new file mode 100644 index 0000000..01072ba --- /dev/null +++ b/spec/api/v2/entities/labels_spec.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +describe API::V2::Entities::Label do + let!(:create_member_permission) do + create :permission, + role: 'member' + end + let(:record) { create(:label) } + + subject { OpenStruct.new API::V2::Entities::Label.represent(record).serializable_hash } + + it { expect(subject.key).to eq record.key } + it { expect(subject.value).to eq record.value } + it { expect(subject.scope).to eq record.scope } + it { expect(subject.created_at).to eq record.created_at.iso8601 } + it { expect(subject.updated_at).to eq record.updated_at&.iso8601 } +end diff --git a/spec/api/v2/entities/user_with_full_spec.rb b/spec/api/v2/entities/user_with_full_spec.rb new file mode 100644 index 0000000..5a2584d --- /dev/null +++ b/spec/api/v2/entities/user_with_full_spec.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +describe API::V2::Entities::UserWithKYC do + let!(:create_member_permission) do + create :permission, + role: 'member' + end + let(:record) { create(:user) } + + subject { OpenStruct.new API::V2::Entities::UserWithKYC.represent(record).serializable_hash } + + it { expect(subject.email).to eq record.email } + it { expect(subject.uid).to eq record.uid } + it { expect(subject.role).to eq record.role } + it { expect(subject.level).to eq record.level } + it { expect(subject.otp).to eq record.otp } + it { expect(subject.state).to eq record.state } + it { expect(subject.profiles).to eq record.profiles } + it { expect(subject.labels).to eq record.labels } + it { expect(subject.phones).to eq record.phones } + it { expect(subject.documents).to eq record.documents } + it { expect(subject.to_h.keys).not_to include(:activities) } + + it { expect(subject.created_at).to eq record.created_at.iso8601 } + it { expect(subject.updated_at).to eq record.updated_at&.iso8601 } +end + diff --git a/spec/api/v2/identity/general_spec.rb b/spec/api/v2/identity/general_spec.rb new file mode 100644 index 0000000..49574f0 --- /dev/null +++ b/spec/api/v2/identity/general_spec.rb @@ -0,0 +1,41 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe API::V2::Identity::General do + describe 'GET /api/v2/identity/time' do + it 'returns a server status' do + get '/api/v2/identity/ping' + expect_status_to_eq(200) + expect(json_body[:ping]).to eq('pong') + end + end + + describe 'GET /api/v2/identity/time' do + it 'returns a current UNIX time' do + get '/api/v2/identity/time' + expect_status_to_eq(200) + expect(json_body[:time].to_i).to be <= Time.now.to_i + end + end + + describe 'GET /api/v2/identity/configs' do + it 'returns some of the configurations' do + get '/api/v2/identity/configs' + expect_status_to_eq(200) + expect(json_body[:session_expire_time]).to eq(Barong::App.config.session_expire_time) + expect(json_body[:captcha_type]).to eq(Barong::App.config.captcha) + expect(json_body[:phone_verification_type]).to eq(Barong::App.config.phone_verification) + end + + it 'returns all of the configurations with defaults' do + get '/api/v2/identity/configs' + expect_status_to_eq(200) + expect(json_body[:session_expire_time]).to eq(Barong::App.config.session_expire_time) + expect(json_body[:captcha_type]).to eq(Barong::App.config.captcha) + expect(json_body[:phone_verification_type]).to eq(Barong::App.config.phone_verification) + expect(json_body[:password_min_entropy]).to eq(Barong::App.config.password_min_entropy) + expect(json_body[:password_regexp]).to eq(Barong::App.config.password_regexp.to_s) + end + end +end diff --git a/spec/api/v2/identity/sessions_spec.rb b/spec/api/v2/identity/sessions_spec.rb new file mode 100644 index 0000000..ba9fb29 --- /dev/null +++ b/spec/api/v2/identity/sessions_spec.rb @@ -0,0 +1,462 @@ +# frozen_string_literal: true + +describe API::V2::Identity::Sessions do + include_context 'geoip mock' + + include ActiveSupport::Testing::TimeHelpers + let!(:create_member_permission) do + create :permission, + role: 'member', + verb: 'all' + end + before do + Rails.cache.delete('permissions') + allow(Barong::App.config).to receive_messages(captcha: 'recaptcha') + end + + describe 'POST /api/v2/identity/sessions' do + before { allow(Barong::App.config).to receive_messages(captcha: 'none') } + + let!(:email) { 'user@gmail.com' } + let!(:password) { 'testPassword111' } + let(:uri) { '/api/v2/identity/sessions' } + subject!(:user) do + create :user, + :with_profile, + email: email, + password: password, + password_confirmation: password + end + let(:otp_enabled) { false } + + context 'With valid params' do + let(:do_request) { post uri, params: params } + let(:session_expire_time) do + Barong::App.config.session_expire_time + end + let(:check_session) do + get '/api/v2/auth/api/v2/tasty_endpoint' + end + let(:params) do + { + email: email, + password: password + } + end + + context 'captcha behaviour when captcha policy is recaptcha' do + before { allow(Barong::App.config).to receive_messages(captcha: 'recaptcha') } + + it 'doesnt require captcha if endpoint is not in the protection list' do + allow(BarongConfig).to receive(:list).and_return({"captcha_protected_endpoints"=>["user_create"]}) + do_request + + expect_status_to_eq 200 + result = JSON.parse(response.body) + expect(result['profiles'][0]['last_name']).to eq user.profiles.first.sub_masked_last_name + expect(result['profiles'][0]['dob']).to eq user.profiles.first.sub_masked_dob + end + + it 'require captcha if endpoint is in the protection list' do + allow(BarongConfig).to receive(:list).and_return({"captcha_protected_endpoints"=>["user_create", "session_create"]}) + + do_request + expect_status_to_eq 400 + expect_body.to eq(errors: ["identity.captcha.required"]) + end + end + + it 'Check current credentials and returns session' do + do_request + + expect(session.instance_variable_get(:@delegate)[:uid]).to eq(user.uid) + expect_status.to eq(200) + result = JSON.parse(response.body) + expect(result['profiles'][0]['last_name']).to eq user.profiles.first.sub_masked_last_name + expect(result['profiles'][0]['dob']).to eq user.profiles.first.sub_masked_dob + + check_session + expect(response.status).to eq(200) + end + + it 'Expires a session after configured time' do + do_request + travel session_expire_time + 30.minutes + check_session + expect(response.status).to eq(401) + end + + let(:captcha_response) { nil } + let(:valid_response) { 'valid' } + let(:invalid_response) { 'invalid' } + + before do + allow_any_instance_of(CaptchaService::RecaptchaVerifier).to receive(:verify_recaptcha) + .with(model: user, + skip_remote_ip: true, + response: valid_response) { true } + + allow_any_instance_of(CaptchaService::RecaptchaVerifier).to receive(:verify_recaptcha) + .with(model: user, + skip_remote_ip: true, + response: invalid_response) { raise StandardError } + end + + context 'when captcha response is blank' do + let(:params) do + { + email: email, + password: password, + captcha_response: captcha_response + } + end + end + + context 'when captcha response is not valid' do + let(:params) do + { + email: email, + password: password, + captcha_response: invalid_response + } + end + + before do + expect_any_instance_of(CaptchaService::RecaptchaVerifier).to receive(:verify_recaptcha) { false } + end + + it 'renders an error' do + allow(Barong::App.config).to receive_messages(captcha: 'recaptcha') + do_request + expect(json_body[:errors]).to eq(["identity.captcha.verification_failed"]) + expect_status_to_eq 422 + end + end + + context 'when captcha response is valid' do + let(:params) do + { + email: email, + password: password, + captcha_response: valid_response + } + end + + before do + expect_any_instance_of(CaptchaService::RecaptchaVerifier).to receive(:verify_recaptcha) { true } + end + end + end + + context 'With Invalid params' do + context 'Checks current credentials and returns error' do + it 'when email, password is missing' do + post uri + expect_body.to eq(errors: ["identity.session.missing_email", "identity.session.missing_password"]) + expect(response.status).to eq(422) + end + + it 'when password is missing' do + post uri, params: { email: email } + expect_body.to eq(errors: ["identity.session.missing_password"]) + expect(response.status).to eq(422) + end + + it 'when email is missing' do + post uri, params: { password: password } + expect_body.to eq(errors: ["identity.session.missing_email"]) + expect(response.status).to eq(422) + end + + it 'when email is blank' do + post uri, params: { email: '',password: password } + expect_body.to eq(errors: ["identity.session.invalid_params"]) + expect(response.status).to eq(401) + end + + it 'when password is blank' do + post uri, params: { email: email, password: '' } + expect_body.to eq(errors: ["identity.session.invalid_params"]) + expect(response.status).to eq(401) + end + + it 'when email is space' do + post uri, params: { email: ' ',password: password } + expect_body.to eq(errors: ["identity.session.invalid_params"]) + expect(response.status).to eq(401) + end + + it 'when password is space' do + post uri, params: { email: email, password: ' ' } + expect_body.to eq(errors: ["identity.session.invalid_params"]) + expect(response.status).to eq(401) + end + + context 'when Password is wrong' do + it 'returns errror' do + post uri, params: { email: email, password: 'password' } + expect_body.to eq(errors: ["identity.session.invalid_params"]) + expect(response.status).to eq(401) + end + end + end + end + + context 'User state related errors' do + context 'When user is banned' do + let!(:banned_email) { 'email@random.com' } + let!(:user_banned) do + create :user, + email: banned_email, + password: password, + password_confirmation: password, + state: 'banned' + end + + it 'returns error on banned user' do + post uri, params: { email: banned_email, password: password } + expect_body.to eq(errors: ["identity.session.banned"]) + expect(response.status).to eq(401) + end + end + + let!(:pending_email) { 'pendingemail@random.com' } + let!(:user_pending) do + create :user, + email: pending_email, + password: password, + password_confirmation: password, + state: 'pending' + end + + context 'Allow pending user to login by default' do + it 'returns error on non-active user' do + user_pending.update(state: 'not-active') + post uri, params: { email: pending_email, password: password } + expect_body.to eq(errors: ["identity.session.not_active"]) + expect(response.status).to eq(401) + end + + it 'sucessfull login for pending user' do + user_pending.update(state: 'pending') + expect(user_pending.state).to eq('pending') + + post uri, params: { email: pending_email, password: password } + expect(response.status).to eq(200) + end + end + end + + context 'event API behavior' do + before do + allow(EventAPI).to receive(:notify) + end + + it 'receive system.session.create notify' do + allow_any_instance_of(API::V2::Utils).to receive(:remote_ip).and_return('192.168.0.1') + post uri, params: { email: email, password: password }, headers: { 'HTTP_USER_AGENT' => 'random-browser' } + + expect(EventAPI).to have_received(:notify).with('system.session.create', + hash_including({ record: hash_including(user: anything, user_ip: '192.168.0.1', user_agent: 'random-browser') }) + ) + end + end + end + + describe 'DELETE /api/v2/identity/sessions' do + before { allow(Barong::App.config).to receive_messages(captcha: 'none') } + + let!(:email) { 'user@gmail.com' } + let!(:password) { 'testPassword111' } + let(:uri) { '/api/v2/identity/sessions' } + let(:params) do + { + email: email, + password: password + } + end + subject!(:user) do + create :user, + email: email, + password: password, + password_confirmation: password + end + + context 'With invalid session' do + let(:do_create_session_request) { post uri, params: params } + let(:do_delete_session_request) { delete uri } + + + it 'receives 404 on delete session' do + do_delete_session_request + expect(response.status).to eq(404) + expect(response.body).to eq("{\"errors\":[\"identity.session.not_found\"]}") + end + end + + context 'With valid session' do + let(:do_create_session_request) { post uri, params: params } + let(:do_delete_session_request) { delete uri } + + it 'Deletes session' do + do_create_session_request + expect(session.instance_variable_get(:@delegate)[:uid]).to eq(user.uid) + + do_delete_session_request + expect(session.instance_variable_get(:@delegate)[:uid]).to eq(nil) + end + + it "return invalid set-cookie header on #logout" do + do_create_session_request + expect(session.instance_variable_get(:@delegate)[:uid]).to eq(user.uid) + + do_delete_session_request + expect(response.status).to eq(200) + expect(response.headers['Set-Cookie']).not_to be_nil + expect(response.headers['Set-Cookie']).to include "barong_session" + end + end + end + + # describe 'POST /api/v2/indentity/sessions/auth0' do + # let(:uri) { '/api/v2/identity/sessions/auth0' } + # + # context 'user doesnt exist' do + # context 'email verified' do + # let(:payload) do + # [ + # { + # 'email': 'example@barong.io', + # 'email_verified': true, + # 'iss': 'https://domain.name/', + # 'sub': 'google-oauth2|100484476630231723', + # 'aud': 'test audience', + # 'iat': Time.now.to_i, + # 'exp': (Time.now + 5.minutes).to_i + # }.with_indifferent_access, + # { + # 'alg': 'RS256', + # 'typ': 'JWT', + # 'kid': 'ptd2123vE-G12GoDvJ8MQ' + # } + # ] + # end + # + # before do + # allow(Barong::Auth0::JWT).to receive(:verify).and_return(payload) + # end + # + # it 'create user and label' do + # expect(User.find_by(email: 'example@barong.io')).to eq nil + # post uri, params: { id_token: 'TestToken' } + # + # expect(response.status).to eq(201) + # result = JSON.parse(response.body) + # user = User.find_by(email: result['email']) + # expect(user).not_to be nil + # expect(user.level).to eq 1 + # expect(user.state).to eq 'active' + # expect(user.labels.count).to eq 1 + # expect(user.labels.find_by(key: 'email').value).to eq 'verified' + # end + # end + # end + # + # context 'user exists' do + # let(:payload) do + # [ + # { + # 'email': 'example@barong.io', + # 'email_verified': true, + # 'iss': 'https://domain.name/', + # 'sub': 'google-oauth2|100484476630231723', + # 'aud': 'test audience', + # 'iat': Time.now.to_i, + # 'exp': (Time.now + 5.minutes).to_i + # }.with_indifferent_access, + # { + # 'alg': 'RS256', + # 'typ': 'JWT', + # 'kid': 'ptd2123vE-G12GoDvJ8MQ' + # } + # ] + # end + # + # before do + # allow(Barong::Auth0::JWT).to receive(:verify).and_return(payload) + # end + # + # let!(:user) { create(:user, email: 'example@barong.io')} + # + # it 'returns existing user with session' do + # expect(User.find_by(email: 'example@barong.io')).not_to eq nil + # post uri, params: { id_token: 'TestToken' } + # + # expect(response.status).to eq(201) + # result = JSON.parse(response.body) + # expect(result['email']).to eq user.email + # expect(result.keys).to match_array(['email','uid','role','level','otp','state','referral_uid','csrf_token','data','labels','phones','profiles','data_storages', 'created_at', 'updated_at']) + # end + # end + # + # context 'invalid params' do + # it 'without params' do + # post uri + # expect_body.to eq(errors: ['identity.session.missing_id_token', 'identity.session.empty_id_token']) + # expect(response.status).to eq(422) + # end + # + # it 'with empty param' do + # post uri, params: { id_token: '' } + # expect_body.to eq(errors: ['identity.session.empty_id_token']) + # expect(response.status).to eq(422) + # end + # + # context 'jwt expired' do + # before do + # allow(Barong::Auth0::JWT).to receive(:verify).and_raise(JWT::ExpiredSignature) + # end + # + # it 'raise an error' do + # post uri, params: { id_token: 'TestToken' } + # expect_body.to eq(errors: ['identity.session.auth0.invalid_params']) + # expect(response.status).to eq(422) + # end + # end + # + # context 'email is not verified' do + # let(:payload) do + # [ + # { + # 'email': 'example@barong.io', + # 'email_verified': false, + # 'iss': 'https://domain.name/', + # 'sub': 'google-oauth2|100484476630231723', + # 'aud': 'test audience', + # 'iat': Time.now.to_i, + # 'exp': (Time.now + 5.minutes).to_i + # }.with_indifferent_access, + # { + # 'alg': 'RS256', + # 'typ': 'JWT', + # 'kid': 'ptd2123vE-G12GoDvJ8MQ' + # } + # ] + # end + # + # before do + # allow(Barong::Auth0::JWT).to receive(:verify).and_return(payload) + # end + # + # it 'doesnt create user and label' do + # expect(User.find_by(email: 'example@barong.io')).to eq nil + # post uri, params: { id_token: 'TestToken' } + # + # expect(User.find_by(email: 'example@barong.io')).to eq nil + # expect_body.to eq(errors: ['identity.session.auth0.invalid_params']) + # expect(response.status).to eq(401) + # end + # end + # end + # end +end diff --git a/spec/api/v2/identity/users_spec.rb b/spec/api/v2/identity/users_spec.rb new file mode 100644 index 0000000..275f1f7 --- /dev/null +++ b/spec/api/v2/identity/users_spec.rb @@ -0,0 +1,717 @@ +# frozen_string_literal: true + +require 'spec_helper' +include ActiveSupport::Testing::TimeHelpers + +describe API::V2::Identity::Users do + include_context 'geoip mock' + + before do + allow(Barong::App.config).to receive_messages(first_registration_superadmin: false) + end + + let!(:create_member_permission) do + create :permission, + role: 'member', + verb: 'all' + create :permission, + role: 'superadmin', + verb: 'all' + create :permission, + role: 'member', + verb: 'all', + path: 'tasty_endpoint' + end + + describe 'POST /api/v2/identity/users/access' do + context 'success' do + before do + allow_any_instance_of(ActionDispatch::Request).to receive(:remote_ip).and_return('192.168.0.2') + allow(Rails.cache).to receive(:read).and_return('active') + end + + it 'creates a restriction in database with my ip' do + expect { + post '/api/v2/identity/users/access', params: { whitelink_token: 'testtoken' } + }.to change { Restriction.count }.by(1) + + expect(response.status).to eq(201) + end + + it 'works only first time' do + expect { + post '/api/v2/identity/users/access', params: { whitelink_token: 'testtoken' } + }.to change { Restriction.count }.by(1) + expect(response.status).to eq(201) + + post '/api/v2/identity/users/access', params: { whitelink_token: 'testtoken' } + + expect(response.status).to eq(422) + expect(json_body[:errors]).to include "value.taken" + end + end + + context 'returns error' do + it 'if token is missing' do + post '/api/v2/identity/users/access' + + expect(response.status).to eq(422) + expect(json_body[:errors]).to include "identity.user.missing_whitelink_token" + end + + it 'if incorrect whitelink_token' do + post '/api/v2/identity/users/access', params: { whitelink_token: 'testtoken' } + + expect(response.status).to eq(422) + expect(json_body[:errors]).to include "identity.user.access.invalid_token" + end + end + end + + describe 'POST /api/v2/identity/users with default Barong::App.config.captcha' do + let(:do_request) { post '/api/v2/identity/users', params: params } + + context 'when email is invalid' do + let(:params) { { email: 'bad_format', password: 'Password1' } } + + it 'renders an error' do + do_request + expect_status_to_eq 422 + expect_body.to eq(errors: ["email.invalid", "password.weak"]) + end + end + + context 'when referral is unexist' do + let(:params) { { email: 'valid.email@gmail.com', password: 'Password1', refid: 'ID1231231231' } } + + it 'renders an error' do + do_request + expect_status_to_eq 422 + expect_body.to eq(errors: ["identity.user.referral_doesnt_exist"]) + end + end + + context 'when referral id is invalid' do + let(:params) { { email: 'valid.email@gmail.com', password: 'Password1', refid: 'UID123' } } + + it 'renders an error' do + do_request + expect_status_to_eq 422 + expect_body.to eq(errors: ["identity.user.invalid_referral_format"]) + end + end + + context 'when Password is invalid' do + let(:params) { { email: 'vadid.email@gmail.com', password: 'password' } } + + it 'renders an error' do + do_request + expect_status_to_eq 422 + expect_body.to eq(errors: ["password.requirements"]) + end + end + + context 'when email and password are absent' do + let(:params) {} + + it 'renders an error' do + do_request + expect_status_to_eq 422 + expect_body.to eq(errors: ["identity.user.missing_email", "identity.user.empty_email", "identity.user.missing_password", "identity.user.empty_password"]) + end + end + + context 'when email is blank' do + let(:params) { { email: '', password: 'zieV0Kai' } } + + it 'renders an error' do + do_request + expect_status_to_eq 422 + expect_body.to eq(errors: ["identity.user.empty_email"]) + end + end + + context 'when email is valid' do + let(:params) { { email: 'valid.email@gmail.com', password: 'eeC2BiCucxWEQ' } } + + it 'creates an account' do + do_request + expect_status_to_eq 201 + end + + context 'first user registration' do + before do + allow(Barong::App.config).to receive_messages(first_registration_superadmin: true) + end + + it 'creates superadmin user' do + post '/api/v2/identity/users', params: params + + expect(response.status).to eq(201) + + expect(json_body.keys).to match_array %i[email uid role level otp state referral_uid csrf_token data created_at updated_at labels phones profiles data_storages] + expect(json_body[:email]).to eq 'valid.email@gmail.com' + expect(json_body[:level]).to eq 1 + expect(json_body[:role]).to eq 'superadmin' + expect(json_body[:state]).to eq 'active' + expect(json_body[:labels].count).to eq 1 + expect(json_body[:labels][0][:key]).to eq 'email' + expect(json_body[:labels][0][:value]).to eq 'verified' + expect(json_body[:labels][0][:scope]).to eq 'private' + end + end + end + end + + describe 'POST /api/v2/identity/users with reCAPTCHA Barong::App.config.captcha' do + before { allow(Barong::App.config).to receive_messages(captcha: 'recaptcha') } + + + let(:do_request_with_captcha) { post '/api/v2/identity/users', params: params_with_captcha } + let(:params_with_captcha) { { email: 'vadid.email@gmail.com', password: 'eeC2BiCucxWEQ', captcha_response: 'response' } } + let(:do_request) { post '/api/v2/identity/users', params: params } + let(:params) { { email: 'vadid.email@gmail.com', password: 'eeC2BiCucxWEQ' } } + + context 'when reCAPTCHA is valid' do + + it 'creates an account' do + allow_any_instance_of(CaptchaService::RecaptchaVerifier).to receive(:verify_recaptcha) { true } + + do_request_with_captcha + expect_status_to_eq 201 + end + + it 'doesnt require captcha if endpoint is not in the protection list' do + allow(BarongConfig).to receive(:list).and_return({"captcha_protected_endpoints"=>["session_create"]}) + + do_request + expect_status_to_eq 201 + end + + it 'doesnt require captcha if protection list is empty' do + allow(BarongConfig).to receive(:list).and_return({}) + + do_request + expect_status_to_eq 201 + end + + it 'require captcha if endpoint is in the protection list' do + allow(BarongConfig).to receive(:list).and_return({"captcha_protected_endpoints"=>["user_create", "session_create"]}) + + do_request + expect_status_to_eq 400 + expect_body.to eq(errors: ["identity.captcha.required"]) + end + end + + context 'when reCAPTCHA is invalid' do + before { allow_any_instance_of(CaptchaService::RecaptchaVerifier).to receive(:verify_recaptcha) { false } } + + it 'renders an error' do + do_request_with_captcha + expect_status_to_eq 422 + expect_body.to eq(errors: ["identity.captcha.verification_failed"]) + end + end + + context 'when captcha_response is blank but Barong::App.config.captcha requires reCAPTCHA response' do + let(:params) { { email: 'vadid.email@gmail.com', password: 'eeC2BiCucxWEQ' } } + + it 'renders an error' do + do_request + expect_status_to_eq 400 + expect_body.to eq(errors: ["identity.captcha.required"]) + end + end + end + + describe 'POST /api/v2/identity/users with GeeTest Barong::App.config.captcha' do + before { allow(Barong::App.config).to receive_messages(captcha: 'geetest') } + + let(:do_request) { post '/api/v2/identity/users', params: params } + let(:params) do + { email: 'vadid.email@gmail.com', password: 'eeC2BiCucxWEQ', + captcha_response: { geetest_challenge: 'challenge', + geetest_validate: 'validate', + geetest_seccode: 'seccode' } } + end + + context 'when GeeTest is valid' do + before { allow_any_instance_of(CaptchaService::GeetestVerifier).to receive(:validate) { true } } + + it 'creates an account' do + do_request + expect_status_to_eq 201 + end + end + + context 'when GeeTest is invalid' do + before { allow_any_instance_of(CaptchaService::GeetestVerifier).to receive(:validate) { false } } + + it 'renders an error' do + do_request + expect_status_to_eq 422 + expect_body.to eq(errors: ["identity.captcha.verification_failed"]) + end + end + + context 'when captcha_response is blank but Barong::App.config.captcha requires Geetest response' do + let(:params) { { email: 'vadid.email@gmail.com', password: 'eeC2BiCucxWEQ' } } + + it 'renders an error' do + do_request + expect_status_to_eq 400 + expect_body.to eq(errors: ["identity.captcha.required"]) + end + end + + context 'when captcha_response has incorrect format' do + let(:params) do + { email: 'vadid.email@gmail.com', password: 'eeC2BiCucxWEQ', + captcha_response: { empty: 'string' } } + end + + it 'renders an error' do + do_request + expect_status_to_eq 400 + expect_body.to eq(errors: ["identity.captcha.mandatory_fields"]) + end + end + end + + describe 'POST /api/v2/identity/users with data field' do + let(:do_request) { post '/api/v2/identity/users', params: params } + let(:params) do + { email: 'vadid.email@gmail.com', password: 'eeC2BiCucxWEQ', + data: data } + end + + context 'when data is not json compatible' do + let(:data) { 'phone_number: 380969999999' } + + it 'renders an error' do + do_request + expect_status_to_eq 422 + expect_body.to eq(errors: ["data.invalid_format"]) + end + end + + context 'valid data' do + let(:data) { "{\"phone_number\":\"380969999999\"}" } + + it 'creates user' do + do_request + expect_status_to_eq 201 + end + end + end + + describe 'session opening on /api/v2/identity/users' do + before do + Rails.cache.delete('permissions') + end + + let(:email) { 'valid@email.com' } + let(:do_request) { post '/api/v2/identity/users', params: params } + let(:params) { { email: email, password: 'Tecohvi0' } } + let(:session_expire_time) do + Barong::App.config.session_expire_time + end + let(:check_session) do + get '/api/v2/auth/tasty_endpoint' + end + + it 'Check current credentials and returns session' do + do_request + user = User.find_by(email: email) + + expect(user).not_to be(nil) + expect(session.instance_variable_get(:@delegate)[:uid]).to eq(user.uid) + expect_status.to eq(201) + + check_session + expect(response.status).to eq(200) + end + end + + describe 'POST /api/v2/identity/users/email/generate_code' do + before { allow(BarongConfig).to receive(:list).and_return({"captcha_protected_endpoints"=>["user_create", "session_create"]}) } + let(:params) { { email: 'invalid@email.com' } } + let(:do_request) { post '/api/v2/identity/users/email/generate_code', params: params } + + context 'when user is invalid' do + it 'doesnt render an error to prevent user enumeration' do + do_request + expect_status_to_eq 201 + end + end + + let(:params) { { email: 'valid-confirmed@email.com' } } + context 'when user is valid, email confirmed' do + it 'doesnt render an error to prevent user enumeration' do + create(:user, email: 'valid-confirmed@email.com', state: 'active') + do_request + expect_status_to_eq 201 + end + end + + context 'when user is valid' do + let(:user) { create(:user, state: 'pending') } + let(:params) { { email: user.email } } + it 'returns a success' do + do_request + expect_status_to_eq 201 + end + end + + context 'captcha behaviour when captcha policy is recaptcha' do + let(:user) { create(:user, state: 'pending') } + let(:params) { { email: user.email } } + before { allow(Barong::App.config).to receive_messages(captcha: 'recaptcha') } + + it 'doesnt require captcha if endpoint is not in the protection list' do + allow(BarongConfig).to receive(:list).and_return({"captcha_protected_endpoints"=>["user_create", "session_create"]}) + + do_request + expect_status_to_eq 201 + end + + it 'require captcha if endpoint is in the protection list' do + allow(BarongConfig).to receive(:list).and_return({"captcha_protected_endpoints"=>["user_create", "session_create", "email_confirmation"]}) + + do_request + expect_status_to_eq 400 + expect_body.to eq(errors: ["identity.captcha.required"]) + end + end + end + + describe 'session opening on /api/v2/identity/users/email/confirm_code' do + before do + Rails.cache.delete('permissions') + end + + let(:user) { create(:user, state: 'pending', email: 'valid_email@email.com') } + let(:do_request) { post '/api/v2/identity/users/email/confirm_code', params: params } + let(:params) { { token: codec.encode(sub: 'confirmation', email: user.email, uid: user.uid) } } + let(:session_expire_time) do + Barong::App.config.session_expire_time + end + let(:check_session) do + get '/api/v2/auth/tasty_endpoint' + end + + it 'Gives label email verified and opens a session' do + do_request + + expect(user).not_to be(nil) + expect(session.instance_variable_get(:@delegate)[:uid]).to eq(user.uid) + expect_status.to eq(201) + + check_session + expect(response.status).to eq(200) + end + end + + describe 'POST /api/v2/identity/users/email/confirm_code' do + let(:do_request) { post '/api/v2/identity/users/email/confirm_code', params: params } + let(:params) { {} } + + context 'when token is missing' do + it 'returns an error' do + do_request + expect_status_to_eq 422 + expect_body.to eq(errors: ["identity.user.missing_token", "identity.user.empty_token"]) + end + end + + context 'when token is invalid' do + let(:params) { { token: 'invalid token' } } + + it 'returns an error' do + do_request + expect_status_to_eq 422 + expect_body.to eq(errors: ["jwt.decode_and_verify.segments"]) + end + end + + context 'when token is valid' do + let(:user) { create(:user, :with_profile, state: 'pending', email: 'valid_email@email.com') } + let(:params) { { token: codec.encode(sub: 'confirmation', email: user.email, uid: user.uid) } } + it 'updates state to active' do + do_request + expect_status_to_eq 201 + + result = JSON.parse(response.body) + expect(result['profiles'][0]['last_name']).to eq user.profiles.first.sub_masked_last_name + expect(result['profiles'][0]['dob']).to eq user.profiles.first.sub_masked_dob + end + + it 'returns utilized on the second attempt' do + token_params = params + post '/api/v2/identity/users/email/confirm_code', params: token_params + expect_status_to_eq 201 + + result = JSON.parse(response.body) + expect(result['profiles'][0]['last_name']).to eq user.profiles.first.sub_masked_last_name + expect(result['profiles'][0]['dob']).to eq user.profiles.first.sub_masked_dob + + user.reload.update(state: 'pending') + post '/api/v2/identity/users/email/confirm_code', params: token_params + expect_status_to_eq 422 + expect_body.to eq(errors: ["identity.user.utilized_token"]) + end + + it 'returns expired error on second attempt after lifetime' do + token_params = params + post '/api/v2/identity/users/email/confirm_code', params: token_params + expect_status_to_eq 201 + + result = JSON.parse(response.body) + expect(result['profiles'][0]['last_name']).to eq user.profiles.first.sub_masked_last_name + expect(result['profiles'][0]['dob']).to eq user.profiles.first.sub_masked_dob + + user.reload.update(state: 'pending') + travel Barong::App.config.jwt_expire_time + 10.seconds + + post '/api/v2/identity/users/email/confirm_code', params: token_params + expect_status_to_eq 422 + expect_body.to eq(errors: ["jwt.decode_and_verify.expired"]) + end + end + end + + describe 'POST /api/v2/identity/users/password/generate_code' do + let(:do_request) do + post '/api/v2/identity/users/password/generate_code', params: params + end + let(:params) { { email: email } } + + context 'when email is unknown' do + let(:email) { 'unknown@gmail.com' } + + it 'renders 201' do + do_request + expect_status_to_eq 201 + expect_body.not_to eq(errors: ["identity.password.user_doesnt_exist"]) + end + end + + context 'when user is found by email' do + let!(:user) { create(:user, email: email) } + let(:email) { 'email@gmail.com' } + + it 'sends reset password instructions' do + do_request + expect_status_to_eq 201 + end + end + + context 'multiple password reset requests' do + let!(:user) { create(:user, email: email) } + let(:email) { 'email@gmail.com' } + let(:password) { 'ZahSh8ei' } + let(:confirm_password) { 'ZahSh8ei' } + + let(:log_in) { post '/api/v2/identity/sessions', params: { email: user.email, password: password } } + + it 'works with last email' do + post '/api/v2/identity/users/password/generate_code', params: params + expect_status_to_eq 201 + + post '/api/v2/identity/users/password/generate_code', params: params + expect_status_to_eq 201 + + reset_token = Rails.cache.read("reset_password_#{user.email}") + reset_password_token = codec.encode(sub: 'reset', email: user.email, uid: user.uid, reset_token: reset_token) + post '/api/v2/identity/users/password/confirm_code', params: { + reset_password_token: reset_password_token, + password: password, + confirm_password: confirm_password + } + expect_status_to_eq 201 + log_in + expect_status_to_eq 200 + end + + it 'returns error if prev link (non-utilized) is used' do + post '/api/v2/identity/users/password/generate_code', params: params + reset_token = Rails.cache.read("reset_password_#{user.email}") + expect_status_to_eq 201 + + post '/api/v2/identity/users/password/generate_code', params: params + expect_status_to_eq 201 + + reset_password_token = codec.encode(sub: 'reset', email: user.email, uid: user.uid, reset_token: reset_token) + post '/api/v2/identity/users/password/confirm_code', params: { + reset_password_token: reset_password_token, + password: password, + confirm_password: confirm_password + } + expect_status_to_eq 422 + expect(response.body).to eq("{\"errors\":[\"identity.user.utilized_token\"]}") + end + + it 'expires utilized token after lifetime but still returns error' do + post '/api/v2/identity/users/password/generate_code', params: params + reset_token = Rails.cache.read("reset_password_#{user.email}") + expect_status_to_eq 201 + + post '/api/v2/identity/users/password/generate_code', params: params + expect_status_to_eq 201 + + reset_password_token = codec.encode(sub: 'reset', email: user.email, uid: user.uid, reset_token: reset_token) + travel Barong::App.config.jwt_expire_time + 10.seconds + post '/api/v2/identity/users/password/confirm_code', params: { + reset_password_token: reset_password_token, + password: password, + confirm_password: confirm_password + } + + expect_status_to_eq 422 + expect(response.body).to eq("{\"errors\":[\"jwt.decode_and_verify.expired\"]}") + end + end + + context 'captcha behaviour when captcha policy is recaptcha' do + let!(:user) { create(:user, email: email) } + let(:email) { 'email@gmail.com' } + before { allow(Barong::App.config).to receive_messages(captcha: 'recaptcha') } + + it 'doesnt require captcha if endpoint is not in the protection list' do + allow(BarongConfig).to receive(:list).and_return({"captcha_protected_endpoints"=>["user_create", "session_create"]}) + + do_request + expect_status_to_eq 201 + end + + it 'require captcha if endpoint is in the protection list' do + allow(BarongConfig).to receive(:list).and_return({"captcha_protected_endpoints"=>["user_create", "session_create", "password_reset"]}) + + do_request + expect_status_to_eq 400 + expect_body.to eq(errors: ["identity.captcha.required"]) + end + end + end + + describe 'PUT /api/v2/identity/users/password/confirm_code' do + let(:do_request) do + post '/api/v2/identity/users/password/confirm_code', params: params + end + let(:params) do + { + reset_password_token: reset_password_token, + password: password, + confirm_password: confirm_password + } + end + let(:reset_password_token) { '' } + let(:password) { '' } + let(:confirm_password) { '' } + + context 'when params are blank' do + it 'renders 422 error' do + do_request + expect_status_to_eq 422 + expect_body.to eq(errors: ["identity.user.empty_reset_password_token", "identity.user.empty_password", "identity.user.empty_confirm_password"]) + end + end + + context 'when Reset Password Token is invalid' do + let(:reset_password_token) { 'invalid' } + let(:password) { 'Gol4aid2' } + let(:confirm_password) { 'Gol4aid2' } + + it 'renders 422 error' do + do_request + expect_status_to_eq 422 + expect_body.to eq(errors: ["jwt.decode_and_verify.segments"]) + end + end + + context 'when Reset Password Token and Password are valid ' do + let!(:user) { create(:user) } + let(:reset_password_token) { codec.encode(sub: 'reset', email: user.email, uid: user.uid) } + let(:password) { 'ZahSh8ei' } + let(:confirm_password) { 'ZahSh8ei' } + let(:log_in) { post '/api/v2/identity/sessions', params: { email: user.email, password: password } } + + it 'resets a password' do + do_request + expect_status_to_eq 201 + log_in + expect_status_to_eq 200 + end + end + + context 'When Reset Password Token is valid, passwords are weak' do + let!(:user) { create(:user) } + let(:reset_password_token) { codec.encode(sub:'reset', email: user.email, uid: user.uid) } + let(:password) { 'Simple' } + let(:confirm_password) { 'Simple' } + + it 'returns weak password error' do + do_request + expect_status_to_eq 422 + expect_body.to eq(errors: ["password.requirements"]) + end + end + + context 'When Reset Password Token is valid, passwords don\'t match' do + let!(:user) { create(:user) } + let(:reset_password_token) { codec.encode(sub: 'reset', email: user.email, uid: user.uid) } + let(:password) { 'ZahSh8exwdi' } + let(:confirm_password) { 'ZahSh8ei' } + + it 'returns 422 error' do + do_request + expect_status_to_eq 422 + expect_body.to eq(errors: ["identity.user.passwords_doesnt_match"]) + end + end + end + describe 'POST /api/v2/identity/users/email/confirm_email' do + let(:test_user) { create(:user, state: 'pending', email: 'valid.email@gmail.com') } + let(:do_request) { post '/api/v2/identity/users/email/confirm_email', params: params } + let(:params) { {} } + let(:valid_otp_code) { '1357' } + let(:invalid_otp_code) { '1234' } + + before do + allow(TOTPService).to receive(:validate?) + .with(test_user.uid, valid_otp_code) { true } + allow(TOTPService).to receive(:validate?) + .with(test_user.uid, invalid_otp_code) { false } + end + + context 'when token is missing' do + it 'returns an error' do + do_request + expect_status_to_eq 422 + expect_body.to eq(errors: ["identity.user.missing_code", "identity.user.empty_code", + "identity.user.missing_email", "identity.user.empty_email"]) + end + end + context 'when code is invalid' do + let(:params) { { email: test_user.email, code: invalid_otp_code } } + + it 'returns an error' do + do_request + expect_status_to_eq 422 + expect_body.to eq(errors: ["identity.user.active_or_doesnt_exist"]) + end + end + context 'when code is valid' do + let(:params) { { email: test_user.email, code: valid_otp_code } } + + it 'returns an error' do + do_request + expect_status_to_eq 201 + expect(json_body.keys).to match_array %i[email uid role level otp state referral_uid csrf_token data created_at updated_at labels phones profiles data_storages] + expect(json_body[:email]).to eq 'valid.email@gmail.com' + expect(json_body[:state]).to eq 'active' + end + end + end +end diff --git a/spec/api/v2/management/api_keys_spec.rb b/spec/api/v2/management/api_keys_spec.rb new file mode 100644 index 0000000..4b20b27 --- /dev/null +++ b/spec/api/v2/management/api_keys_spec.rb @@ -0,0 +1,374 @@ +# frozen_string_literal: true + +describe API::V2::Management::APIKeys, type: :request do + before do + defaults_for_management_api_v2_security_configuration! + management_api_v2_security_configuration.merge! \ + scopes: { + write_apikeys: { permitted_signers: %i[alex jeff], mandatory_signers: %i[alex] }, + } + end + + let!(:create_admin_permission) do + create :permission, + role: 'admin' + end + + let!(:create_member_permission) do + create :permission, + role: 'member' + end + + let!(:create_service_account_permission) do + create :permission, + role: 'service_account' + end + + describe 'POST /api_keys' do + let(:signers) { %i[alex jeff] } + let(:data) { params.merge(scope: :write_apikeys) } + + let(:do_request) do + post_json '/api/v2/management/api_keys', + multisig_jwt_management_api_v2({ data: data }, *signers) + end + + let(:params) do + api_keys_params + end + + context 'valid request' do + context 'service account' do + before do + allow(Barong::App.config).to receive_messages(mgn_api_keys_sa: true) + end + + let!(:service_account) { create(:service_account) } + + let(:api_keys_params) do + { + uid: service_account.uid, + algorithm: 'HS256', + scopes: 'trade' + } + end + + it 'creates a api key' do + do_request + expect(response.status).to eq(201) + + result = JSON.parse(response.body) + expect(result.keys).to match_array %w[kid algorithm scope state secret created_at updated_at] + expect(result['state']).to eq service_account.state + expect(result['scope']).to eq ['trade'] + expect(result['algorithm']).to eq 'HS256' + end + end + + context 'user' do + before do + allow(Barong::App.config).to receive_messages(mgn_api_keys_user: true) + end + + let!(:user) { create(:user) } + + let(:api_keys_params) do + { + uid: user.uid, + algorithm: 'HS256', + scopes: 'trade' + } + end + + it 'creates a api key' do + do_request + expect(response.status).to eq(201) + + result = JSON.parse(response.body) + expect(result.keys).to match_array %w[kid algorithm scope state secret created_at updated_at] + expect(result['state']).to eq user.state + expect(result['scope']).to eq ['trade'] + expect(result['algorithm']).to eq 'HS256' + end + end + end + + context 'invalid request' do + context 'vault inaccessible' do + before do + allow(Barong::App.config).to receive_messages(mgn_api_keys_sa: true) + end + + let!(:service_account) { create(:service_account) } + let(:api_keys_params) do + { + uid: service_account.uid, + algorithm: 'HS256', + scopes: 'trade' + } + end + + it 'should raise an error' do + allow(Vault::Rails).to receive(:encrypt).and_raise(Vault::VaultError) + do_request + expect(response.status).to eq(422) + expect_body.to eq(errors: ["api_key.could_not_save_secret"]) + end + end + + context 'service account doesnt exist' do + before do + allow(Barong::App.config).to receive_messages(mgn_api_keys_sa: true) + end + + let(:api_keys_params) do + { + uid: ServiceAccount::UID_PREFIX + 'random', + algorithm: 'HS256', + scopes: 'trade' + } + end + + it 'should raise an error' do + do_request + expect(response.status).to eq(422) + expect_body.to eq(error: 'service_account_doesnt_exist') + end + end + + context 'user doesnt exists' do + before do + allow(Barong::App.config).to receive_messages(mgn_api_keys_user: true) + end + + let(:api_keys_params) do + { + uid: UIDGenerator.generate(Barong::App.config.uid_prefix), + algorithm: 'HS256', + scopes: 'trade' + } + end + + it 'should raise an error' do + do_request + expect(response.status).to eq(422) + expect_body.to eq(error: 'user_doesnt_exist') + end + end + + context 'algorithm is invalid' do + before do + allow(Barong::App.config).to receive_messages(mgn_api_keys_sa: true) + end + + let!(:service_account) { create(:service_account) } + let(:api_keys_params) do + { + uid: service_account.uid, + algorithm: 'random', + scopes: 'trade' + } + end + + it 'should raise an error' do + do_request + expect(response.status).to eq(422) + expect_body.to eq(errors: ['kid.blank', 'algorithm.inclusion']) + end + end + + context 'disabled endpoint' do + let(:api_keys_params) do + { + uid: UIDGenerator.generate(Barong::App.config.uid_prefix), + algorithm: 'HS256', + scopes: 'trade' + } + end + + it 'should raise an error' do + do_request + expect(response.status).to eq(422) + expect_body.to eq(error: 'disabled_management_endpoint') + end + end + + context 'unexisting uid' do + + let(:api_keys_params) do + { + uid: 'random', + algorithm: 'HS256', + scopes: 'trade' + } + end + + it 'should raise an error' do + do_request + expect(response.status).to eq(422) + expect_body.to eq(error: 'uid_prefix_doesnt_exist') + end + end + end + end + + describe 'POST /api_keys/update' do + let(:signers) { %i[alex jeff] } + let(:data) { params.merge(scope: :write_apikeys) } + + let(:do_request) do + post_json '/api/v2/management/api_keys/update', + multisig_jwt_management_api_v2({ data: data }, *signers) + end + + let(:params) do + api_keys_params + end + + let!(:api_key) { create(:api_key, :with_service_account) } + + context 'valid request' do + context 'user' do + let!(:api_key) { create(:api_key, :with_user) } + + before do + allow(Barong::App.config).to receive_messages(mgn_api_keys_user: true) + end + + let(:params) do + { + uid: api_key.key_holder_account.uid, + kid: api_key.kid, + state: 'inactive', + scopes: 'sell' + } + end + + it 'updates api key' do + do_request + expect(response.status).to eq(201) + + result = JSON.parse(response.body) + expect(result.keys).to match_array %w[kid algorithm scope state created_at updated_at] + expect(result['state']).to eq 'inactive' + expect(result['scope']).to eq ['sell'] + end + end + + context 'service account' do + before do + allow(Barong::App.config).to receive_messages(mgn_api_keys_sa: true) + end + + let(:params) do + { + uid: api_key.key_holder_account.uid, + kid: api_key.kid, + state: 'inactive', + scopes: 'sell' + } + end + + it 'updates api key' do + do_request + expect(response.status).to eq(201) + + result = JSON.parse(response.body) + expect(result.keys).to match_array %w[kid algorithm scope state created_at updated_at] + expect(result['state']).to eq 'inactive' + expect(result['scope']).to eq ['sell'] + end + end + end + + context 'invalid request' do + context 'api keys doesnt exist' do + before do + allow(Barong::App.config).to receive_messages(mgn_api_keys_sa: true) + end + + let(:api_keys_params) do + { + uid: api_key.key_holder_account.uid, + kid: 'random kid' + } + end + + it 'should raise an error' do + do_request + expect(response.status).to eq(422) + expect_body.to eq(error: 'api_key_doesnt_exist') + end + end + + context 'service account doesnt exist' do + before do + allow(Barong::App.config).to receive_messages(mgn_api_keys_sa: true) + end + + let(:api_keys_params) do + { + uid: ServiceAccount::UID_PREFIX + 'random', + kid: api_key.kid + } + end + + it 'should raise an error' do + do_request + expect(response.status).to eq(422) + expect_body.to eq(error: 'service_account_doesnt_exist') + end + end + + context 'user doesnt exist' do + before do + allow(Barong::App.config).to receive_messages(mgn_api_keys_user: true) + end + + let(:api_keys_params) do + { + uid: UIDGenerator.generate(Barong::App.config.uid_prefix), + kid: api_key.kid + } + end + + it 'should raise an error' do + do_request + expect(response.status).to eq(422) + expect_body.to eq(error: 'user_doesnt_exist') + end + end + + context 'disabled endpoint' do + let(:api_keys_params) do + { + uid: UIDGenerator.generate(Barong::App.config.uid_prefix), + kid: api_key.kid + } + end + + it 'should raise an error' do + do_request + expect(response.status).to eq(422) + expect_body.to eq(error: 'disabled_management_endpoint') + end + end + + context 'unexisting uid' do + + let(:api_keys_params) do + { + uid: 'random', + kid: api_key.kid + } + end + + it 'should raise an error' do + do_request + expect(response.status).to eq(422) + expect_body.to eq(error: 'uid_prefix_doesnt_exist') + end + end + end + end +end diff --git a/spec/api/v2/management/documents_spec.rb b/spec/api/v2/management/documents_spec.rb new file mode 100644 index 0000000..dcc678f --- /dev/null +++ b/spec/api/v2/management/documents_spec.rb @@ -0,0 +1,101 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe API::V2::Management::Documents, type: :request do + before do + defaults_for_management_api_v2_security_configuration! + management_api_v2_security_configuration.merge! \ + scopes: { + write_documents: { permitted_signers: %i[alex jeff], mandatory_signers: %i[alex] }, + } + end + + let!(:create_admin_permission) do + create :permission, + role: 'admin' + end + let!(:create_member_permission) do + create :permission, + role: 'member' + end + let!(:user) { create(:user, :with_profile) } + + describe 'Show user info' do + let(:data) do + { + scope: :write_documents + } + end + let!(:image) { fixture_file_upload('/files/documents_test.jpg', 'image/jpg') } + let(:signers) { %i[alex jeff] } + let(:params) do + { + doc_type: 'Passport', + doc_expire: '3020-01-22', + doc_number: 'AA1234BB', + upload: [ + image + ] + } + end + let!(:optional_params) do + { + metadata: { + country: Faker::Address.country + } + } + end + let(:do_request) do + post_json '/api/v2/management/documents', + multisig_jwt_management_api_v2({ data: data }, *signers) + end + + let(:params) do { + uid: user.uid, + doc_type: 'Passport', + filename: 'documents_test', + file_ext: '.jpg', + doc_expire: '3020-01-22', + doc_number: 'AA1234BB', + upload: Base64.strict_encode64(File.open('spec/fixtures/files/documents_test.jpg').read) + } + end + + it 'push documents to user' do + post_json '/api/v2/management/documents', multisig_jwt_management_api_v2({ data: params }, *signers) + + expect(response.status).to eq 201 + expect(user.documents.length).to eq(1) + end + + it 'push documents to user twice' do + post_json '/api/v2/management/documents', multisig_jwt_management_api_v2({ data: params }, *signers) + + expect(response.status).to eq 201 + expect(user.documents.length).to eq(1) + + post_json '/api/v2/management/documents', multisig_jwt_management_api_v2({ data: params }, *signers) + expect(response.status).to eq 201 + expect(user.documents.length).to eq(1) + end + + context 'with empty doc_expire' do + it 'required doc expire' do + allow(Barong::App.config).to receive(:required_docs_expire).and_return(true) + expect { + post_json '/api/v2/management/documents', multisig_jwt_management_api_v2({ data: params.merge(doc_expire: nil) }, *signers) + }.not_to change { Document.count } + expect(response.status).to eq 422 + end + + it 'optional doc expire' do + allow(Barong::App.config).to receive(:required_docs_expire).and_return(false) + expect { + post_json '/api/v2/management/documents', multisig_jwt_management_api_v2({ data: params.merge(doc_expire: nil) }, *signers) + }.to change { Document.count }.by 1 + expect(response.status).to eq 201 + end + end + end +end diff --git a/spec/api/v2/management/jwt_authentication_middleware_spec.rb b/spec/api/v2/management/jwt_authentication_middleware_spec.rb new file mode 100644 index 0000000..1a54859 --- /dev/null +++ b/spec/api/v2/management/jwt_authentication_middleware_spec.rb @@ -0,0 +1,115 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe API::V2::Management::JWTAuthenticationMiddleware, type: :request do + let(:member) { create(:member, :verified_identity) } + let(:config) { management_api_v2_security_configuration } + + before do + defaults_for_management_api_v2_security_configuration! + config.merge! \ + scopes: { + tools: { permitted_signers: %i[alex jeff], mandatory_signers: %i[alex] } + } + end + + it 'works in standard conditions' do + post_json '/api/v2/management/timestamp', multisig_jwt_management_api_v2({}, :alex) + expect(response).to be_successful + end + # FIXME fix swagger_doc + # it 'allows GET and doesn\'t require authentication for documentation' do + # get '/api/v2/management/swagger_doc' + # expect(response).to be_successful + # end + + it 'doesn\'t allow query parameters' do + post '/api/v2/management/timestamp?foo=baz&baz=qux' + expect(response).to have_http_status(400) + expect(response.body).to match(/query parameters/i) + end + + it 'requires JSON in the request body' do + post '/api/v2/management/timestamp', params: 'foo=baz&baz=qux' + expect(response).to have_http_status(400) + expect(response.body).to match(/only json/i) + end + + it 'denies access when not enough signatures are supplied' do + post_json '/api/v2/management/timestamp', multisig_jwt_management_api_v2({}) + expect(response).to have_http_status(401) + expect(response.body).to match(/not enough signatures/i) + end + + it 'denies access when token is expired' do + config[:jwt][:verify_expiration] = true + post_json '/api/v2/management/timestamp', multisig_jwt_management_api_v2({ exp: 1.minute.ago.to_i }, :alex) + expect(response).to have_http_status(401) + expect(response.body).to match(/failed to verify jwt/i) + end + + context 'valid issuer' do + before { config[:jwt][:verify_iss] = true } + before { config[:jwt].merge!(iss: 'qux') } + it 'validates issuer' do + post_json '/api/v2/management/timestamp', multisig_jwt_management_api_v2({ iss: 'qux' }, :alex) + expect(response).to be_successful + end + end + + context 'invalid issuer' do + before { config[:jwt][:verify_iss] = true } + before { config[:jwt].merge!(iss: 'qux') } + it 'validates issuer' do + post_json '/api/v2/management/timestamp', multisig_jwt_management_api_v2({ iss: 'hacker' }, :alex) + expect(response).to have_http_status(401) + expect(response.body).to match(/failed to verify jwt/i) + end + end + + context 'valid audience' do + before { config[:jwt][:verify_aud] = true } + before { config[:jwt].merge!(aud: 'qux') } + it 'validates audience' do + post_json '/api/v2/management/timestamp', multisig_jwt_management_api_v2({ aud: 'qux' }, :alex) + expect(response).to be_successful + end + end + + context 'invalid audience' do + before { config[:jwt][:verify_aud] = true } + before { config[:jwt].merge!(aud: 'qux') } + it 'validates audience' do + post_json '/api/v2/management/timestamp', multisig_jwt_management_api_v2({ aud: 'hacker' }, :alex) + expect(response).to have_http_status(401) + expect(response.body).to match(/failed to verify jwt/i) + end + end + + context 'missing JWT ID' do + before { config[:jwt][:verify_jti] = true } + it 'requires JTI' do + post_json '/api/v2/management/timestamp', multisig_jwt_management_api_v2({}, :alex) + expect(response).to have_http_status(401) + expect(response.body).to match(/failed to verify jwt/i) + end + end + + context 'issued at in future' do + before { config[:jwt][:verify_iat] = true } + it 'denies access' do + post_json '/api/v2/management/timestamp', multisig_jwt_management_api_v2({ iat: 200.seconds.from_now.to_i }, :alex) + expect(response).to have_http_status(401) + expect(response.body).to match(/failed to verify jwt/i) + end + end + + context 'issued at before future' do + before { config[:jwt][:verify_iat] = true } + it 'allows access' do + post_json '/api/v2/management/timestamp', multisig_jwt_management_api_v2({ iat: 3.seconds.ago.to_i }, :alex) + expect(response).to have_http_status(200) + end + end + end diff --git a/spec/api/v2/management/labels_spec.rb b/spec/api/v2/management/labels_spec.rb new file mode 100644 index 0000000..55637eb --- /dev/null +++ b/spec/api/v2/management/labels_spec.rb @@ -0,0 +1,304 @@ +# frozen_string_literal: true + +require 'rails_helper' +require 'pry' + +describe API::V2::Management::Labels, type: :request do + before do + defaults_for_management_api_v2_security_configuration! + management_api_v2_security_configuration.merge! \ + scopes: { + write_labels: { permitted_signers: %i[alex jeff], mandatory_signers: %i[alex] }, + read_labels: { permitted_signers: %i[alex jeff], mandatory_signers: %i[alex] }, + read_users: { permitted_signers: %i[alex jeff], mandatory_signers: %i[alex] } + } + end + let!(:create_admin_permission) do + create :permission, + role: 'admin' + end + let!(:create_member_permission) do + create :permission, + role: 'member' + end + let!(:user) { create(:user) } + let!(:user_with_private_label) { create(:user) } + let!(:user_with_public_label) { create(:user) } + + describe '#filter/users' do + let!(:private_label) do + create(:label, scope: 'private', key: 'profile', value: 'pending', user: user_with_private_label) + end + let!(:public_label) do + create(:label, scope: 'public', key: 'profile', value: 'pending', user: user_with_public_label) + end + let(:data) { { key: 'profile', value: 'pending', scope: 'private' } } + let(:signers) { %i[alex] } + let(:do_request) do + post_json '/api/v2/management/labels/filter/users', + multisig_jwt_management_api_v2({ data: data }, *signers) + end + + it 'filters users based on label attributes. doesnt mix PUBLIC and PRIVATE labels' do + # filtering params key: 'profile', value: 'pending', scope: 'private' + do_request + expect(json_body.count == 1) + expect(json_body.first[:email]).to eq(user_with_private_label.attributes.symbolize_keys[:email]) + expect(json_body.first[:uid]).to eq(user_with_private_label.attributes.symbolize_keys[:uid]) + end + + it 'filters users based on label timestamp attributes' do + # filtering params key: 'profile', to: 1.day.ago + data.clear + data[:to] = 1.day.ago.to_i + data[:key] = 'profile' + public_label.update(created_at: 3.days.ago) + do_request + + expect(json_body.count == 1) + expect(json_body.first[:email]).to eq(user_with_public_label.attributes.symbolize_keys[:email]) + expect(json_body.first[:uid]).to eq(user_with_public_label.attributes.symbolize_keys[:uid]) + end + + it 'returns empty array if no mathes found' do + # filtering params key: 'documents', value: 'pending', scope: 'private' + data[:key] = 'documents' + do_request + + expect(json_body.count == 0) + expect(json_body).to eq([]) + end + + it 'returns user with profile if extended is true' do + data[:extended] = true + do_request + + expect(json_body.first).to include(:profiles) + end + end + + describe '#list' do + let!(:private_label) do + create(:label, scope: 'private', user: user) + end + let!(:public_label) do + create(:label, scope: 'public', user: user) + end + let(:data) do + { + user_uid: user.uid + } + end + let(:signers) { %i[alex] } + + let(:do_request) do + post_json '/api/v2/management/labels/list', + multisig_jwt_management_api_v2({ data: data }, *signers) + end + + it 'get list of user labels' do + do_request + expect(response.status).to eq 201 + expect(json_body.size).to eq 2 + end + end + + describe 'create label' do + let(:data) do + { + user_uid: user.uid, + key: 'email', + value: 'verified', + scope: 'private' + } + end + let(:expected_attributes) do + { + 'key' => 'email', + 'value' => 'verified', + 'user_id' => user.id, + 'scope' => 'private' + } + end + let(:signers) { %i[alex jeff] } + + let(:do_request) do + post_json '/api/v2/management/labels', + multisig_jwt_management_api_v2({ data: data }, *signers) + end + + it 'creates a label' do + expect { do_request }.to change { Label.count }.from(0).to(1) + expect(response.status).to eq 201 + expect(Label.first.attributes).to include(expected_attributes) + end + + it 'denies access unless enough signatures are supplied' do + signers.clear.concat %i[james jeff] + expect { do_request }.to_not change { Label.count } + expect(response.status).to eq 401 + end + + it 'denies when user is not found' do + data[:user_uid] = 'invalid' + expect { do_request }.to_not change { Label.count } + expect(response.status).to eq 404 + end + + context 'when data is blank' do + let(:data) { {} } + + it 'renders errors' do + do_request + expect(response.status).to eq 422 + expect_body.to eq(error: 'user_uid is missing, user_uid is empty, key is missing, key is empty, value is missing, value is empty') + end + end + end + + describe 'update label' do + let!(:label) do + create(:label, key: 'email', value: 'verified', scope: 'private', description: 'initial label', user: user) + end + + let(:data) do + { + user_uid: user.uid, + key: 'email', + value: 'rejected', + description: 'management api label update test' + } + end + let(:signers) { %i[alex jeff] } + + let(:do_request) do + put_json '/api/v2/management/labels', + multisig_jwt_management_api_v2({ data: data }, *signers) + end + + it 'updates a label value' do + expect { do_request }.to change { label.reload.value }.from('verified').to('rejected') + expect(response.status).to eq 200 + end + + + it 'updates a label value' do + expect { do_request }.to change { label.reload.description }.from('initial label').to('management api label update test') + expect(response.status).to eq 200 + end + + it 'denies access unless enough signatures are supplied' do + signers.clear.concat %i[james jeff] + expect { do_request }.to_not change { label.reload.value } + expect(response.status).to eq 401 + end + + it 'denies when user is not found' do + data[:user_uid] = 'invalid' + expect { do_request }.to_not change { label.reload.value } + expect(response.status).to eq 404 + end + + context 'when data is blank' do + let(:data) { {} } + + it 'renders errors' do + do_request + expect(response.status).to eq 422 + expect_body.to eq(error: 'user_uid is missing, user_uid is empty, key is missing, key is empty, value is missing, value is empty') + end + end + + context 'when label doesnt exist yet with default replace policy' do + let(:data) do + { + user_uid: user.uid, + key: 'phone', + value: 'verified' + } + end + + it 'creates a label' do + expect(user.labels.find_by(key: 'phone')).to eq(nil) + + do_request + expect(response.status).to eq 200 + expect(user.labels.find_by(key: 'phone')).not_to eq(nil) + end + + context 'when data is incomplete' do + let(:data) do + { + user_uid: user.uid, + key: 'phone' + } + end + + it 'receive an error' do + expect(user.labels.find_by(key: 'phone')).to eq(nil) + + do_request + expect(response.status).to eq 422 + expect(response.body).to eq "{\"error\":\"value is missing, value is empty\"}" + expect(user.labels.find_by(key: 'phone')).to eq(nil) + end + end + end + + context 'when label doesnt exist yet with false replace policy' do + let(:data) do + { + user_uid: user.uid, + key: 'phone', + value: 'verified', + replace: false + } + end + + it 'receives an error' do + expect(user.labels.find_by(key: 'phone')).to eq(nil) + + do_request + expect(response.status).to eq 404 + expect(user.labels.find_by(key: 'phone')).to eq(nil) + expect(response.body).to eq "{\"error\":\"label doesnt exist\"}" + end + end + end + + describe 'delete label' do + let!(:label) do + create(:label, key: 'email', value: 'verified', scope: 'private', user: user) + end + + let(:data) do + { + user_uid: user.uid, + key: 'email' + } + end + let(:signers) { %i[alex jeff] } + + let(:do_request) do + post_json '/api/v2/management/labels/delete', + multisig_jwt_management_api_v2({ data: data }, *signers) + end + + it 'deletes a label' do + expect { do_request }.to change { Label.count }.from(1).to(0) + expect(response.status).to eq 204 + end + + it 'denies access unless enough signatures are supplied' do + signers.clear.concat %i[james jeff] + expect { do_request }.to_not change { label.reload.value } + expect(response.status).to eq 401 + end + + it 'denies when user is not found' do + data[:user_uid] = 'invalid' + expect { do_request }.to_not change { label.reload.value } + expect(response.status).to eq 404 + end + end + end diff --git a/spec/api/v2/management/otp_spec.rb b/spec/api/v2/management/otp_spec.rb new file mode 100644 index 0000000..6393c03 --- /dev/null +++ b/spec/api/v2/management/otp_spec.rb @@ -0,0 +1,96 @@ +# frozen_string_literal: true + +require 'rails_helper' +require 'pry' + +describe API::V2::Management::Otp, type: :request do + before do + defaults_for_management_api_v2_security_configuration! + management_api_v2_security_configuration.merge! \ + scopes: { + otp_sign: { permitted_signers: %i[alex jeff], mandatory_signers: %i[alex] } + } + end + let!(:create_admin_permission) do + create :permission, + role: 'admin' + end + let!(:create_member_permission) do + create :permission, + role: 'member' + end + let!(:user) { create(:user, otp: otp_enabled) } + + describe 'POST /otp/sign' do + let(:data) do + { + user_uid: user.uid, + otp_code: valid_otp_code, + jwt: jwt + } + end + let(:signers) { %i[alex jeff] } + let(:valid_otp_code) { '1111' } + let(:invalid_otp_code) { '1234' } + let(:jwt) { applogic_signed_jwt(amount: '1 BTC') } + let(:otp_enabled) { true } + let(:do_request) do + post_json '/api/v2/management/otp/sign', + multisig_jwt_management_api_v2({ data: data }, *signers) + end + let(:valid_payload_keys) do + %i[payload signatures] + end + + before do + allow(TOTPService).to receive(:validate?) + .with(user.uid, valid_otp_code) { true } + allow(TOTPService).to receive(:validate?) + .with(user.uid, invalid_otp_code) { false } + end + + it 'signs a request' do + do_request + expect(json_body.keys).to eq(valid_payload_keys) + expect(response.status).to eq 201 + end + + it 'renders an error when jwt is not a Hash' do + data[:jwt] = 'invalid' + do_request + expect_body.to eq(error: 'jwt is invalid') + expect(response.status).to eq 422 + end + + it 'renders an error when jwt is not RFC' do + data[:jwt] = { data: 'invalid' } + do_request + expect(json_body[:error]).to include('JWT is invalid by the reason') + expect(response.status).to eq 422 + end + + it 'renders an error when otp code is invalid' do + data[:otp_code] = invalid_otp_code + do_request + expect_body.to eq(error: 'OTP code is invalid') + expect(response.status).to eq 422 + end + + it 'renders an error when account is not found' do + data[:user_uid] = 'invalid' + do_request + expect_body.to eq error: 'Record is not found' + expect(response.status).to eq 404 + end + + context 'when data is blank' do + let(:data) { {} } + + it 'renders errors' do + do_request + expect_body.to eq(error: "user_uid is missing, user_uid is empty, otp_code is missing, otp_code is empty, jwt is missing, jwt is empty") + expect(response.status).to eq 422 + end + end + end +end diff --git a/spec/api/v2/management/phones_spec.rb b/spec/api/v2/management/phones_spec.rb new file mode 100644 index 0000000..b79f2b6 --- /dev/null +++ b/spec/api/v2/management/phones_spec.rb @@ -0,0 +1,319 @@ +# frozen_string_literal: true + +describe API::V2::Management::Phones, type: :request do + before do + defaults_for_management_api_v2_security_configuration! + management_api_v2_security_configuration.merge! \ + scopes: { + write_phones: { permitted_signers: %i[alex jeff], mandatory_signers: %i[alex] }, + read_phones: { permitted_signers: %i[alex jeff], mandatory_signers: %i[alex] }, + } + end + let!(:create_admin_permission) do + create :permission, + role: 'admin' + end + let!(:create_member_permission) do + create :permission, + role: 'member' + end + let!(:user) { create(:user) } + + describe 'POST /phones/get' do + let(:signers) { %i[alex jeff] } + let(:data) { params.merge(scope: :read_phones) } + + let(:do_request) do + post_json '/api/v2/management/phones/get', + multisig_jwt_management_api_v2({ data: data }, *signers) + end + + let(:params) do + phone_params + end + + context 'valid request' do + context 'user without phones' do + let(:phone_params) do + { + uid: user.uid + } + end + + it 'get list of phones' do + do_request + expect_status_to_eq 201 + expect_body.to eq [] + end + end + + context 'user with phones' do + let!(:phone) { create(:phone, user: user) } + let(:phone_params) do + { + uid: user.uid + } + end + + it 'get list of phones' do + do_request + expect_status_to_eq 201 + expect(json_body.count).to eq 1 + expect(json_body.first[:number]).to eq phone.number + expect(json_body.first[:country]).to eq phone.country + end + end + end + + context 'invalid request' do + let(:phone_params) do + { + uid: 'invalid_uid' + } + end + + it 'renders an error' do + do_request + expect_body.to eq(error: 'user.doesnt_exist') + expect_status.to eq 422 + end + end + end + + describe 'POST /phones' do + let(:signers) { %i[alex jeff] } + let(:data) { params.merge(scope: :write_phones) } + + let(:do_request) do + post_json '/api/v2/management/phones', + multisig_jwt_management_api_v2({ data: data }, *signers) + end + + let(:params) do + phone_params + end + + context 'valid request' do + let(:phone_params) do + { + uid: user.uid, + number: '12345678911' + } + end + + it 'creates a phone' do + expect { do_request }.to change { Phone.count }.by(1) + expect_status_to_eq 201 + + result = JSON.parse(response.body) + expect(result['country']).to eq 'US' + expect(result['number']).to eq phone_params[:number] + end + end + + context 'invalid request' do + context 'when phone is invalid' do + let(:phone_params) do + { + uid: user.uid, + number: '123' + } + end + + it 'renders an error' do + do_request + expect_body.to eq(error: 'management.phone.invalid_num') + expect_status.to eq 400 + end + end + + context 'when phone is missing' do + let(:phone_params) do + { + uid: user.uid + } + end + + it 'renders an error' do + do_request + expect_status.to eq 422 + expect_body.to eq(error: 'number is missing, number is empty') + end + end + + context 'when phone is already exists' do + let!(:phone) do + create(:phone, validated_at: validated_at) + end + + let(:phone_params) do + { + uid: user.uid, + number: phone.number + } + end + + context 'when phone verified' do + let(:validated_at) { 1.minutes.ago } + + it 'renders an error' do + do_request + expect_body.to eq(error: 'management.phone.number_exist') + expect_status.to eq 400 + end + end + + context 'when phone verified but number is not sanitized' do + let(:validated_at) { 1.minutes.ago } + let(:phone_params) do + { + uid: user.uid, + number: '++#{phone.number}' + } + end + + it 'renders an error' do + do_request + expect_body.to eq(error: 'management.phone.invalid_num') + expect_status.to eq 400 + end + end + end + + context 'when phone exists on international format' do + let(:phone_params) do + { + uid: user.uid, + number: '+44 07418084106' + } + end + let(:international_phone) { '447418084106' } + let!(:phone) do + create(:phone, validated_at: 1.minute.ago, number: international_phone) + end + + it 'renders an error' do + do_request + expect_body.to eq(error: 'management.phone.number_exist') + expect_status.to eq 400 + end + end + + context 'when phone exists for current user' do + let!(:phone) { create(:phone, number: '447418084106', user_id: user.id)} + let(:phone_params) do + { + uid: user.uid, + number: '447418084106' + } + end + + it 'renders an error' do + do_request + expect_body.to eq(error: 'management.phone.exists') + expect_status.to eq 400 + end + end + end + end + + describe 'POST /phone/delete' do + let(:signers) { %i[alex jeff] } + let(:data) { params.merge(scope: :write_phones) } + + let(:do_request) do + post_json '/api/v2/management/phones/delete', + multisig_jwt_management_api_v2({ data: data }, *signers) + end + + let(:params) do + phone_params + end + + context 'valid request' do + context 'user with one phone number' do + let!(:phone) { create(:phone, number: '447418084106', user_id: user.id)} + + let(:phone_params) do + { + uid: user.uid, + number: phone.number + } + end + + it 'show deleted phone' do + expect { do_request }.to change { Phone.count }.by(-1) + expect_status.to eq 201 + expect(json_body[:number]).to eq phone.number + expect(json_body[:country]).to eq phone.country + end + end + + context 'user with several phone numbers' do + let!(:phone1) { create(:phone, number: '447418084106', user_id: user.id)} + let!(:phone2) { create(:phone, number: '447418084107', user_id: user.id)} + + let(:phone_params) do + { + uid: user.uid, + number: phone2.number + } + end + + it 'show deleted phone' do + expect { do_request }.to change { Phone.count }.by(-1) + expect_status.to eq 201 + expect(json_body[:number]).to eq phone2.number + expect(json_body[:country]).to eq phone2.country + end + end + end + + context 'invalid request' do + context 'invalid user' do + let(:phone_params) do + { + uid: 'invalid_uid', + number: 'number' + } + end + + it 'renders an error' do + do_request + expect_body.to eq(error: 'user.doesnt_exist') + expect_status.to eq 422 + end + end + + context 'invalid phone number' do + let(:phone_params) do + { + uid: user.uid, + number: 'invalid_number' + } + end + + it 'renders an error' do + do_request + expect_body.to eq(error: 'management.phone.doesnt_exists') + expect_status.to eq 422 + end + end + + context 'non existed phone number' do + let(:phone_params) do + { + uid: user.uid, + number: '1111111111' + } + end + + it 'renders an error' do + do_request + expect_body.to eq(error: 'management.phone.doesnt_exists') + expect_status.to eq 422 + end + end + end + end +end diff --git a/spec/api/v2/management/profiles_spec.rb b/spec/api/v2/management/profiles_spec.rb new file mode 100644 index 0000000..66f78c7 --- /dev/null +++ b/spec/api/v2/management/profiles_spec.rb @@ -0,0 +1,134 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe API::V2::Management::Profiles, type: :request do + before do + defaults_for_management_api_v2_security_configuration! + management_api_v2_security_configuration.merge! \ + scopes: { + read_users: { permitted_signers: %i[alex jeff], mandatory_signers: %i[alex] }, + write_users: { permitted_signers: %i[alex jeff], mandatory_signers: %i[alex] } + } + end + + let!(:create_admin_permission) do + create :permission, + role: 'admin' + end + let!(:create_member_permission) do + create :permission, + role: 'member' + end + + let(:signers) { %i[alex jeff] } + let(:data) { params.merge(scope: :write_users) } + + let(:do_request) do + post_json '/api/v2/management/profiles', + multisig_jwt_management_api_v2({ data: data }, *signers) + end + + context 'when profile params are provided' do + let(:params) do + profile_params + end + + context 'when params are valid' do + let(:user) { create :user } + let(:profile_params) do + { + uid: user.uid, + first_name: Faker::Name.first_name, + last_name: Faker::Name.last_name, + dob: Faker::Date.birthday, + country: Faker::Address.country_code_long, + city: Faker::Address.city, + address: Faker::Address.state, + postcode: Faker::Address.zip_code + } + end + + it 'creates a profile' do + expect { do_request }.to change { Profile.count }.by(1) + expect_status_to_eq 201 + + result = JSON.parse(response.body) + expect(result['profiles'][0]['state']).to eq 'drafted' + expect(result['profiles'][0]['last_name']).to eq profile_params[:last_name] + expect(result['profiles'][0]['dob']).to eq profile_params[:dob].to_s + end + end + + context 'when postcode is not provided' do + let(:user) { create :user } + let(:profile_params) do + { + uid: user.uid, + first_name: Faker::Name.first_name, + last_name: Faker::Name.last_name, + dob: Faker::Date.birthday, + country: Faker::Address.country_code_long, + city: Faker::Address.city, + address: Faker::Address.state + } + end + + it 'create a profile' do + expect { do_request }.to change { Profile.count } + expect_status_to_eq 201 + result = JSON.parse(response.body) + expect(result['profiles'][0]['state']).to eq 'drafted' + expect(result['profiles'][0]['last_name']).to eq profile_params[:last_name] + expect(result['profiles'][0]['dob']).to eq profile_params[:dob].to_s + end + end + + context 'when profile state is provided' do + let(:user) { create :user } + let(:profile_params) do + { + uid: user.uid, + first_name: Faker::Name.first_name, + last_name: Faker::Name.last_name, + dob: Faker::Date.birthday, + country: Faker::Address.country_code_long, + city: Faker::Address.city, + address: Faker::Address.state, + state: 'rejected' + } + end + + it 'create a profile' do + expect { do_request }.to change { Profile.count } + expect_status_to_eq 201 + result = JSON.parse(response.body) + expect(result['profiles'][0]['state']).to eq 'rejected' + expect(result['profiles'][0]['last_name']).to eq profile_params[:last_name] + expect(result['profiles'][0]['dob']).to eq profile_params[:dob].to_s + end + end + + context 'when params are invalid' do + let(:user) { create :user } + let(:profile_params) do + { + uid: user.uid, + first_name: Faker::Name.first_name, + last_name: Faker::Name.last_name, + dob: Faker::Date.birthday, + country: 'a', + city: Faker::Address.city, + address: Faker::Address.state, + postcode: Faker::Address.zip_code + } + end + + it 'renders an error' do + expect { do_request }.to_not change { Profile.count } + expect_status_to_eq 422 + expect(json_body[:error]).to eq ['Country must have alpha2 or alpha3 format'] + end + end + end +end diff --git a/spec/api/v2/management/service_accounts_spec.rb b/spec/api/v2/management/service_accounts_spec.rb new file mode 100644 index 0000000..e5b9bb4 --- /dev/null +++ b/spec/api/v2/management/service_accounts_spec.rb @@ -0,0 +1,373 @@ +# frozen_string_literal: true + +require 'rails_helper' +require 'pry' + +describe API::V2::Management::ServiceAccounts, type: :request do + before do + defaults_for_management_api_v2_security_configuration! + management_api_v2_security_configuration.merge! \ + scopes: { + read_service_accounts: { permitted_signers: %i[alex jeff], mandatory_signers: %i[alex] }, + write_service_accounts: { permitted_signers: %i[alex jeff], mandatory_signers: %i[alex] } + } + end + let!(:create_member_permission) do + create :permission, + role: 'member' + end + let!(:create_service_account_permission) do + create :permission, + role: 'service_account' + end + let!(:create_admin_permission) do + create :permission, + role: 'admin' + end + + let!(:user) { create(:user, role: 'member') } + let!(:service_account) { create(:service_account, user: user) } + + describe 'Show service_account info' do + let(:data) do + { + scope: :read_service_accounts + } + end + + let(:expected_attributes) do + %i[email uid role level state user created_at updated_at] + end + let(:signers) { %i[alex jeff] } + + let(:do_request) do + post_json '/api/v2/management/service_accounts/get', + multisig_jwt_management_api_v2({ data: data }, *signers) + end + + it 'reads service_account info by uid' do + data[:uid] = service_account.uid + do_request + + expect(response.status).to eq 200 + expect(json_body.keys).to eq expected_attributes + end + + it 'reads service_account info by email' do + data[:email] = service_account.email + do_request + + expect(response.status).to eq 200 + expect(json_body.keys).to eq expected_attributes + end + + it 'denies when uid is not found' do + data[:uid] = 'invalid' + do_request + expect(response.status).to eq 404 + end + + it 'denies when email is not found' do + data[:email] = 'invalid' + do_request + expect(response.status).to eq 404 + end + end + + describe 'Returns array of service accounts as collection' do + let(:data) do + { + scope: :read_service_accounts + } + end + let(:signers) { %i[alex jeff] } + + let(:do_request) do + post_json '/api/v2/management/service_accounts/list', + multisig_jwt_management_api_v2({ data: data }, *signers) + end + + context 'service_accounts' do + let!(:test_service_account) { create(:service_account, email: 'testa@gmail.com', user: user) } + let!(:second_service_account) { create(:service_account, email: 'testb@gmail.com', user: user) } + let!(:third_service_account) { create(:service_account, email: 'testd@gmail.com', user: user) } + let!(:fourth_service_account) { create(:service_account, email: 'testc@gmail.com', user: user) } + + include_context 'bearer authentication' + + let(:do_service_accounts_request) do + post_json '/api/v2/management/service_accounts/get', + multisig_jwt_management_api_v2({ data: data }), headers: auth_header + end + it 'denies access for user JWT instead of management signature' do + do_service_accounts_request + expect(response.status).to eq 401 + end + + it 'denies access unless enough signatures are supplied' do + signers.clear.concat %i[james jeff] + do_request + expect(response.status).to eq 401 + end + + it 'returns list of service_accounts' do + do_request + + service_accounts = JSON.parse(response.body) + expect(ServiceAccount.count).to eq service_accounts.count + end + + context 'pagination test' do + let(:service_account_list_params) do + { + scope: :read_users, + limit: 2 + } + end + + it 'returns 1st page as default, limit 2 users per page' do + service_account_list_params[:page] = 1 + post_json '/api/v2/management/service_accounts/list', multisig_jwt_management_api_v2({ data: service_account_list_params }, *signers), headers: auth_header + + expect(response.headers.fetch('Total')).to eq ServiceAccount.all.count.to_s + expect(response.headers.fetch('Page')).to eq '1' + expect(response.headers.fetch('Per-Page')).to eq '2' + end + + it 'returns 2nd page, limit 2 users per page' do + service_account_list_params[:page] = 2 + post_json '/api/v2/management/service_accounts/list', multisig_jwt_management_api_v2({ data: service_account_list_params }, *signers), headers: auth_header + + expect(response.headers.fetch('Total')).to eq ServiceAccount.all.count.to_s + expect(response.headers.fetch('Page')).to eq '2' + expect(response.headers.fetch('Per-Page')).to eq '2' + end + end + end + end + + describe 'Create a service account' do + let(:signers) { %i[alex jeff] } + let(:data) { params.merge(scope: :write_service_accounts) } + + let(:do_request) do + post_json '/api/v2/management/service_accounts/create', + multisig_jwt_management_api_v2({ data: data }, *signers) + end + + context 'when uid is present' do + context 'when email is valid' do + let(:params) do + { + service_account_email: 'valid_email@example.com', + service_account_uid: 'Fai5aesoLEcx', + service_account_role: 'admin', + owner_uid: user.uid + } + end + + it 'creates a service account' do + expect { do_request }.to change { ServiceAccount.count }.by(1) + expect_status_to_eq 201 + end + end + + context 'when params are blank' do + let(:params) { {} } + + it 'renders an error' do + do_request + expect_status_to_eq 422 + expect_body.to eq(error: 'service_account_role is missing, service_account_role is empty') + end + end + + context 'when email is bad' do + let(:params) { { service_account_email: 'bad_email', service_account_uid: 'Fai5aesoLEcx', service_account_role: 'member', owner_uid: user.uid } } + + it 'renders an error' do + expect { do_request }.to_not change { ServiceAccount.count } + expect_status_to_eq 422 + expect_body.to eq(error: ['Email is invalid']) + end + end + + context 'when role does not exist' do + let(:params) { { service_account_email: 'valid_email@example.com', service_account_uid: 'Fai5aesoLEcx', service_account_role: 'invalid', owner_uid: user.uid } } + + it 'renders an error' do + expect { do_request }.to_not change { ServiceAccount.count } + expect_status_to_eq 422 + expect_body.to eq(error: ['Role doesnt_exist']) + end + end + + context 'when uid is not uniq, the same as user one' do + let(:params) { { service_account_email: 'valid_email@example.com', service_account_uid: user.uid, service_account_role: 'member', owner_uid: user.uid } } + + it 'renders an error' do + expect { do_request }.to_not change { ServiceAccount.count } + expect_status_to_eq 422 + expect(json_body[:error].first).to include 'Email or uid not_uniq' + end + end + end + end + + describe 'Update a service account' do + let(:signers) { %i[alex jeff] } + let(:data) { params.merge(scope: :write_service_accounts) } + let!(:service_account) { create(:service_account, :without_user) } + + let(:do_request) do + post_json '/api/v2/management/service_accounts/update', + multisig_jwt_management_api_v2({ data: data }, *signers) + end + + context 'when params are blank' do + let(:params) { {} } + + it 'renders an error' do + do_request + expect_status_to_eq 422 + expect_body.to eq(error: 'uid is missing, uid is empty') + end + end + + context 'when service account doesnt exists' do + let(:params) do + { + uid: 'example' + } + end + + it 'renders an error' do + do_request + expect_status_to_eq 422 + expect_body.to eq(error: 'Service account doesnt exist') + end + end + + context 'update service account' do + context do + let(:params) do + { + uid: service_account.uid + } + end + + context 'service account without user' do + it 'shouldnt modify service account' do + do_request + expect_status_to_eq 201 + + res = JSON.parse(response.body) + expect(res['state']).to eq 'pending' + expect(res['level']).to eq 0 + expect(res['user']).to eq nil + end + end + + context 'service account with user' do + let!(:service_account) { create(:service_account) } + + it 'shouldnt modify service account' do + owner = service_account.user + do_request + expect_status_to_eq 201 + + res = JSON.parse(response.body) + expect(res['state']).to eq owner.state + expect(res['level']).to eq owner.level + expect(res['user']['uid']).to eq owner.uid + end + end + end + + context do + context 'service account without user' do + let!(:user_with_phone) { create(:user, :with_phone) } + let(:params) do + { + uid: service_account.uid, + owner_uid: user_with_phone.uid + } + end + + it 'should modify service account' do + expect(service_account.level).to eq 0 + expect(service_account.state).to eq 'pending' + expect(service_account.user).to eq nil + + do_request + expect_status_to_eq 201 + + res = JSON.parse(response.body) + expect(res['user']['uid']).to eq user_with_phone.uid + expect(res['level']).to eq user_with_phone.level + expect(res['state']).to eq user_with_phone.state + end + end + + context 'service account with user' do + let!(:user_with_phone) { create(:user, :with_phone) } + let!(:user_with_profile) { create(:user, :with_profile) } + let!(:service_account) { create(:service_account, user: user_with_phone)} + + let(:params) do + { + uid: service_account.uid, + owner_uid: user_with_profile.uid + } + end + + it 'should modify service account' do + expect(service_account.level).to eq user_with_phone.level + expect(service_account.state).to eq user_with_phone.state + expect(service_account.user.uid).to eq user_with_phone.uid + + do_request + expect_status_to_eq 201 + + res = JSON.parse(response.body) + expect(res['user']['uid']).to eq user_with_profile.uid + expect(res['level']).to eq user_with_profile.level + expect(res['state']).to eq user_with_profile.state + end + end + end + end + end + + describe 'Delete a service account' do + let(:signers) { %i[alex jeff] } + let(:data) { params.merge(scope: :write_service_accounts) } + + let(:do_request) do + post_json '/api/v2/management/service_accounts/delete', + multisig_jwt_management_api_v2({ data: data }, *signers) + end + + context do + let(:params) { { uid: service_account.uid } } + + it do + do_request + expect_status_to_eq 200 + + service_account = JSON.parse(response.body) + expect(service_account['state']).to eq 'disabled' + end + end + + context 'when params are blank' do + let(:params) { {} } + + it 'renders an error' do + do_request + expect_status_to_eq 422 + expect_body.to eq(error: 'uid is missing, uid is empty') + end + end + end +end diff --git a/spec/api/v2/management/users_spec.rb b/spec/api/v2/management/users_spec.rb new file mode 100644 index 0000000..810a9f2 --- /dev/null +++ b/spec/api/v2/management/users_spec.rb @@ -0,0 +1,556 @@ +# frozen_string_literal: true + +require 'rails_helper' +require 'pry' + +describe API::V2::Management::Users, type: :request do + before do + defaults_for_management_api_v2_security_configuration! + management_api_v2_security_configuration.merge! \ + scopes: { + read_users: { permitted_signers: %i[alex jeff], mandatory_signers: %i[alex] }, + write_users: { permitted_signers: %i[alex jeff], mandatory_signers: %i[alex] } + } + end + let!(:create_admin_permission) do + create :permission, + role: 'admin' + end + let!(:create_member_permission) do + create :permission, + role: 'member' + end + let!(:user) { create(:user, :with_profile) } + + describe 'Show user info' do + let(:data) do + { + scope: :read_users + } + end + let(:expected_attributes) do + %i[email uid role level otp state data profiles referral_uid created_at updated_at] + end + let(:extended_attributes) do + %i[email uid role level otp state data profiles labels phones documents data_storages comments referral_uid created_at updated_at] + end + let(:signers) { %i[alex jeff] } + + let(:do_request) do + post_json '/api/v2/management/users/get', + multisig_jwt_management_api_v2({ data: data }, *signers) + end + + it 'reads extended user info by uid' do + data[:uid] = user.uid + do_request + + expect(response.status).to eq 201 + expect(json_body.keys).to match_array extended_attributes + expect(json_body).to include(:profiles, :comments, :phones, :documents) + expect(json_body[:profiles][0][:last_name]).to eq user.profiles[0].last_name + expect(json_body[:profiles][0][:dob]).to eq user.profiles[0].dob.to_s + end + + it 'reads full user info by email' do + data[:email] = user.email + + do_request + expect(response.status).to eq 201 + expect(json_body.keys).to match_array extended_attributes + expect(json_body).to include(:profiles, :comments, :phones, :documents) + expect(json_body[:profiles][0][:last_name]).to eq user.profiles[0].last_name + expect(json_body[:profiles][0][:dob]).to eq user.profiles[0].dob.to_s + end + + let!(:phone) do + create(:phone, validated_at: 1.minutes.ago, user_id: user.id) + end + + it 'reads full user info by user phone' do + data[:phone_num] = phone.number + + do_request + expect(response.status).to eq 201 + expect(json_body.keys).to match_array extended_attributes + expect(json_body).to include(:profiles, :comments, :phones, :documents) + expect(json_body[:profiles][0][:last_name]).to eq user.profiles[0].last_name + expect(json_body[:profiles][0][:dob]).to eq user.profiles[0].dob.to_s + end + + it 'allows only one of phone, uid, email' do + data[:phone_num] = phone.number + data[:email] = user.email + data[:uid] = user.uid + do_request + expect(response.status).to eq 422 + expect_body.to eq(error: 'uid, email, phone_num are mutually exclusive') + end + + it 'denies access unless enough signatures are supplied' do + signers.clear.concat %i[james jeff] + do_request + expect(response.status).to eq 401 + end + + it 'denies when uid is not found' do + data[:uid] = 'invalid' + do_request + expect(response.status).to eq 404 + end + + it 'denies when email is not found' do + data[:email] = 'invalid' + do_request + expect(response.status).to eq 404 + end + + it 'denies when email is not found' do + data[:phone_num] = 'invalid' + do_request + expect(response.status).to eq 404 + end + + context 'when data is blank' do + let(:data) { {} } + + it 'renders errors' do + do_request + expect(response.status).to eq 422 + expect_body.to eq(error: 'uid, email, phone_num are missing, exactly one parameter must be provided') + end + end + end + + describe 'Returns array of users as collection' do + let(:data) do + { + scope: :read_users + } + end + let(:signers) { %i[alex jeff] } + + let(:do_request) do + post_json '/api/v2/management/users/list', + multisig_jwt_management_api_v2({ data: data }, *signers) + end + + context 'users' do + let!(:test_user) { create(:user, email: 'testa@gmail.com', role: 'admin') } + let!(:second_user) { create(:user, email: 'testb@gmail.com') } + let!(:third_user) { create(:user, email: 'testd@gmail.com') } + let!(:fourth_user) { create(:user, email: 'testc@gmail.com') } + + def validate_fields(user) + user.attributes.slice('email', 'role', 'level', 'otp', 'state', 'uid', 'data') + end + + include_context 'bearer authentication' + + let(:do_user_request) do + post_json '/api/v2/management/users/get', + multisig_jwt_management_api_v2({ data: data }), headers: auth_header + end + it 'denies access for user JWT instead of management signature' do + do_user_request + expect(response.status).to eq 401 + end + + it 'denies access unless enough signatures are supplied' do + signers.clear.concat %i[james jeff] + do_request + expect(response.status).to eq 401 + end + + it 'returns list of users' do + do_request + + users = JSON.parse(response.body) + expect(User.count).to eq users.count + expect(validate_fields(User.first)).to eq users.first.except('referral_uid') + expect(validate_fields(User.second)).to eq users.second.except('referral_uid') + expect(validate_fields(User.third)).to eq users.third.except('referral_uid') + expect(validate_fields(User.last)).to eq users.last.except('referral_uid') + end + + context 'pagination test' do + let(:users_list_params) do + { + scope: :read_users, + limit: 2 + } + end + + it 'returns 1st page as default, limit 2 users per page' do + users_list_params[:page] = 1 + post_json '/api/v2/management/users/list', multisig_jwt_management_api_v2({ data: users_list_params }, *signers), headers: auth_header + + expect(response.headers.fetch('Total')).to eq User.all.count.to_s + expect(response.headers.fetch('Page')).to eq '1' + expect(response.headers.fetch('Per-Page')).to eq '2' + end + + it 'returns 2nd page, limit 2 users per page' do + users_list_params[:page] = 2 + post_json '/api/v2/management/users/list', multisig_jwt_management_api_v2({ data: users_list_params }, *signers), headers: auth_header + + expect(response.headers.fetch('Total')).to eq User.all.count.to_s + expect(response.headers.fetch('Page')).to eq '2' + expect(response.headers.fetch('Per-Page')).to eq '2' + end + end + + context 'filtering test' do + let(:users_list_params) do + { + scope: :read_users + } + end + + it 'returns filtered list of users when only one filter param given created_at and from' do + users_list_params[:range] = 'created' + User.first.update(created_at: 5.hours.ago) + users_list_params[:from] = 8.hours.ago.to_i + users_list_params[:to] = 2.hours.ago.to_i + + post_json '/api/v2/management/users/list', multisig_jwt_management_api_v2({ data: users_list_params }, *signers), headers: auth_header + + expect(response.status).to eq 200 + expect(json_body.count).to eq (1) + end + + it 'returns filtered list of users when only one filter param given updated_at' do + users_list_params[:range] = 'updated' + User.first.update(updated_at: 5.hours.ago) + users_list_params[:from] = 8.hours.ago.to_i + users_list_params[:to] = 2.hours.ago.to_i + + post_json '/api/v2/management/users/list', multisig_jwt_management_api_v2({ data: users_list_params }, *signers), headers: auth_header + + expect(response.status).to eq 200 + expect(json_body.count).to eq (1) + expect(json_body[0]).not_to include(:profiles) + end + + it 'returns filetered list of users with extended param' do + users_list_params[:extended] = true + post_json '/api/v2/management/users/list', multisig_jwt_management_api_v2({ data: users_list_params }, *signers), headers: auth_header + expect(response.status).to eq 200 + expect(json_body[0]).to include(:profiles) + expect(json_body.first[:profiles][0][:last_name]).to eq user.profiles[0].last_name + expect(json_body.first[:profiles][0][:dob]).to eq user.profiles[0].dob.to_s + end + end + end + end + + describe 'Update role and data of existing user' do + let(:signers) { %i[alex jeff] } + let(:data) { params.merge(scope: :write_users) } + + let(:do_request) do + post_json '/api/v2/management/users/update', + multisig_jwt_management_api_v2({ data: data }, *signers) + end + + context 'when data is present' do + let!(:user) { create :user, :with_profile } + let(:params) do + { + uid: user.uid, + data: { nationality: 'us' }.to_json + } + end + it 'updates data field' do + do_request + + expect_status_to_eq 201 + expect(json_body).to include(:profiles) + expect(json_body[:profiles][0][:last_name]).to eq user.profiles[0].last_name + expect(json_body[:profiles][0][:dob]).to eq user.profiles[0].dob.to_s + expect(user.reload.data).to eq({ nationality: 'us' }.to_json) + end + end + + context 'when role is present' do + let(:user) { create :user } + let(:params) do + { + uid: user.uid, + role: 'admin' + } + end + it 'updates role field' do + do_request + + expect_status_to_eq 201 + expect(user.reload.role).to eq('admin') + end + end + + context 'when data and role are present' do + let(:user) { create :user } + let(:params) do + { + uid: user.uid, + data: { nationality: 'us' }.to_json, + role: 'admin' + } + end + it 'updates data and role fields' do + do_request + + expect_status_to_eq 201 + expect(user.reload.data).to eq({ nationality: 'us' }.to_json) + expect(user.reload.role).to eq('admin') + end + end + + context 'when none of parameters are present' do + let(:user) { create :user } + let(:params) do + { + uid: user.uid, + } + end + it 'renders error' do + do_request + + expect_status_to_eq 422 + expect_body.to eq(error: "role, data are missing, at least one parameter must be provided") + end + end + end + + describe 'Create an user' do + let(:signers) { %i[alex jeff] } + let(:data) { params.merge(scope: :write_users) } + + let(:do_request) do + post_json '/api/v2/management/users', + multisig_jwt_management_api_v2({ data: data }, *signers) + end + + context 'when password is present' do + context 'when email and password are valid' do + let(:params) do + { + email: 'valid_email@example.com', + password: 'Fai5aesoLEcx' + } + end + it 'creates an user' do + expect { do_request }.to change { User.count }.by(1) + expect_status_to_eq 201 + end + end + + context 'when params are blank' do + let(:params) { {} } + + it 'renders an error' do + do_request + expect_status_to_eq 422 + expect_body.to eq(error: 'email is missing, email is empty, password is missing, password is empty') + end + end + + context 'when email is bad' do + let(:params) { { email: 'bad_email', password: 'Password1' } } + + it 'renders an error' do + expect { do_request }.to_not change { User.count } + expect_status_to_eq 422 + expect_body.to eq(error: ['Email is invalid','Password weak']) + end + end + + context 'creates an account with referral uid' do + let(:params) { { email: 'test@test.com', password: 'Fai5aesoLEcx', referral_uid: User.last.uid } } + + it 'renders an error' do + expect { do_request }.to change { User.count }.by(1) + expect_status_to_eq 201 + expect(json_body).to include(:email, :uid, :role, :level, + :state, :otp, :profiles) + end + end + + context 'when password is bad' do + let(:params) { { email: 'valid_email@example.com', password: 'password' } } + + it 'renders an error' do + expect { do_request }.to_not change { User.count } + expect_status_to_eq 422 + expect(json_body[:error].first).to include 'Password requirements' + end + end + end + end + + describe 'Imports an existing user' do + let(:signers) { %i[alex jeff] } + let(:data) { params.merge(scope: :write_users) } + + let(:do_request) do + post_json '/api/v2/management/users/import', + multisig_jwt_management_api_v2({ data: data }, *signers) + end + + let!(:email) { 'valid_email@example.com' } + let!(:password) { 'Fai5aesoLEcx' } + let!(:password_digest) do + User.new(password: password).send(:password_digest) + end + let(:params) do + { email: email, password_digest: password_digest } + end + + context 'when email and password_hash are valid' do + it 'creates an user and signs in with credentials' do + expect { do_request }.to change { User.count }.by(1) + expect_status_to_eq 201 + expect(json_body).to include(:email, :uid, :role, :level, + :state, :otp, :profiles) + + # TODO: Check if imported user is able to login + end + end + + context 'when params are blank' do + let(:params) { {} } + + it 'renders an error' do + do_request + expect_status_to_eq 422 + expect_body.to eq(error: 'email is missing, email is empty, password_digest is missing, password_digest is empty') + end + end + + context 'when phone is provided' do + let(:params) do + { + email: email, + password_digest: password_digest, + phone: phone + } + end + + context 'when phone is valid' do + let(:phone) { build(:phone).number } + + it 'creates a phone' do + expect { do_request }.to change { Phone.count }.by(1) + expect_status_to_eq 201 + end + end + + context 'when phone is invalid' do + let(:phone) { '12345' } + + it 'renders an error' do + expect { do_request }.to_not change { Phone.count } + expect_status_to_eq 422 + expect(json_body[:error]).to eq ['Number is invalid'] + end + end + end + + context 'when profile params are provided' do + let(:params) do + { + email: email, + password_digest: password_digest + }.merge(profile_params) + end + + context 'when params are valid' do + let(:profile_params) do + { + first_name: Faker::Name.first_name, + last_name: Faker::Name.last_name, + dob: Faker::Date.birthday, + country: Faker::Address.country_code_long, + city: Faker::Address.city, + address: Faker::Address.state, + postcode: Faker::Address.zip_code + } + end + + it 'creates a profile' do + expect { do_request }.to change { Profile.count }.by(1) + result = JSON.parse(response.body) + expect(result['profiles'][0]['last_name']).to eq profile_params[:last_name] + expect(result['profiles'][0]['dob']).to eq profile_params[:dob].to_s + expect(result['profiles'][0]['state']).to eq 'drafted' + expect_status_to_eq 201 + end + end + + context 'when postcode is not provided' do + let(:profile_params) do + { + first_name: Faker::Name.first_name, + last_name: Faker::Name.last_name, + dob: Faker::Date.birthday, + country: Faker::Address.country_code_long, + city: Faker::Address.city, + address: Faker::Address.state + } + end + + it 'create a profile' do + expect { do_request }.to change { Profile.count } + result = JSON.parse(response.body) + expect(result['profiles'][0]['last_name']).to eq profile_params[:last_name] + expect(result['profiles'][0]['dob']).to eq profile_params[:dob].to_s + expect(result['profiles'][0]['state']).to eq 'drafted' + expect_status_to_eq 201 + end + end + + context 'when profile state is provided' do + let(:profile_params) do + { + first_name: Faker::Name.first_name, + last_name: Faker::Name.last_name, + dob: Faker::Date.birthday, + country: Faker::Address.country_code_long, + city: Faker::Address.city, + address: Faker::Address.state, + state: 'rejected' + } + end + + it 'create a profile' do + expect { do_request }.to change { Profile.count } + result = JSON.parse(response.body) + expect(result['profiles'][0]['last_name']).to eq profile_params[:last_name] + expect(result['profiles'][0]['dob']).to eq profile_params[:dob].to_s + expect(result['profiles'][0]['state']).to eq 'rejected' + expect_status_to_eq 201 + end + end + + context 'when params are invalid' do + let(:profile_params) do + { + first_name: Faker::Name.first_name, + last_name: Faker::Name.last_name, + dob: Faker::Date.birthday, + country: 'a', + city: Faker::Address.city, + address: Faker::Address.state, + postcode: Faker::Address.zip_code + } + end + + it 'renders an error' do + expect { do_request }.to_not change { Profile.count } + expect_status_to_eq 422 + expect(json_body[:error]).to eq ['Country must have alpha2 or alpha3 format'] + end + end + end + end + end diff --git a/spec/api/v2/public/general_spec.rb b/spec/api/v2/public/general_spec.rb new file mode 100644 index 0000000..289064a --- /dev/null +++ b/spec/api/v2/public/general_spec.rb @@ -0,0 +1,41 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe API::V2::Public::General do + describe 'GET /api/v2/public/time' do + it 'returns a server status' do + get '/api/v2/public/ping' + expect_status_to_eq(200) + expect(json_body[:ping]).to eq('pong') + end + end + + describe 'GET /api/v2/public/time' do + it 'returns a current UNIX time' do + get '/api/v2/public/time' + expect_status_to_eq(200) + expect(json_body[:time].to_i).to be <= Time.now.to_i + end + end + + describe 'GET /api/v2/public/configs' do + it 'returns some of the configurations' do + get '/api/v2/public/configs' + expect_status_to_eq(200) + expect(json_body[:session_expire_time]).to eq(Barong::App.config.session_expire_time) + expect(json_body[:captcha_type]).to eq(Barong::App.config.captcha) + expect(json_body[:phone_verification_type]).to eq(Barong::App.config.phone_verification) + end + + it 'returns all of the configurations with defaults' do + get '/api/v2/public/configs' + expect_status_to_eq(200) + expect(json_body[:session_expire_time]).to eq(Barong::App.config.session_expire_time) + expect(json_body[:captcha_type]).to eq(Barong::App.config.captcha) + expect(json_body[:phone_verification_type]).to eq(Barong::App.config.phone_verification) + expect(json_body[:password_min_entropy]).to eq(Barong::App.config.password_min_entropy) + expect(json_body[:password_regexp]).to eq(Barong::App.config.password_regexp.to_s) + end + end +end diff --git a/spec/api/v2/queries/activity_filter_spec.rb b/spec/api/v2/queries/activity_filter_spec.rb new file mode 100644 index 0000000..ae84d30 --- /dev/null +++ b/spec/api/v2/queries/activity_filter_spec.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +describe API::V2::Queries::ActivityFilter do + let(:initial_scope) { Activity.all } + let(:params) {{topic: 'session', action: 'login', uid: 'UI12345'}} + subject { described_class.new(initial_scope).call(params) } + + it 'filters by uid and action' do + case ActiveRecord::Base.connection.adapter_name + when 'Mysql2' + expect(subject.to_sql).to include("`topic` = 'session'") + expect(subject.to_sql).to include("`action` = 'login'") + expect(subject.to_sql).to include("`uid` = 'UI12345'") + when 'PostgreSQL' + expect(subject.to_sql).to include("\"topic\" = 'session'") + expect(subject.to_sql).to include("\"action\" = 'login'") + expect(subject.to_sql).to include("\"uid\" = 'UI12345'") + else + raise "Unsupported adapter: #{ActiveRecord::Base.connection.adapter_name}" + end + end +end diff --git a/spec/api/v2/resource/addresses_spec.rb b/spec/api/v2/resource/addresses_spec.rb new file mode 100644 index 0000000..f333e99 --- /dev/null +++ b/spec/api/v2/resource/addresses_spec.rb @@ -0,0 +1,135 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe 'Addresses API test' do + include_context 'bearer authentication' + let!(:create_member_permission) do + create :permission, + role: 'member' + end + let!(:image) { fixture_file_upload('/files/documents_test.jpg', 'image/jpg') } + before do + allow(Barong::App.config).to receive_messages(required_docs_expire: false) + end + + describe 'POST /api/v2/resource/addresses/' do + let(:params) do + { + country: 'UA', + address: 'Yaroslaviv Val 15', + city: 'Kiev', + postcode: '101010', + upload: [ + image + ] + } + end + + let(:last_document) { Document.last } + + it 'saves 10 address documents successfully' do + 10.times do + post '/api/v2/resource/addresses', headers: auth_header, + params: { + country: 'UA', + address: 'Yaroslaviv Val 15', + city: 'Kiev', + postcode: '101010', + upload: [fixture_file_upload('/files/documents_test.jpg', 'image/jpg')] + } + end + + expect(response.status).to eq(201) + end + + it 'uploads 2 files at once' do + post '/api/v2/resource/addresses', headers: auth_header, + params: { + country: 'UA', + address: 'Yaroslaviv Val 15', + city: 'Kiev', + postcode: '101010', + upload: [ + fixture_file_upload('/files/documents_test.jpg', 'image/jpg'), + fixture_file_upload('/files/documents_test.jpg', 'image/jpg') + ] + } + expect(response.status).to eq(201) + expect(test_user.documents.length).to eq(2) + end + + it 'uploads 3 files at once' do + post '/api/v2/resource/addresses', headers: auth_header, + params: { + country: 'UA', + address: 'Yaroslaviv Val 15', + city: 'Kiev', + postcode: '101010', + upload: [ + fixture_file_upload('/files/documents_test.jpg', 'image/jpg'), + fixture_file_upload('/files/documents_test.jpg', 'image/jpg'), + fixture_file_upload('/files/documents_test.jpg', 'image/jpg') + ] + } + expect(response.status).to eq(201) + expect(test_user.documents.length).to eq(3) + end + + it 'Checks if params are ok and returns success' do + post '/api/v2/resource/addresses', headers: auth_header, params: params + expect(response.status).to eq(201) + end + + it 'Creates a pending address label' do + expect(test_user.labels.find_by(key: :address)).to eq(nil) + post '/api/v2/resource/addresses', headers: auth_header, params: params + expect(response.status).to eq(201) + expect(test_user.labels.find_by(key: :address)).not_to eq(nil) + expect(test_user.labels.find_by(key: :address).value).to eq('pending') + end + + it 'Update rejected or verified label to pending documents label on new doc' do + expect(test_user.labels.find_by(key: :address)).to eq(nil) + test_user.labels.create(key: :address, value: 'verified') + test_user.reload + + post '/api/v2/resource/addresses', headers: auth_header, params: params + expect(response.status).to eq(201) + expect(test_user.labels.find_by(key: :address)).not_to eq(nil) + expect(test_user.labels.find_by(key: :address).value).to eq('pending') + end + + it 'triggers KYCService' do + expect(KycService).to receive(:address_step) + post '/api/v2/resource/addresses', headers: auth_header, params: params + expect(response.status).to eq(201) + end + end + + context 'event API behavior' do + let!(:url) { '/api/v2/resource/addresses' } + let(:request_params) do + { + country: 'UA', + address: 'Yaroslaviv Val 15', + city: 'Kiev', + postcode: '101010', + upload: [ + image + ] + } + end + + before do + allow(EventAPI).to receive(:notify) + end + + it 'receive model.document.created notify' do + expect(EventAPI).to receive(:notify).ordered.with('model.user.created', hash_including(:record)) + expect(EventAPI).to receive(:notify).ordered.with('model.document.created', hash_including(:record)) + + post url, headers: auth_header, params: request_params + end + end +end diff --git a/spec/api/v2/resource/api_keys_spec.rb b/spec/api/v2/resource/api_keys_spec.rb new file mode 100644 index 0000000..b6ad9d1 --- /dev/null +++ b/spec/api/v2/resource/api_keys_spec.rb @@ -0,0 +1,263 @@ +# frozen_string_literal: true + +describe 'Api::V2::APIKeys' do + include_context 'bearer authentication' + let!(:create_member_permission) do + create :permission, + role: 'member' + end + let!(:create_admin_permission) do + create :permission, + role: 'admin' + end + let!(:test_user) { create(:user, otp: otp_enabled) } + let(:otp_enabled) { true } + let!(:first_api_key) { create :api_key, key_holder_account: test_user } + let!(:second_api_key) { create :api_key, key_holder_account: test_user } + let(:valid_otp_code) { '1357' } + let(:invalid_otp_code) { '1234' } + let(:otp_code) { valid_otp_code } + + before do + allow(TOTPService).to receive(:validate?) + .with(test_user.uid, valid_otp_code) { true } + allow(TOTPService).to receive(:validate?) + .with(test_user.uid, invalid_otp_code) { false } + allow(TOTPService).to receive(:validate?) + .with(test_user.uid, nil) { false } + end + + describe 'GET /api/v2/resource/api_keys/' do + let(:get_params) do + { + ordering: 'asc', + oreder_by: 'id' + } + end + let(:post_params) do + { + scope: 'trade', + algorithm: 'HS256' + } + end + let(:do_request) do + post '/api/v2/resource/api_keys', + params: post_params.merge(totp_code: otp_code), + headers: auth_header + end + let(:do_get_request) { get "/api/v2/resource/api_keys", params: get_params, headers: auth_header } + let(:expected_fields) do + { + kid: first_api_key.kid, + state: first_api_key.state, + scope: %w[trade] + } + end + let(:totp_code) { valid_otp_code } + + it 'Return api key for current account in ASC order' do + do_get_request + + expect(json_body.count).to eq 2 + expect(response.status).to eq(200) + expect(json_body.first).to include(expected_fields) + end + + it 'Return api key for current account in DESC order' do + get_params.merge!(ordering: 'desc') + do_get_request + + expect(json_body.count).to eq 2 + expect(response.status).to eq(200) + expect(json_body.second).to include(expected_fields) + end + + context 'when invalid ordering' do + it 'renders an error' do + get_params.merge!(ordering: 'resc') + do_get_request + + expect(response.status).to eq(422) + expect_body.to eq(errors: ["resource.api_key.invalid_ordering"]) + end + end + + context 'when invalid order_by' do + it 'renders an error' do + get_params.merge!(order_by: 'invalid') + do_get_request + + expect(response.status).to eq(422) + expect_body.to eq(errors: ["resource.api_key.invalid_attribute"]) + end + end + + context 'when otp is not enabled' do + let(:otp_enabled) { false } + + it 'renders an error' do + do_request + expect(response.status).to eq(400) + expect_body.to eq(errors: ["resource.api_key.2fa_disabled"]) + end + end + + context 'when code is invalid' do + let(:otp_code) { invalid_otp_code } + + it 'renders an error' do + do_request + expect(response.status).to eq(422) + expect_body.to eq(errors: ["resource.api_key.invalid_totp"]) + end + end + end + + describe 'POST /api/v2/resource/api_keys' do + let(:do_request) do + post '/api/v2/resource/api_keys', + params: params.merge(totp_code: otp_code), + headers: auth_header + end + let(:otp_code) { valid_otp_code } + + context 'when fields are valid' do + let(:params) do + { + scope: 'trade', + algorithm: 'HS256' + } + end + let(:expected_fields) do + { + state: 'active', + scope: params[:scope].split(','), + algorithm: 'HS256' + } + end + + it 'Create an api key' do + expect { do_request }.to change { APIKey.count }.by(1) + expect(response.status).to eq(201) + expect_body.to include(expected_fields) + end + + it 'does not create api key if vault is down' do + allow(Vault::Rails).to receive(:encrypt).and_raise(Vault::VaultError) + expect { do_request }.not_to change { APIKey.count } + expect(response.status).to eq(422) + expect_body.to eq(errors: ["api_key.could_not_save_secret"]) + end + + context 'when otp is not enabled' do + let(:otp_enabled) { false } + + it 'renders an error' do + do_request + expect(response.status).to eq(400) + expect_body.to eq(errors: ["resource.api_key.2fa_disabled"]) + end + end + + context 'when code is invalid' do + let(:otp_code) { invalid_otp_code } + + it 'renders an error' do + do_request + expect(response.status).to eq(422) + expect_body.to eq(errors: ["resource.api_key.invalid_totp"]) + end + end + + context 'when algorithm is invalid' do + it 'renders an error' do + params[:algorithm] = 'kek' + do_request + expect_body.to eq(errors: ["kid.blank", "algorithm.inclusion"]) + end + end + end + end + + describe 'PATCH /api/v2/resource/api_keys/:kid' do + let(:do_request) do + patch "/api/v2/resource/api_keys/#{first_api_key.kid}", params: params.merge(totp_code: otp_code), + headers: auth_header + end + let(:otp_code) { valid_otp_code } + context 'when valid fields' do + let(:params) do + { + state: 'inactive', + scope: 'sell', + algorithm: 'HS256' + } + end + + it 'Updates a state' do + expect { do_request }.to change { first_api_key.reload.state } + .from('active').to('inactive') + expect(response.status).to eq(200) + end + + it 'Updates a scope' do + expect { do_request }.to change { first_api_key.reload.scope } + .from(['trade']).to(['sell']) + expect(response.status).to eq(200) + end + + context 'when otp is not enabled' do + let(:otp_enabled) { false } + + it 'renders an error' do + do_request + expect(response.status).to eq(400) + expect_body.to eq(errors: ["resource.api_key.2fa_disabled"]) + end + end + + context 'when code is invalid' do + let(:otp_code) { invalid_otp_code } + + it 'renders an error' do + do_request + expect(response.status).to eq(422) + expect_body.to eq(errors: ["resource.api_key.invalid_totp"]) + end + end + end + end + + describe 'DELETE /api/v2/resource/api_keys/:uid' do + let(:do_request) do + delete "/api/v2/resource/api_keys/#{first_api_key.kid}?totp_code=#{otp_code}", + headers: auth_header + end + let(:otp_code) { valid_otp_code } + + it 'Removes an api key' do + do_request + expect(response.status).to eq(204) + end + + context 'when otp is not enabled' do + let(:otp_enabled) { false } + + it 'renders an error' do + do_request + expect(response.status).to eq(400) + expect_body.to eq(errors: ["resource.api_key.2fa_disabled"]) + end + end + + context 'when code is invalid' do + let(:otp_code) { invalid_otp_code } + + it 'renders an error' do + do_request + expect(response.status).to eq(422) + expect_body.to eq(errors: ["resource.api_key.invalid_totp"]) + end + end + end +end diff --git a/spec/api/v2/resource/data_storage_spec.rb b/spec/api/v2/resource/data_storage_spec.rb new file mode 100644 index 0000000..e9e1d49 --- /dev/null +++ b/spec/api/v2/resource/data_storage_spec.rb @@ -0,0 +1,58 @@ +# frozen_string_literal: true + +describe 'Api::V2::Resource::DataStorage' do + include_context 'bearer authentication' + let!(:create_member_permission) do + create :permission, + role: 'member' + end + + describe 'POST /api/v2/resource/data_storage' do + let(:url) { '/api/v2/resource/data_storage' } + + context 'successful creation' do + let(:valid_params) do + { + title: 'personal', + data: { wife_last_name: Faker::Name.last_name, wife_first_name: Faker::Name.first_name }.to_json + } + end + + it 'creates data_storage record' do + expect { post url, params: valid_params, headers: auth_header }.to change { DataStorage.count }.by(1) + expect(response.status).to eq(201) + end + + it 'creates a label when recording data_storage' do + expect { post url, params: valid_params, headers: auth_header }.to change { Label.count }.by(1) + expect(response.status).to eq(201) + expect(test_user.labels.find_by(key: valid_params[:title])).not_to be_nil + end + end + + context 'errors' do + let(:non_json_data_params) { { title: 'personal', data: 'My name is John Doe. Hello, World!' } } + let(:non_whitelisted_params) { { title: 'family_info', data: { wife_first_name: Faker::Name.first_name }.to_json } } + let(:blacklisted_params) { { title: 'document', data: { approved: true }.to_json } } + + it 'doesnt accept non-json data' do + expect { post url, params: non_json_data_params, headers: auth_header }.not_to change { DataStorage.count } + + expect(response.status).to eq(422) + expect(json_body).to eq({errors: ['data.invalid_format']}) + end + + it 'doesnt accept non-whitelisted title' do + expect { post url, params: non_whitelisted_params, headers: auth_header }.not_to change { DataStorage.count } + expect(response.status).to eq(422) + expect(json_body).to eq({errors: ['title.inclusion']}) + end + + it 'doesnt accept blacklisted title' do + expect { post url, params: blacklisted_params, headers: auth_header }.not_to change { DataStorage.count } + expect(response.status).to eq(422) + expect(json_body).to eq({errors: ['title.inclusion', 'title.exclusion']}) + end + end + end +end diff --git a/spec/api/v2/resource/documents_spec.rb b/spec/api/v2/resource/documents_spec.rb new file mode 100644 index 0000000..8a1d9b0 --- /dev/null +++ b/spec/api/v2/resource/documents_spec.rb @@ -0,0 +1,288 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe 'Documents API test' do + include_context 'bearer authentication' + let!(:create_member_permission) do + create :permission, + role: 'member' + end + let!(:image) { fixture_file_upload('/files/documents_test.jpg', 'image/jpg') } + + describe 'POST /api/v2/resource/documents/' do + let(:params) do + { + doc_type: 'Passport', + doc_expire: '3020-01-22', + doc_number: 'AA1234BB', + doc_category: 'front_side', + upload: [ + image + ] + } + end + + let!(:optional_params) do + { + metadata: { country: Faker::Address.country }.to_json + } + end + + let(:last_document) { Document.last } + + it 'saves 10 documents successfully' do + 10.times do + post '/api/v2/resource/documents', headers: auth_header, + params: { + doc_type: 'Passport', + doc_expire: '3020-01-22', + doc_number: 'AA1234BB', + upload: [fixture_file_upload('/files/documents_test.jpg', 'image/jpg')] + } + end + + expect(response.status).to eq(201) + end + + it 'renders an error when max documents already reached' do + 11.times do + post '/api/v2/resource/documents', headers: auth_header, + params: { + doc_type: 'Passport', + doc_expire: '3020-01-22', + doc_number: 'AA1234BB', + upload: [fixture_file_upload('/files/documents_test.jpg', 'image/jpg')] + } + end + + expect(response.status).to eq(400) + expect_body.to eq(errors: ['resource.documents.limit_will_be_reached']) + end + + it 'uploads 2 files at once' do + post '/api/v2/resource/documents', headers: auth_header, + params: { + doc_type: 'Passport', + doc_expire: '3020-01-22', + doc_number: 'AA1234BB', + upload: [ + fixture_file_upload('/files/documents_test.jpg', 'image/jpg'), + fixture_file_upload('/files/documents_test.jpg', 'image/jpg') + ] + } + expect(response.status).to eq(201) + expect(test_user.documents.length).to eq(2) + end + + it 'uploads 3 files at once' do + post '/api/v2/resource/documents', headers: auth_header, + params: { + doc_type: 'Passport', + doc_expire: '3020-01-22', + doc_number: 'AA1234BB', + upload: [ + fixture_file_upload('/files/documents_test.jpg', 'image/jpg'), + fixture_file_upload('/files/documents_test.jpg', 'image/jpg'), + fixture_file_upload('/files/documents_test.jpg', 'image/jpg') + ] + } + expect(response.status).to eq(201) + expect(test_user.documents.length).to eq(3) + end + + it 'doesn\'t upload more than 10 files at once' do + post '/api/v2/resource/documents', headers: auth_header, + params: { + doc_type: 'Passport', + doc_expire: '3020-01-22', + doc_number: 'AA1234BB', + upload: [ + fixture_file_upload('/files/documents_test.jpg', 'image/jpg'), + fixture_file_upload('/files/documents_test.jpg', 'image/jpg'), + fixture_file_upload('/files/documents_test.jpg', 'image/jpg'), + fixture_file_upload('/files/documents_test.jpg', 'image/jpg'), + fixture_file_upload('/files/documents_test.jpg', 'image/jpg'), + fixture_file_upload('/files/documents_test.jpg', 'image/jpg'), + fixture_file_upload('/files/documents_test.jpg', 'image/jpg'), + fixture_file_upload('/files/documents_test.jpg', 'image/jpg'), + fixture_file_upload('/files/documents_test.jpg', 'image/jpg'), + fixture_file_upload('/files/documents_test.jpg', 'image/jpg'), + fixture_file_upload('/files/documents_test.jpg', 'image/jpg') + ] + } + expect(response.status).to eq(400) + end + + it 'Checks if params are ok and returns success' do + post '/api/v2/resource/documents', headers: auth_header, params: params + expect(response.status).to eq(201) + end + + it 'Creates a pending documents label' do + expect(test_user.labels.find_by(key: :document)).to eq(nil) + post '/api/v2/resource/documents', headers: auth_header, params: params + expect(response.status).to eq(201) + expect(test_user.labels.find_by(key: :document)).to eq(nil) + post '/api/v2/resource/documents', headers: auth_header, + params: params.merge({ doc_category: 'selfie', + upload: [fixture_file_upload('/files/documents_test.jpg', 'image/jpg')], + identificator: test_user.documents.last.identificator }) + expect(test_user.labels.find_by(key: :document).value).to eq('pending') + end + + it 'Update rejected or verified label to pending documents label on new doc' do + expect(test_user.labels.find_by(key: :document)).to eq(nil) + test_user.labels.create(key: :document, value: 'verified') + test_user.reload + + post '/api/v2/resource/documents', headers: auth_header, params: params + expect(response.status).to eq(201) + expect(test_user.labels.find_by(key: :document)).not_to eq(nil) + expect(test_user.labels.find_by(key: :document).value).to eq('verified') + post '/api/v2/resource/documents', headers: auth_header, + params: params.merge({ doc_category: 'selfie', + upload: [fixture_file_upload('/files/documents_test.jpg', 'image/jpg')], + identificator: test_user.documents.last.identificator }) + expect(test_user.labels.find_by(key: :document).value).to eq('pending') + end + + it 'triggers KYCService' do + expect(KycService).to receive(:document_step) + post '/api/v2/resource/documents', headers: auth_header, params: params + expect(response.status).to eq(201) + end + + it 'Creates document with optional params and returns success' do + post '/api/v2/resource/documents', headers: auth_header, params: params.merge(optional_params) + expect(response.status).to eq(201) + expect(last_document.metadata).to eq(optional_params[:metadata]) + end + + it 'renders an error if metadata is not json' do + post '/api/v2/resource/documents', headers: auth_header, params: params.merge({ metadata: '{ bar: baz }' }) + expect_status_to_eq 422 + expect_body.to eq(errors: ['metadata.invalid_format']) + end + + it 'Checks provided params and returns error, cause some of them are not valid or absent' do + post '/api/v2/resource/documents', params: params.except(:doc_type), headers: auth_header + expect_body.to eq(errors: ['resource.document.missing_doc_type', 'resource.document.empty_doc_type']) + expect(response.status).to eq(422) + + post '/api/v2/resource/documents', params: params.except(:doc_number), headers: auth_header + expect_body.to eq(errors: ['resource.document.missing_doc_number', 'resource.document.empty_doc_number']) + expect(response.status).to eq(422) + + post '/api/v2/resource/documents', params: params.except(:upload), headers: auth_header + expect_body.to eq(errors: ['resource.document.missing_upload']) + expect(response.status).to eq(422) + + post '/api/v2/resource/documents', params: params.except(:doc_expire).merge(doc_expire: 'blah'), headers: auth_header + expect_body.to eq(errors: ['resource.documents.expire_not_a_date']) + expect(response.status).to eq(422) + + params0 = params + params0[:upload] = [Faker::Avatar.image] + post '/api/v2/resource/documents', params: params0, headers: auth_header + expect_body.to eq(errors: ['upload.blank']) + expect(response.status).to eq(422) + end + + it 'Does not return error when docs expire is optional' do + allow(Barong::App.config).to receive(:required_docs_expire).and_return(false) + post '/api/v2/resource/documents', params: params.except(:doc_expire), headers: auth_header + expect(response.status).to eq(201) + end + + it 'Returns error when docs expire is not optional' do + allow(Barong::App.config).to receive(:required_docs_expire).and_return(true) + post '/api/v2/resource/documents', params: params.except(:doc_expire), headers: auth_header + expect(response.status).to eq(422) + expect_body.to eq({ errors: ['resource.documents.invalid_format'] }) + end + + it 'Returns error when docs expire is not optional and date in past' do + allow(Barong::App.config).to receive(:required_docs_expire).and_return(true) + post '/api/v2/resource/documents', params: params.merge({ doc_expire: DateTime.now.to_date - 1 }), headers: auth_header + expect(response.status).to eq(422) + expect_body.to eq({ errors: ['resource.documents.already_expired'] }) + end + + it 'Doesnt return error when docs expire is optional and date in past' do + allow(Barong::App.config).to receive(:required_docs_expire).and_return(false) + post '/api/v2/resource/documents', params: params.merge({ doc_expire: DateTime.now.to_date - 1 }), headers: auth_header + expect(response.status).to eq(201) + end + + it 'Returns user all his documents' do + post '/api/v2/resource/documents', params: params, headers: auth_header + expect(response.status).to eq(201) + + get '/api/v2/resource/documents', headers: auth_header + response_arr = JSON.parse(response.body) + + expect(response_arr.count).to eq(1) + expect(response_arr.last['upload']).to_not be_nil + expect(response_arr.last['doc_type']).to eq('Passport') + expect(response_arr.last['doc_expire']).to eq('3020-01-22') + expect(response_arr.last['doc_number']).to eq('AA****BB') + expect(response.status).to eq(200) + end + + context 'without masking' do + before do + Barong::App.config.stub(:api_data_masking_enabled).and_return(false) + end + + it 'Returns user all his documents' do + post '/api/v2/resource/documents', params: params, headers: auth_header + expect(response.status).to eq(201) + + get '/api/v2/resource/documents', headers: auth_header + response_arr = JSON.parse(response.body) + + expect(response_arr.count).to eq(1) + expect(response_arr.last['upload']).to_not be_nil + expect(response_arr.last['doc_type']).to eq('Passport') + expect(response_arr.last['doc_expire']).to eq('3020-01-22') + expect(response_arr.last['doc_number']).to eq('AA1234BB') + expect(response.status).to eq(200) + end + end + + it 'Returns error without token' do + post '/api/v2/resource/documents', params: params + expect(response.status).to eq(401) + + get '/api/v2/resource/documents', params: params + expect(response.status).to eq(401) + end + after(:all) { User.destroy_all } + end + + context 'event API behavior' do + let!(:url) { '/api/v2/resource/documents' } + let(:request_params) do + { + doc_type: 'Passport', + doc_expire: '3020-01-22', + doc_number: 'AA1234BB', + upload: [ + image + ] + } + end + + before do + allow(EventAPI).to receive(:notify) + end + + it 'receive model.document.created notify' do + expect(EventAPI).to receive(:notify).ordered.with('model.user.created', hash_including(:record)) + expect(EventAPI).to receive(:notify).ordered.with('model.document.created', hash_including(:record)) + + post url, headers: auth_header, params: request_params + end + end +end diff --git a/spec/api/v2/resource/labels_spec.rb b/spec/api/v2/resource/labels_spec.rb new file mode 100644 index 0000000..b44139f --- /dev/null +++ b/spec/api/v2/resource/labels_spec.rb @@ -0,0 +1,88 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe 'Labels API.' do + include_context 'bearer authentication' + let!(:create_member_permission) do + create :permission, + role: 'member' + end + let!(:create_admin_permission) do + create :permission, + role: 'admin' + end + let(:post_params) do + { + key: ::Faker::Internet.slug(glue: '-'), + value: ::Faker::Internet.slug(glue: '-') + } + end + + context 'Happy paths for the current user.' do + let(:test_user) { create(:user, role: "admin") } + let!(:label) { create :label, user: test_user } + let!(:label2) { create :label, user: test_user } + let!(:label3) { create :label, user: test_user } + + it 'Return lables for current user' do + get '/api/v2/resource/labels', headers: auth_header + + expect(response.status).to eq(200) + expect(json_body.size).to eq(3) + expect(json_body.last[:key]).to eq(label3.key) + end + + it 'Return a label by key' do + get "/api/v2/resource/labels/#{label.key}", headers: auth_header + expect(response.status).to eq(200) + expect(json_body[:key]).to eq(label.key) + end + + it 'Create a label' do + post '/api/v2/resource/labels', params: post_params, headers: auth_header + expect(response.status).to eq(201) + persisted = Label.find_by(key: json_body[:key]) + expect(persisted.key).to eq(post_params[:key]) + expect(persisted.value).to eq(post_params[:value]) + expect(persisted.scope).to eq('public') + expect(persisted.user_id).to eq(test_user.id) + end + + it 'Update a label' do + patch "/api/v2/resource/labels/#{label.key}", params: post_params, headers: auth_header + expect(response.status).to eq(200) + persisted = Label.find_by(key: label.key) + expect(persisted.value).to eq(post_params[:value]) + expect(persisted.scope).to eq('public') + end + + it 'Delete a label' do + delete "/api/v2/resource/labels/#{label.key}", headers: auth_header + expect(response.status).to eq(204) + expect(Label.find_by(key: label.key)).to be_nil + end + end + + context 'Errors.' do + let(:test_user) { create(:user, role: "admin") } + let!(:label) { create :label, user: test_user } + + it 'Respond with errors on create if existing key is used for current user' do + post '/api/v2/resource/labels', params: post_params.merge(key: label.key), headers: auth_header + expect(response.status).to eq(422) + expect(response.body).to be_include('key.taken') + end + + it 'Respond with error if attempted to update a private label' do + label.update(scope: 'private') + patch "/api/v2/resource/labels/#{label.key}", params: post_params, headers: auth_header + expect(response.status).to eq(400) + end + + it 'Respond with error if key not found' do + get '/api/v2/resource/labels/blah', headers: auth_header + expect(response.status).to eq(404) + end + end +end diff --git a/spec/api/v2/resource/otp_spec.rb b/spec/api/v2/resource/otp_spec.rb new file mode 100644 index 0000000..4c85ef0 --- /dev/null +++ b/spec/api/v2/resource/otp_spec.rb @@ -0,0 +1,129 @@ +# frozen_string_literal: true + +describe 'Api::V2::Resource::Otp' do + include_context 'bearer authentication' + let!(:create_member_permission) do + create :permission, + role: 'member' + end + let(:do_request) { post '/api/v2/resource/otp/enable', headers: auth_header } + let(:otp_code) { '111111' } + + context 'valid request' do + before do + allow(TOTPService).to receive(:validate?) + .with(test_user.uid, otp_code) { true } + end + + it 'user enables 2fa successfully' do + post '/api/v2/resource/otp/enable', headers: auth_header, params: { + code: otp_code + } + + expect(response.status).to eq 201 + expect(test_user.reload.otp).to eq true + expect(test_user.reload.labels.find_by(key: :otp, scope: :private)).not_to eq nil + end + + it 'user disables 2fa successfully' do + test_user.update(otp: true) + test_user.labels.create(value: 'verified', key: :otp, scope: :private) + post '/api/v2/resource/otp/disable', headers: auth_header, params: { + code: otp_code + } + + expect(response.status).to eq 200 + expect(test_user.reload.otp).to eq false + expect(test_user.reload.labels.find_by(key: :otp, scope: :private)).to eq nil + end + + it 'user verify otp Code' do + + test_user.update(otp: true) + test_user.labels.create(value: 'verified', key: :otp, scope: :private) + + post '/api/v2/resource/otp/verify', headers: auth_header, params: { + code: otp_code + } + + expect(response.status).to eq 201 + expect(test_user.reload.otp).to eq true + expect(test_user.reload.labels.find_by(key: :otp, scope: :private)).not_to eq nil + end + end + + context 'incomplete request' do + it 'user receives error in enabling' do + post '/api/v2/resource/otp/enable', headers: auth_header, params: { + code: otp_code + } + + expect(response.status).to eq 422 + expect(test_user.reload.otp).to eq false + expect(test_user.reload.labels.find_by(key: :otp, scope: :private)).to eq nil + end + + it 'user receives error in disabling' do + test_user.update(otp: true) + test_user.labels.create(key: :otp, scope: :private) + post '/api/v2/resource/otp/disable', headers: auth_header, params: { + code: otp_code + } + + expect(response.status).to eq 422 + expect(test_user.reload.otp).to eq true + expect(test_user.reload.labels.find_by(key: :otp, scope: :private)).to eq nil + end + + end + + + context 'already done' do + before do + allow(TOTPService).to receive(:validate?) + .with(test_user.uid, otp_code) { true } + end + + it 'enabling otp' do + test_user.update(otp: true) + test_user.labels.create(value: 'verified', key: :otp, scope: :private) + post '/api/v2/resource/otp/enable', headers: auth_header, params: { + code: otp_code + } + + expect(response.status).to eq 400 + expect(test_user.reload.otp).to eq true + expect(test_user.reload.labels.find_by(key: :otp, scope: :private)).not_to eq nil + end + + it 'disabling otp' do + post '/api/v2/resource/otp/disable', headers: auth_header, params: { + code: otp_code + } + + expect(response.status).to eq 400 + expect(test_user.reload.otp).to eq false + expect(test_user.reload.labels.find_by(key: :otp, scope: :private)).to eq nil + end + + it 'otp disabled' do + post '/api/v2/resource/otp/verify', headers: auth_header, params: { + code: otp_code + } + + expect(response.status).to eq 400 + expect(test_user.reload.otp).to eq false + expect(test_user.reload.labels.find_by(key: :otp, scope: :private)).to eq nil + end + + it 'otp enabled' do + test_user.update(otp: true) + test_user.labels.create(value: 'verified', key: :otp, scope: :private) + post '/api/v2/resource/otp/generate_qrcode', headers: auth_header + + expect(response.status).to eq 400 + expect(test_user.reload.otp).to eq true + expect(test_user.reload.labels.find_by(key: :otp, scope: :private)).not_to eq nil + end + end +end diff --git a/spec/api/v2/resource/phones_spec.rb b/spec/api/v2/resource/phones_spec.rb new file mode 100644 index 0000000..37e5bf4 --- /dev/null +++ b/spec/api/v2/resource/phones_spec.rb @@ -0,0 +1,469 @@ +# frozen_string_literal: true + +describe 'Api::V2::Resources::Phones' do + include_context 'bearer authentication' + let!(:create_member_permission) do + create :permission, + role: 'member' + end + + context 'Twilio Verify Service' do + before do + allow(Barong::App.config).to receive(:twilio_provider).and_return(TwilioVerifyService) + end + + describe 'GET /api/v2/resource/phones' do + let!(:phone1) { create(:phone, user: test_user) } + let!(:phone2) { create(:phone, user: test_user, number: 12345677711 ) } + let(:do_request) do + get '/api/v2/resource/phones', headers: auth_header + end + + it 'returns list of user\'s phones' do + do_request + + expect(json_body.length).to eq 2 + + expect(json_body.first[:number]).to eq phone1.sub_masked_number + expect(json_body.first[:country]).to eq phone1.country + expect(json_body.first[:validated_at]).to eq phone1.validated_at + expect(json_body.second[:number]).to eq phone2.sub_masked_number + expect(json_body.second[:country]).to eq phone2.country + expect(json_body.second[:validated_at]).to eq phone2.validated_at + end + + context 'list of users phone without masking' do + before do + Barong::App.config.stub(:api_data_masking_enabled).and_return(false) + end + + it 'returns list of user\'s phones' do + do_request + + expect(json_body.length).to eq 2 + + expect(json_body.first[:number]).to eq phone1.number + expect(json_body.first[:country]).to eq phone1.country + expect(json_body.first[:validated_at]).to eq phone1.validated_at + expect(json_body.second[:number]).to eq phone2.number + expect(json_body.second[:country]).to eq phone2.country + expect(json_body.second[:validated_at]).to eq phone2.validated_at + end + end + end + + describe 'POST /api/v2/resource/phones' do + let(:do_request) do + post '/api/v2/resource/phones', params: params, headers: auth_header + end + let(:phone_number) { nil } + + let(:params) { { phone_number: phone_number, channel: 'sms' } } + + describe 'errors: ' do + context 'when phone is missing' do + let(:phone_number) { nil } + + it 'renders an error' do + do_request + expect_body.to eq(errors: ["resource.phone.empty_phone_number"]) + expect_status.to eq 422 + end + end + + context 'when phone is invalid' do + let(:phone_number) { '123' } + + it 'renders an error' do + do_request + expect_body.to eq(errors: ["resource.phone.invalid_num"]) + expect_status.to eq 400 + end + end + + context 'when phone is already exists' do + let!(:phone) do + create(:phone, validated_at: validated_at) + end + let(:phone_number) { phone.number } + + context 'when phone verified' do + let(:validated_at) { 1.minutes.ago } + + it 'renders an error' do + do_request + expect_body.to eq(errors: ["resource.phone.number_exist"]) + expect_status.to eq 400 + end + end + + context 'when phone is not verified' do + let(:validated_at) { 1.minutes.ago } + + it 'renders an error' do + do_request + expect_body.to eq(errors: ["resource.phone.number_exist"]) + expect_status.to eq 400 + end + end + + context 'when phone verified but number is not sanitized' do + let(:validated_at) { 1.minutes.ago } + let(:phone_number) { "++#{phone.number}" } + + it 'renders an error' do + do_request + expect_body.to eq(errors: ["resource.phone.number_exist"]) + expect_status.to eq 400 + end + end + end + end + + context 'valid story' do + before do + allow(Barong::App.config.twilio_provider).to receive(:send_code).and_return(false) + end + + context 'when phone is not verified' do + let(:phone_number) { build(:phone).number } + + it 'assigns a phone to account and send sms' do + do_request + expect_body.to eq(message: 'Code was sent successfully via sms') + expect_status.to eq 201 + end + end + + context 'when phone is valid' do + let(:phone_number) { build(:phone).number } + + it 'creates a phone and send code via sms channel' do + do_request + expect_body.to eq(message: 'Code was sent successfully via sms') + expect_status.to eq 201 + end + + it 'creates a phone and send code via call channel' do + params['channel'] = 'call' + + do_request + expect_body.to eq(message: 'Code was sent successfully via call') + expect_status.to eq 201 + end + end + end + + context 'when phone is on national format with zero' do + let(:phone_number) { '+44 07418084106' } + let(:international_phone) { '447418084106' } + + it 'creates a phone and send sms' do + allow(Barong::App.config.twilio_provider).to receive(:send_code).and_return(false) + + do_request + expect_body.to eq(message: 'Code was sent successfully via sms') + expect_status.to eq 201 + expect(Phone.last.number).to eq(international_phone) + end + end + + context 'when phone exists on international format' do + let(:phone_number) { '+44 07418084106' } + let(:international_phone) { '447418084106' } + let!(:phone) do + create(:phone, validated_at: 1.minute.ago, number: international_phone) + end + + it 'renders an error' do + do_request + expect_body.to eq errors: ["resource.phone.number_exist"] + expect_status.to eq 400 + end + end + end + + describe 'POST /api/v2/resource/phones/verify' do + let(:do_request) do + post '/api/v2/resource/phones/verify', params: params, headers: auth_header + end + let(:params) do + { + phone_number: phone_number, + verification_code: verification_code + } + end + let(:verification_code) { '12345' } + + context 'when phone is missing and code is missing' do + let(:phone_number) { nil } + let(:verification_code) { '' } + + it 'renders an error' do + do_request + expect_body.to eq(errors: ["resource.phone.empty_phone_number", "resource.phone.empty_verification_code"]) + expect_status.to eq 422 + end + end + + context 'when phone is invalid' do + let(:phone_number) { '123' } + + it 'renders an error' do + do_request + expect_body.to eq(errors: ["resource.phone.invalid_num"]) + expect_status.to eq 400 + end + end + + context 'when phone is already exists and verified' do + let!(:phone) do + create(:phone, validated_at: 1.minutes.ago) + end + let(:phone_number) { phone.number } + + it 'renders an error' do + do_request + expect_body.to eq(errors: ["resource.phone.number_exist"]) + expect_status.to eq 400 + end + end + + context 'when phone exists in international format' do + let!(:phone) do + create(:phone, validated_at: 1.minutes.ago, number: international_phone) + end + let(:phone_number) { '+44 07418084106' } + let(:international_phone) { '447418084106' } + + it 'renders an error' do + do_request + expect_body.to eq(errors: ["resource.phone.number_exist"]) + expect_status.to eq 400 + end + end + + context 'when phone is not found in test_user' do + let!(:phone) { create(:phone) } + let(:phone_number) { phone.number } + + it 'rendens an error' do + allow(Barong::App.config.twilio_provider).to receive(:verify_code?).and_return(false) + + do_request + expect_body.to eq(errors: ["resource.phone.doesnt_exist"]) + expect_status.to eq 404 + end + end + + context 'when phone is found in test_user but code is invalid' do + let!(:phone) { create(:phone, user: test_user) } + let(:phone_number) { phone.number } + + it 'rendens an error' do + allow(Barong::App.config.twilio_provider).to receive(:verify_code?).and_return(false) + + do_request + expect_body.to eq(errors: ["resource.phone.verification_invalid"]) + expect_status.to eq 404 + end + end + + context 'when phone and code is valid' do + let(:phone) { create(:phone, user: test_user) } + let(:phone_number) { phone.number } + + it 'responses with success' do + allow(Barong::App.config.twilio_provider).to receive(:verify_code?).and_return(true) + + set_level(test_user, 1) + do_request + expect_status.to eq 201 + expect(phone.reload.validated_at).to be + test_user.update_level + expect(test_user.reload.level).to eq 2 + end + end + end + end + + context 'With Twilio SMS Sender service' do + let(:phone_number) { phone.number } + let(:do_request) do + post '/api/v2/resource/phones', params: params, headers: auth_header + end + let(:params) { { phone_number: phone_number, channel: 'sms' } } + let(:verification_code) { '12345' } + + context 'valid story sms sender service' do + let(:mock_sms) { Barong::MockSMS } + + before do + allow(Barong::App.config).to receive(:twilio_provider).and_return(MockPhoneVerifyService) + end + + context 'when phone is not verified' do + let(:phone_number) { build(:phone).number } + + it 'assigns a phone to account and send sms' do + do_request + expect_body.to eq(message: 'Code was sent successfully via sms') + expect_status.to eq 201 + expect(mock_sms.messages.last.to).to eq "+#{phone_number}" + end + + it 'sends a default sms content' do + do_request + expect_body.to eq(message: 'Code was sent successfully via sms') + expect_status.to eq 201 + expect(mock_sms.messages.last.body).to start_with('Your verification code for Barong: ') + end + + it 'sends a custom message with content before code' do + allow(Barong::App.config).to receive(:sms_content_template).and_return('Please confirm your phone with the following code: {{code}}') + do_request + expect_body.to eq(message: 'Code was sent successfully via sms') + expect_status.to eq 201 + expect(mock_sms.messages.last.body).to start_with('Please confirm your phone with the following code: ') + end + + it 'sends a custom message with content after code' do + allow(Barong::App.config).to receive(:sms_content_template).and_return('{{code}} - this is your confirmation code') + do_request + expect_body.to eq(message: 'Code was sent successfully via sms') + expect_status.to eq 201 + expect(mock_sms.messages.last.body).to end_with(' - this is your confirmation code') + end + + it 'sends a custom message with code in the midle of the content' do + allow(Barong::App.config).to receive(:sms_content_template).and_return('Following code: {{code}} should be used for phone confirmation') + do_request + expect_body.to eq(message: 'Code was sent successfully via sms') + expect_status.to eq 201 + expect(mock_sms.messages.last.body).to start_with('Following code: ') + expect(mock_sms.messages.last.body).to end_with(' should be used for phone confirmation') + end + end + + context 'when phone is valid' do + let(:phone_number) { build(:phone).number } + + it 'creates a phone and send sms' do + do_request + expect_body.to eq(message: 'Code was sent successfully via sms') + expect_status.to eq 201 + expect(mock_sms.messages.last.to).to eq "+#{phone_number}" + end + + it 'doesnt change code in DB on phone initialize' do + do_request + expect_body.to eq(message: 'Code was sent successfully via sms') + expect_status.to eq 201 + code_after_create = Phone.last.code + # Phone.last initilazes phone + code_after_initialize = Phone.last.code + expect(code_after_create).to eq code_after_initialize + end + end + end + + context 'POST /api/v2/resource/phones/verify' do + let(:do_request) do + post '/api/v2/resource/phones/verify', params: params, headers: auth_header + end + let(:params) do + { + phone_number: phone_number, + verification_code: verification_code + } + end + let(:verification_code) { '12345' } + + context 'when phone is missing and code is missing' do + let(:phone_number) { nil } + let(:verification_code) { '' } + + it 'renders an error' do + do_request + expect_body.to eq(errors: ['resource.phone.empty_phone_number', 'resource.phone.empty_verification_code']) + expect_status.to eq 422 + end + end + + context 'when phone is invalid' do + let(:phone_number) { '123' } + + it 'renders an error' do + do_request + expect_body.to eq(errors: ['resource.phone.invalid_num']) + expect_status.to eq 400 + end + end + + context 'when phone is already exists and verified' do + let!(:phone) do + create(:phone, validated_at: 1.minutes.ago) + end + let(:phone_number) { phone.number } + + it 'renders an error' do + do_request + expect_body.to eq(errors: ['resource.phone.number_exist']) + expect_status.to eq 400 + end + end + + context 'when phone exists in international format' do + let!(:phone) do + create(:phone, validated_at: 1.minutes.ago, number: international_phone) + end + let(:phone_number) { '+44 07418084106' } + let(:international_phone) { '447418084106' } + + it 'renders an error' do + do_request + expect_body.to eq(errors: ['resource.phone.number_exist']) + expect_status.to eq 400 + end + end + + context 'when phone is not found in test_user' do + let!(:phone) { create(:phone) } + let(:phone_number) { phone.number } + + it 'rendens an error' do + do_request + expect_body.to eq(errors: ['resource.phone.doesnt_exist']) + expect_status.to eq 404 + end + end + + context 'when phone is found in test_user but code is invalid still approves because of mock provider' do + let!(:phone) { create(:phone, user: test_user) } + let(:phone_number) { phone.number } + + it 'approves phone' do + do_request + + expect_status.to eq 201 + expect(phone.reload.validated_at).to be + end + end + + context 'when phone and code is valid' do + let(:phone) { create(:phone, user: test_user) } + let(:phone_number) { phone.number } + let(:verification_code) { phone.code } + + it 'responses with success' do + set_level(test_user, 1) + do_request + expect_status.to eq 201 + expect(phone.reload.validated_at).to be + test_user.update_level + expect(test_user.reload.level).to eq 2 + end + end + end + end +end diff --git a/spec/api/v2/resource/profiles_spec.rb b/spec/api/v2/resource/profiles_spec.rb new file mode 100644 index 0000000..9b382e5 --- /dev/null +++ b/spec/api/v2/resource/profiles_spec.rb @@ -0,0 +1,572 @@ +# frozen_string_literal: true + +describe 'API::V2::Resource::Profiles' do + before { allow(Barong::App.config).to receive_messages(kyc_provider: 'local') } + + include_context 'bearer authentication' + let!(:create_member_permission) do + create :permission, + role: 'member' + end + let!(:optional_params) do + { + metadata: { + gender: Faker::Creature::Dog.gender, + place_of_birth: Faker::Address.city + }.to_json + } + end + + describe 'POST /api/v2/resource/profiles' do + describe 'KYC verification' do + let!(:request_params) do + { + last_name: Faker::Name.last_name, + first_name: Faker::Name.first_name, + dob: Faker::Date.birthday, + country: Faker::Address.country_code, + city: Faker::Address.city, + address: Faker::Address.state, + postcode: Faker::Address.zip_code + } + end + let!(:url) { '/api/v2/resource/profiles' } + + it 'triggers KycService' do + expect(KycService).to receive(:profile_step) + + post url, params: request_params, headers: auth_header + expect(response.status).to eq(201) + end + + context 'Local verification' do + before { allow(Barong::App.config).to receive_messages(kyc_provider: 'local') } + + it 'adds a label for first verification' do + expect(test_user.labels).to eq([]) + post url, params: request_params, headers: auth_header + expect(test_user.reload.labels.count).to eq(1) + expect(test_user.reload.labels.first.key).to eq('profile') + expect(test_user.reload.labels.first.value).to eq('drafted') + end + + it 'doesnt trigger KYCAID worker' do + expect(KycService).to receive(:profile_step) + expect(KYC::Kycaid::ApplicantWorker).not_to receive(:perform_async) + + post url, params: request_params, headers: auth_header + expect(response.status).to eq(201) + end + + it 'updates label on re-submit' do + expect(test_user.labels).to eq([]) + post url, params: request_params, headers: auth_header + expect(test_user.reload.labels.count).to eq(1) + expect(test_user.reload.labels.first.key).to eq('profile') + expect(test_user.reload.labels.first.value).to eq('drafted') + + put url, params: request_params.merge(confirm: true), headers: auth_header + expect(test_user.reload.labels.count).to eq(1) + expect(test_user.reload.labels.first.key).to eq('profile') + expect(test_user.reload.labels.first.value).to eq('submitted') + end + end + + context 'KYCAID verification' do + before { allow(Barong::App.config).to receive_messages(kyc_provider: 'kycaid') } + + it 'adds a label for first verification' do + expect(test_user.labels).to eq([]) + post url, params: request_params, headers: auth_header + expect(test_user.reload.labels.count).to eq(1) + expect(test_user.reload.labels.first.key).to eq('profile') + expect(test_user.reload.labels.first.value).to eq('drafted') + end + + it 'updates label on re-submit' do + expect(test_user.labels).to eq([]) + post url, params: request_params, headers: auth_header + expect(test_user.reload.labels.count).to eq(1) + expect(test_user.reload.labels.first.key).to eq('profile') + expect(test_user.reload.labels.first.value).to eq('drafted') + + put url, params: request_params.merge(confirm: true), headers: auth_header + expect(test_user.reload.labels.count).to eq(1) + expect(test_user.reload.labels.first.key).to eq('profile') + expect(test_user.reload.labels.first.value).to eq('submitted') + end + + it 'triggers KYCAID worker on submitted state' do + expect(KYC::Kycaid::ApplicantWorker).to receive(:perform_async) + post url, params: request_params.merge(confirm: true), headers: auth_header + expect(response.status).to eq(201) + end + + it 'doesnt trigger KYCAID worker on drafted state' do + expect(KYC::Kycaid::ApplicantWorker).not_to receive(:perform_async) + post url, params: request_params, headers: auth_header + expect(response.status).to eq(201) + end + + it 'doesnt trigger KYCAID worker on rejected state' do + post url, params: request_params.merge(confirm: true), headers: auth_header + expect(response.status).to eq(201) + + expect(KYC::Kycaid::ApplicantWorker).not_to receive(:perform_async) + test_user.reload.profiles.last.update(state: 'rejected') + end + + it 'doesnt trigger KYCAID worker on verified state' do + post url, params: request_params.merge(confirm: true), headers: auth_header + expect(response.status).to eq(201) + + expect(KYC::Kycaid::ApplicantWorker).not_to receive(:perform_async) + test_user.reload.profiles.last.update(state: 'verified') + end + end + end + + let!(:url) { '/api/v2/resource/profiles' } + let!(:user_info) { '/api/v2/resource/users/me' } + let!(:request_params) do + { + last_name: Faker::Name.last_name, + first_name: Faker::Name.first_name, + dob: Faker::Date.birthday, + country: Faker::Address.country_code_long, + city: Faker::Address.city, + address: Faker::Address.state, + postcode: Faker::Address.zip_code + } + end + + let!(:asian_params) do + { + last_name: "국", + first_name: "채원", + dob: Faker::Date.birthday, + country: Faker::Address.country_code_long, + city: "안산시", + address: "사직로3길 23", + postcode: Faker::Address.zip_code + } + end + + it 'accept / , ; in address' do + request_params[:address] = '28/2 Kevin Brook; Miami, USA' + expect { post url, params: request_params, headers: auth_header } + .to change { Profile.count }.by (1) + expect(response.status).to eq(201) + res = json_body + expect(res[:address]).to eq request_params[:address] + end + + it 'accept . in address' do + request_params[:address] = 'Larkin Fork.South, New York/AP' + expect { post url, params: request_params, headers: auth_header } + .to change { Profile.count }.by (1) + expect(response.status).to eq(201) + res = json_body + expect(res[:address]).to eq request_params[:address] + end + + it 'accept # ~ \ : " & ( ) in address' do + request_params[:address] = '28~1/2 \"Kevin & Brook": (Miami, USA)' + expect { post url, params: request_params, headers: auth_header } + .to change { Profile.count }.by (1) + expect(response.status).to eq(201) + res = json_body + expect(res[:address]).to eq request_params[:address] + end + + it "accept ' in address" do + request_params[:address] = "'Larkin Fork' South New York" + expect { post url, params: request_params, headers: auth_header } + .to change { Profile.count }.by (1) + expect(response.status).to eq(201) + res = json_body + expect(res[:address]).to eq request_params[:address] + end + + it "accept – in address" do + request_params[:address] = "'Larkin–Fork' South New York" + expect { post url, params: request_params, headers: auth_header } + .to change { Profile.count }.by (1) + expect(response.status).to eq(201) + res = json_body + expect(res[:address]).to eq request_params[:address] + end + + it "doesn't accept @ in address" do + request_params[:address] = "'Larkin–Fork' @South New York" + expect { post url, params: request_params, headers: auth_header } + .not_to change { Profile.count } + expect(response.status).to eq(422) + end + + it 'accept . in city' do + request_params[:city] = 'St. Petersburg' + expect { post url, params: request_params, headers: auth_header } + .to change { Profile.count }.by (1) + expect(response.status).to eq(201) + res = json_body + expect(res[:city]).to eq request_params[:city] + end + + it 'accept dash in city' do + request_params[:city] = 'Hubli–Dharwad' + expect { post url, params: request_params, headers: auth_header } + .to change { Profile.count }.by (1) + expect(response.status).to eq(201) + res = json_body + expect(res[:city]).to eq request_params[:city] + end + + it 'accept hyphen in city' do + request_params[:city] = 'Hubli-Dharwad' + expect { post url, params: request_params, headers: auth_header } + .to change { Profile.count }.by (1) + expect(response.status).to eq(201) + res = json_body + expect(res[:city]).to eq request_params[:city] + end + + it 'accept \' in city' do + request_params[:city] = 'Cava de\' Tirreni' + expect { post url, params: request_params, headers: auth_header } + .to change { Profile.count }.by (1) + expect(response.status).to eq(201) + res = json_body + expect(res[:city]).to eq request_params[:city] + end + + it "doesn't accept # in city" do + request_params[:city] = 'Cava de\' #Tirreni' + expect { post url, params: request_params, headers: auth_header } + .not_to change { Profile.count } + expect(response.status).to eq(422) + end + + it "doesn't accept @ in city" do + request_params[:city] = 'Cava de\' @Tirreni' + expect { post url, params: request_params, headers: auth_header } + .not_to change { Profile.count } + expect(response.status).to eq(422) + end + + it 'creates new profile with only required fields' do + expect { post url, params: request_params, headers: auth_header } + .to change { Profile.count }.by (1) + expect(response.status).to eq(201) + + res = json_body + expect(res[:last_name]).to eq request_params[:last_name].sub(/(?<=\A.{1})(.*)/) { |match| '*' * match.length } + expect(res[:first_name]).to eq request_params[:first_name] + expect(res[:dob]).to eq request_params[:dob].to_s.sub(/(?<=\A.{8})(.*)/) { |match| '*' * match.length } + expect(res[:country]).to eq request_params[:country] + expect(res[:city]).to eq request_params[:city] + expect(res[:address]).to eq request_params[:address] + expect(res[:postcode]).to eq request_params[:postcode] + expect(res[:metadata]).to be_blank + end + + it 'creates new profile with only required fields without masking' do + Barong::App.config.stub(:api_data_masking_enabled).and_return(false) + expect { post url, params: request_params, headers: auth_header } + .to change { Profile.count }.by (1) + expect(response.status).to eq(201) + + res = json_body + expect(res[:last_name]).to eq request_params[:last_name] + expect(res[:first_name]).to eq request_params[:first_name] + expect(res[:dob]).to eq request_params[:dob].to_s + expect(res[:country]).to eq request_params[:country] + expect(res[:city]).to eq request_params[:city] + expect(res[:address]).to eq request_params[:address] + expect(res[:postcode]).to eq request_params[:postcode] + expect(res[:metadata]).to be_blank + end + + it 'creates new profile with corean symbols fields' do + expect { post url, params: asian_params, headers: auth_header } + .to change { Profile.count }.by (1) + expect(response.status).to eq(201) + + res = json_body + + expect(res[:last_name]).to eq asian_params[:last_name] + expect(res[:first_name]).to eq asian_params[:first_name] + expect(res[:dob]).to eq asian_params[:dob].to_s.sub(/(?<=\A.{8})(.*)/) { |match| '*' * match.length } + expect(res[:country]).to eq asian_params[:country] + expect(res[:city]).to eq asian_params[:city] + expect(res[:address]).to eq asian_params[:address] + expect(res[:postcode]).to eq asian_params[:postcode] + expect(res[:metadata]).to be_blank + end + + it 'creates new profile with all metadata fields' do + expect { post url, params: request_params.merge(optional_params), headers: auth_header } + .to change { Profile.count }.by (1) + expect(response.status).to eq(201) + + res = json_body + expect(res[:metadata]).to eq(optional_params[:metadata]) + end + + it 'renders an error if metadata is not json' do + expect { post url, params: request_params.merge({ metadata: '{ bar: baz }' }), headers: auth_header } + .not_to change { Profile.count } + expect_status_to_eq 422 + expect_body.to eq(errors: ["metadata.invalid_format"]) + end + + context 'create another one profile with state drafted' do + before do + post url, params: request_params.merge(optional_params), headers: auth_header + end + + it 'doesn\'t create new profile' do + post url, params: request_params.merge(optional_params), headers: auth_header + + result = json_body + expect(*result[:errors]).to eq('state.exists') + end + end + + context 'create another one profile with state submitted' do + before do + post url, params: request_params.merge(optional_params, confirm: true), headers: auth_header + end + + it 'doesn\'t create new profile' do + post url, params: request_params.merge(optional_params, confirm: true), headers: auth_header + + result = json_body + expect(*result[:errors]).to eq('state.exists') + end + end + + context 'create another one profile with state submitted and drafted' do + before do + post url, params: request_params.merge(optional_params, confirm: true), headers: auth_header + end + + it 'doesn\'t create new profile' do + post url, params: request_params.merge(optional_params), headers: auth_header + + result = json_body + expect(*result[:errors]).to eq('state.exists') + end + end + + context 'partial creating profile' do + context 'empty params' do + + it 'returns profile' do + expect { post url, params: {}, headers: auth_header } + .to change { Profile.count }.by (1) + + expect(response.status).to eq(201) + expect(json_body[:state]).to eq('drafted') + expect(json_body[:metadata].blank?).to be_truthy + Profile::OPTIONAL_PARAMS.each { |p| + expect(json_body[p].blank?).to be_truthy + } + Profile::OPTIONAL_PARAMS.each { |p| + expect(json_body.with_indifferent_access[p].blank?).to be_truthy + } + expect(Profile.last.user.labels.find_by(key: 'profile').value).to eq('drafted') + end + end + + context 'several params' do + let(:params) { { last_name: Faker::Name.last_name, first_name: Faker::Name.first_name } } + + it 'returns profile' do + expect { post url, params: params, headers: auth_header } + .to change { Profile.count }.by (1) + + expect(response.status).to eq(201) + expect(json_body[:first_name].nil?).to be_falsey + expect(json_body[:last_name].nil?).to be_falsey + expect(json_body[:state]).to eq('drafted') + expect(json_body[:metadata].blank?).to be_truthy + (Profile::OPTIONAL_PARAMS - params.stringify_keys.keys).each { |p| + expect(json_body.with_indifferent_access[p].blank?).to be_truthy + } + expect(Profile.last.user.labels.find_by(key: :profile).value).to eq('drafted') + end + end + + context 'several params with profile confirmation' do + let(:params) { { last_name: Faker::Name.last_name, first_name: Faker::Name.first_name } } + + it 'returns profile' do + expect { post url, params: params.merge(confirm: true), headers: auth_header } + .to change { Profile.count }.by (1) + + expect(response.status).to eq(201) + expect(json_body[:first_name].nil?).to be_falsey + expect(json_body[:last_name].nil?).to be_falsey + expect(json_body[:state]).to eq('submitted') + expect(json_body[:metadata].blank?).to be_truthy + (Profile::OPTIONAL_PARAMS - params.stringify_keys.keys).each { |p| + expect(json_body.with_indifferent_access[p].blank?).to be_truthy + } + expect(Profile.last.user.labels.find_by(key: :profile).value).to eq('submitted') + end + end + + context 'full profile params' do + it 'returns profile' do + expect { post url, params: request_params, headers: auth_header } + .to change { Profile.count }.by (1) + + expect(response.status).to eq(201) + expect(json_body[:state]).to eq('drafted') + expect(json_body[:metadata].blank?).to be_truthy + request_params.keys.each { |p| + expect(json_body[p].present?).to be_truthy + } + expect(Profile.last.user.labels.find_by(key: 'profile').value).to eq('drafted') + end + end + end + end + + describe 'GET /api/v2/resource/profiles/me' do + let!(:url) { '/api/v2/resource/profiles/me' } + let!(:request_params) do + { + first_name: Faker::Name.first_name, + last_name: Faker::Name.last_name, + dob: Faker::Date.birthday, + address: Faker::Address.state, + postcode: Faker::Address.zip_code, + city: Faker::Address.city, + country: Faker::Address.country_code_long + } + end + + it 'returns user profile data with metadata' do + post '/api/v2/resource/profiles', params: request_params.merge(optional_params), + headers: auth_header + expect(response.status).to eq(201) + + get url, headers: auth_header + expect(response.status).to eq(200) + last_name = request_params[:last_name].sub(/(?<=\A.{1})(.*)/) { |match| '*' * match.length } + dob = request_params[:dob].to_s.sub(/(?<=\A.{8})(.*)/) { |match| '*' * match.length } + expected_json = request_params.merge(state: 'drafted', last_name: last_name,dob: dob).merge(optional_params).to_json + expect(JSON.parse(response.body)[0].except('created_at', 'updated_at')).to eq(JSON.parse(expected_json)) + end + end + + context 'event API behavior' do + let!(:url) { '/api/v2/resource/profiles' } + let!(:request_params) do + { + last_name: Faker::Name.last_name, + first_name: Faker::Name.first_name, + dob: Faker::Date.birthday, + country: Faker::Address.country_code_long, + city: Faker::Address.city, + address: Faker::Address.state, + postcode: Faker::Address.zip_code + } + end + + before do + allow(EventAPI).to receive(:notify) + end + + it 'receive model.profile.created notify' do + expect(EventAPI).to receive(:notify).ordered.with('model.user.created', hash_including(:record)) + expect(EventAPI).to receive(:notify).ordered.with('model.profile.created', hash_including(:record)) + + post url, params: request_params, headers: auth_header + end + + it 'receive model.profile.created notify with user and profile params' do + expect(EventAPI).to receive(:notify).ordered.with('model.user.created', hash_including(:record)) + expect(EventAPI).to receive(:notify).ordered.with( + 'model.profile.created', + hash_including( + record: { + user: anything, + address: anything, + city: anything, + country: anything, + created_at: anything, + updated_at: anything, + dob: anything, + first_name: anything, + last_name: anything, + postcode: anything + } + ) + ) + + post url, params: request_params, headers: auth_header + end + end + + describe 'PUT /api/v2/resource/profiles' do + let!(:url) { '/api/v2/resource/profiles' } + let!(:request_params) do + { + last_name: Faker::Name.last_name, + first_name: Faker::Name.first_name, + dob: Faker::Date.birthday, + country: Faker::Address.country_code_long, + city: Faker::Address.city, + address: Faker::Address.street_address, + postcode: Faker::Address.zip_code + } + end + + context 'user without profile' do + it 'renders an error when profile doesnt exist' do + put url, params: request_params, headers: auth_header + + expect_status.to eq(404) + expect_body.to eq(errors: ['resource.profile.doesnt_exist_or_not_editable']) + end + end + + context 'user with profile' do + let!(:profile) { create(:profile, user: test_user)} + + it 'returns submitted profile' do + expect { put url, params: request_params.merge(confirm: true), headers: auth_header } + .not_to change { Profile.count } + + expect(response.status).to eq(200) + expect(json_body[:state]).to eq('submitted') + expect(profile[:metadata]).to be_blank + end + end + + context 'user with partial profile' do + let!(:profile) { create(:profile, user: test_user, last_name: nil, first_name: nil) } + + it 'returns partial profile' do + expect { put url, params: request_params.except(:first_name), headers: auth_header } + .not_to change { Profile.count } + + expect(response.status).to eq(200) + expect(json_body[:state]).to eq('drafted') + expect(json_body[:metadata]).to be_blank + end + + it 'returns completed profile' do + expect { put url, params: request_params, headers: auth_header } + .not_to change { Profile.count } + + expect(response.status).to eq(200) + expect(json_body[:state]).to eq('drafted') + expect(json_body[:metadata]).to be_blank + end + end + end +end diff --git a/spec/api/v2/resource/service_accounts_spec.rb b/spec/api/v2/resource/service_accounts_spec.rb new file mode 100644 index 0000000..da80673 --- /dev/null +++ b/spec/api/v2/resource/service_accounts_spec.rb @@ -0,0 +1,297 @@ +# frozen_string_literal: true + +describe 'Api::V2::Resource::ServiceAccounts' do + include_context 'bearer authentication' + let!(:create_member_permission) do + create :permission, + role: 'member' + end + let!(:create_service_account_permission) do + create :permission, + role: 'service_account' + end + let!(:create_admin_permission) do + create :permission, + role: 'admin' + end + let!(:test_user) { create(:user, otp: otp_enabled, role: 'member') } + let!(:service_account) { create(:service_account, user: test_user) } + let(:otp_enabled) { true } + let!(:first_api_key) { create :api_key, key_holder_account: service_account } + let!(:second_api_key) { create :api_key, key_holder_account: service_account } + let(:valid_otp_code) { '1357' } + let(:invalid_otp_code) { '1234' } + let(:otp_code) { valid_otp_code } + + before do + allow(TOTPService).to receive(:validate?) + .with(test_user.uid, valid_otp_code) { true } + allow(TOTPService).to receive(:validate?) + .with(test_user.uid, invalid_otp_code) { false } + allow(TOTPService).to receive(:validate?) + .with(test_user.uid, nil) { false } + end + + describe 'GET /api/v2/resource/service_accounts' do + let(:do_request) do + get '/api/v2/resource/service_accounts', + headers: auth_header + end + + let(:expected_fields) do + { + uid: service_account.uid, + email: service_account.email, + owner_id: test_user.id, + role: service_account.role, + level: service_account.level, + state: service_account.state, + } + end + + it 'Return service accounts for current user' do + do_request + + expect(json_body.count).to eq 1 + expect(response.status).to eq(200) + expect(json_body.first).to include(expected_fields) + end + end + + describe 'GET /api/v2/resource/service_accounts/api_keys/' do + let(:get_params) do + { + service_account_uid: service_account.uid, + ordering: 'asc', + order_by: 'id' + } + end + let(:post_params) do + { + service_account_uid: service_account.uid, + scope: 'trade', + algorithm: 'HS256' + } + end + let(:do_request) do + post '/api/v2/resource/service_accounts/api_keys', + params: post_params.merge(totp_code: otp_code), + headers: auth_header + end + let(:do_get_request) { get "/api/v2/resource/service_accounts/api_keys", params: get_params, headers: auth_header } + let(:expected_fields) do + { + kid: first_api_key.kid, + state: first_api_key.state, + scope: %w[trade] + } + end + let(:totp_code) { valid_otp_code } + + it 'Return api key for current account in ASC order' do + do_get_request + + expect(json_body.count).to eq 2 + expect(response.status).to eq(200) + expect(json_body.first).to include(expected_fields) + end + + it 'Return api key for current account in DESC order' do + get_params.merge!(ordering: 'desc') + do_get_request + + expect(json_body.count).to eq 2 + expect(response.status).to eq(200) + expect(json_body.second).to include(expected_fields) + end + + context 'when invalid ordering' do + it 'renders an error' do + get_params.merge!(ordering: 'resc') + do_get_request + + expect(response.status).to eq(422) + expect_body.to eq(errors: ["resource.service_accounts.invalid_ordering"]) + end + end + + context 'when invalid order_by' do + it 'renders an error' do + get_params.merge!(order_by: 'invalid') + do_get_request + + expect(response.status).to eq(422) + expect_body.to eq(errors: ["resource.service_accounts.invalid_attribute"]) + end + end + + context 'when otp is not enabled' do + let(:otp_enabled) { false } + + it 'renders an error' do + do_request + expect(response.status).to eq(400) + expect_body.to eq(errors: ["resource.service_accounts.2fa_disabled"]) + end + end + + context 'when code is invalid' do + let(:otp_code) { invalid_otp_code } + + it 'renders an error' do + do_request + expect(response.status).to eq(422) + expect_body.to eq(errors: ["resource.service_accounts.invalid_totp"]) + end + end + end + + describe 'POST /api/v2/resource/api_keys' do + let(:do_request) do + post '/api/v2/resource/api_keys', + params: params.merge(totp_code: otp_code), + headers: auth_header + end + let(:otp_code) { valid_otp_code } + + context 'when fields are valid' do + let(:params) do + { + scope: 'trade', + algorithm: 'HS256' + } + end + let(:expected_fields) do + { + state: 'active', + scope: params[:scope].split(','), + algorithm: 'HS256' + } + end + + it 'Create an api key' do + expect { do_request }.to change { APIKey.count }.by(1) + expect(response.status).to eq(201) + expect_body.to include(expected_fields) + end + + it 'does not create api key if vault is down' do + allow(Vault::Rails).to receive(:encrypt).and_raise(Vault::VaultError) + expect { do_request }.not_to change { APIKey.count } + expect(response.status).to eq(422) + expect_body.to eq(errors: ["api_key.could_not_save_secret"]) + end + + context 'when otp is not enabled' do + let(:otp_enabled) { false } + + it 'renders an error' do + do_request + expect(response.status).to eq(400) + expect_body.to eq(errors: ["resource.api_key.2fa_disabled"]) + end + end + + context 'when code is invalid' do + let(:otp_code) { invalid_otp_code } + + it 'renders an error' do + do_request + expect(response.status).to eq(422) + expect_body.to eq(errors: ["resource.api_key.invalid_totp"]) + end + end + + context 'when algorithm is invalid' do + it 'renders an error' do + params[:algorithm] = 'kek' + do_request + expect_body.to eq(errors: ["kid.blank", "algorithm.inclusion"]) + end + end + end + end + + describe 'PUT /api/v2/resource/service_accounts/api_keys/:kid' do + let(:do_request) do + put "/api/v2/resource/service_accounts/api_keys/#{first_api_key.kid}", params: params.merge(totp_code: otp_code), + headers: auth_header + end + let(:otp_code) { valid_otp_code } + context 'when valid fields' do + let(:params) do + { + service_account_uid: service_account.uid, + state: 'inactive', + scope: 'sell', + algorithm: 'HS256' + } + end + + it 'Updates a state' do + expect { do_request }.to change { first_api_key.reload.state } + .from('active').to('inactive') + expect(response.status).to eq(200) + end + + it 'Updates a scope' do + expect { do_request }.to change { first_api_key.reload.scope } + .from(['trade']).to(['sell']) + expect(response.status).to eq(200) + end + + context 'when otp is not enabled' do + let(:otp_enabled) { false } + + it 'renders an error' do + do_request + expect(response.status).to eq(400) + expect_body.to eq(errors: ["resource.service_accounts.2fa_disabled"]) + end + end + + context 'when code is invalid' do + let(:otp_code) { invalid_otp_code } + + it 'renders an error' do + do_request + expect(response.status).to eq(422) + expect_body.to eq(errors: ["resource.service_accounts.invalid_totp"]) + end + end + end + end + + describe 'DELETE /api/v2/resource/service_accounts/api_keys/:uid' do + let(:do_request) do + delete "/api/v2/resource/service_accounts/api_keys/#{first_api_key.kid}?totp_code=#{otp_code}&service_account_uid=#{service_account.uid}", + headers: auth_header + end + let(:otp_code) { valid_otp_code } + + it 'Removes an api key' do + do_request + expect(response.status).to eq(204) + end + + context 'when otp is not enabled' do + let(:otp_enabled) { false } + + it 'renders an error' do + do_request + expect(response.status).to eq(400) + expect_body.to eq(errors: ["resource.service_accounts.2fa_disabled"]) + end + end + + context 'when code is invalid' do + let(:otp_code) { invalid_otp_code } + + it 'renders an error' do + do_request + expect(response.status).to eq(422) + expect_body.to eq(errors: ["resource.service_accounts.invalid_totp"]) + end + end + end +end diff --git a/spec/api/v2/resource/users_spec.rb b/spec/api/v2/resource/users_spec.rb new file mode 100644 index 0000000..608e3ec --- /dev/null +++ b/spec/api/v2/resource/users_spec.rb @@ -0,0 +1,270 @@ +# frozen_string_literal: true + +describe 'Api::V1::Profiles' do + include_context 'bearer authentication' + let!(:create_member_permission) do + create :permission, + role: 'member' + end + describe 'GET /api/v2/resource/users/me' do + it 'should reply permissions denied' do + get '/api/v2/resource/users/me' + expect_body.to eq(errors: ["jwt.decode_and_verify"]) + expect(response.status).to eq(401) + end + + it 'should allow traffic with Authorization' do + get '/api/v2/resource/users/me', headers: auth_header + expect(json_body[:email]).to eq(test_user.email) + expect(response.status).to eq(200) + end + end + + let(:valid_otp_code) { '1357' } + let(:invalid_otp_code) { '1234' } + + before do + allow(TOTPService).to receive(:validate?) + .with(test_user.uid, valid_otp_code) { true } + allow(TOTPService).to receive(:validate?) + .with(test_user.uid, invalid_otp_code) { false } + end + + describe 'PUT /api/v2/resource/users/me' do + let(:correct_data) { { bar: 'baz' }.to_json } + let(:incorrect_data) { 'random string' } + + it 'changes user data field' do + put '/api/v2/resource/users/me', headers: auth_header, params: { + data: correct_data + } + expect(test_user.reload.data).to eq(correct_data) + expect(response.status).to eq 200 + end + + it 'receives invalid data error' do + put '/api/v2/resource/users/me', headers: auth_header, params: { + data: incorrect_data + } + + expect(response.status).to eq 422 + expect_body.to eq errors: ['data.invalid_format'] + end + end + + describe 'DELETE /api/v2/resource/users/me' do + it 'receives invalid password error' do + delete '/api/v2/resource/users/me', headers: auth_header, params: { + password: 'WrongPassword' + } + + expect(response.status).to eq 422 + expect(test_user.reload.state).to eq 'active' + expect_body.to eq errors: ['resource.user.invalid_password'] + end + + it 'receives otp missing error if 2fa is enabled and param is missing' do + test_user.update(otp: true) + delete '/api/v2/resource/users/me', headers: auth_header, params: { + password: 'Tecohvi0' + } + + expect(response.status).to eq 422 + expect(test_user.reload.state).to eq 'active' + expect_body.to eq errors: ['resource.user.missing_otp_code'] + end + + it 'receives otp empty error if 2fa is enabled and param is empty' do + test_user.update(otp: true) + delete '/api/v2/resource/users/me', headers: auth_header, params: { + password: 'Tecohvi0', + otp_code: '' + } + + expect(response.status).to eq 422 + expect(test_user.reload.state).to eq 'active' + expect_body.to eq errors: ['resource.user.empty_otp_code'] + end + + it 'receives invalid otp error with wrong otp code' do + test_user.update(otp: true) + delete '/api/v2/resource/users/me', headers: auth_header, params: { + password: 'Tecohvi0', + otp_code: invalid_otp_code + } + + expect(response.status).to eq 422 + expect(test_user.reload.state).to eq 'active' + expect_body.to eq errors: ['resource.user.invalid_otp'] + end + + it 'marks user as deleted with turned on 2fa and valid otp' do + test_user.update(otp: true) + delete '/api/v2/resource/users/me', headers: auth_header, params: { + password: 'Tecohvi0', + otp_code: valid_otp_code + } + + expect(response.status).to eq 200 + expect(test_user.reload.state).to eq 'deleted' + end + + it 'marks user as deleted with turned off 2fa' do + delete '/api/v2/resource/users/me', headers: auth_header, params: { + password: 'Tecohvi0' + } + + expect(response.status).to eq 200 + expect(test_user.reload.state).to eq 'deleted' + end + end + + describe 'POST /api/v2/resource/otp/disable' do + it 'with dasbled 2fa' do + post '/api/v2/resource/otp/disable', headers: auth_header, params: { code: valid_otp_code } + expect_body.to eq errors: ['resource.otp.not_enabled'] + end + + it 'with invalid code' do + test_user.update(otp: true) + post '/api/v2/resource/otp/disable', headers: auth_header, params: { code: invalid_otp_code } + expect_body.to eq errors: ['resource.otp.invalid'] + end + + it 'disables 2fa' do + test_user.update(otp: true) + expect { + post '/api/v2/resource/otp/disable', headers: auth_header, params: { code: valid_otp_code } + }.to change { test_user.reload.otp }.from(true).to(false) + + expect(response.status).to eq 200 + end + end + + describe 'POST /api/v2/resource/users/activity' do + it 'allows only [password, otp, session, all] as a topic parameter' do + get '/api/v2/resource/users/activity/invalid', headers: auth_header + expect(response.status).to eq(422) + expect_body.to eq(errors: ['resource.user.wrong_topic']) + get '/api/v2/resource/users/activity/session', headers: auth_header + expect(response.status).to eq(422) + expect_body.to eq(errors: ['resource.user.no_activity']) + end + it 'sorts user activities' do + 4.times { create(:activity, user: test_user) } + get '/api/v2/resource/users/activity/all', headers: auth_header + activities = JSON.parse(response.body) + expect(activities.first['id']).to be >= activities.last['id'] + end + it 'sorts user activities by result' do + 4.times { create(:activity, user: test_user, result: 'succeed') } + get '/api/v2/resource/users/activity/all', params: { result: 'succeed' }, headers: auth_header + activities = JSON.parse(response.body) + expect(activities.length).to eq(4) + end + it 'sorts user activities by time range' do + 4.times { create(:activity, user: test_user, result: 'succeed') } + get '/api/v2/resource/users/activity/all', params: { time_from: 5.hours.ago.to_i, time_to: 1.hours.ago.to_i }, headers: auth_header + activities = JSON.parse(response.body) + expect(activities.length).to eq(1) + end + + it 'sorts user activities by time range' do + 4.times { create(:activity, user: test_user, result: 'succeed') } + 4.times { create(:activity, user: test_user, result: 'succeed', created_at: 10.hours.ago) } + + get '/api/v2/resource/users/activity/all', params: { time_from: 5.hours.ago.to_i}, headers: auth_header + activities = JSON.parse(response.body) + expect(activities.length).to eq(4) + end + end + + describe 'POST /api/v2/resource/users/password' do + let(:do_request) do + put '/api/v2/resource/users/password', params: params, headers: auth_header + end + let(:do_confirm_request) do + post '/api/v2/resource/users/confirm_password', params: { code: otp_code }, headers: auth_header + end + let(:params) do + { + old_password: old_password, + new_password: new_password, + confirm_password: confirm_password + } + end + let(:old_password) { '' } + let(:new_password) { '' } + let(:confirm_password) { '' } + context 'when params are blank' do + it 'renders 400 error' do + do_request + expect(response.status).to eq(422) + expect_body.to eq(errors: ["resource.user.empty_old_password", "resource.user.empty_new_password", "resource.user.empty_confirm_password"]) + end + end + context 'when old password is not right' do + let(:old_password) { 'invalid' } + let(:new_password) { 'Gol4aid2' } + let(:confirm_password) { 'Gol4aid2' } + it 'renders 400 error' do + do_request + expect(response.status).to eq(400) + expect_body.to eq(errors: ["resource.password.prev_pass_not_correct"]) + end + end + context 'when new pass and confirmation are different' do + let(:old_password) { 'Tecohvi0' } # 'Tecohvi0' - test_user password + let(:new_password) { 'Gol4aid1' } + let(:confirm_password) { 'Gol4aid2' } + it 'renders 422 error' do + do_request + expect(response.status).to eq(422) + expect_body.to eq(errors: ["resource.password.doesnt_match"]) + end + end + context 'when params are valid, passwords are weak' do + let(:old_password) { 'Tecohvi0' } # 'Tecohvi0' - test_user password + let(:new_password) { 'Simple' } + let(:confirm_password) { 'Simple' } + it 'returns weak password error' do + do_request + expect_status_to_eq 422 + expect_body.to eq(errors: ["temp_password.requirements"]) + end + end + + context 'when params are valid, confirm code not valid' do + let(:old_password) { 'Tecohvi0' } # 'Tecohvi0' - test_user password + let(:new_password) { 'Gol4aid1' } + let(:confirm_password) { 'Gol4aid1' } + let(:otp_code) { invalid_otp_code } + let(:log_in) { post '/api/v2/identity/sessions', params: { email: test_user.email, password: new_password } } + it 'changes a password' do + do_request + do_confirm_request + expect_status_to_eq 422 + expect_body.to eq(errors: ["resource.password.confirm_code_not_match"]) + end + end + + context 'when params are valid' do + let(:old_password) { 'Tecohvi0' } # 'Tecohvi0' - test_user password + let(:new_password) { 'Gol4aid1' } + let(:confirm_password) { 'Gol4aid1' } + let(:otp_code) { valid_otp_code } + let(:log_in) { post '/api/v2/identity/sessions', params: { email: test_user.email, password: new_password } } + it 'changes a password' do + do_request + expect(response.status).to eq(201) + + do_confirm_request + expect(response.status).to eq(201) + + log_in + expect(response.status).to eq(200) + end + end + end +end + diff --git a/spec/factories/activity.rb b/spec/factories/activity.rb new file mode 100644 index 0000000..bb9f85f --- /dev/null +++ b/spec/factories/activity.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +FactoryBot.define do + factory :activity do + user { FactoryBot.create(:user) } + user_ip { Faker::Internet.ip_v4_address } + user_agent { Faker::Internet.user_agent } + category { %w[admin user].sample } + topic { %w[session password otp account].sample } + action { %w[otp::enable login logout signup].sample } + result { %w[succeed failed].sample } + data { {data: Faker::Lorem.sentence(word_count: 3, supplemental: true, random_words_to_add: 4)}.to_json } + end +end diff --git a/spec/factories/api_keys.rb b/spec/factories/api_keys.rb new file mode 100644 index 0000000..bb462ff --- /dev/null +++ b/spec/factories/api_keys.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +FactoryBot.define do + factory :api_key, class: 'APIKey' do + kid { Faker::Crypto.sha256 } + secret { SecureRandom.hex(16) } + scope { %w[trade] } + algorithm { 'HS256' } + + trait :with_service_account do + key_holder_account { create(:service_account) } + end + + trait :with_user do + key_holder_account { create(:user) } + end + end +end diff --git a/spec/factories/document.rb b/spec/factories/document.rb new file mode 100644 index 0000000..df57d6b --- /dev/null +++ b/spec/factories/document.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +FactoryBot.define do + factory :document do + user + + doc_type { 'Passport' } + doc_number { Faker::Code.asin } + doc_expire { Faker::Business.credit_card_expiry_date } + + after(:build) do |doc| + doc.upload.download!(Faker::Company.logo) + end + end +end diff --git a/spec/factories/label.rb b/spec/factories/label.rb new file mode 100644 index 0000000..556d2a5 --- /dev/null +++ b/spec/factories/label.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +FactoryBot.define do + factory :label do + key { ::Faker::Internet.slug(glue: '-') } + value { ::Faker::Internet.slug(glue: '-') } + scope { 'public' } + user { create(:user) } + end +end diff --git a/spec/factories/level.rb b/spec/factories/level.rb new file mode 100644 index 0000000..a426c42 --- /dev/null +++ b/spec/factories/level.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +FactoryBot.define do + factory :level do + key { Faker::Hacker.noun } + value { Faker::Hacker.adjective } + description { Faker::Hacker.say_something_smart } + end +end diff --git a/spec/factories/permission.rb b/spec/factories/permission.rb new file mode 100644 index 0000000..2a86665 --- /dev/null +++ b/spec/factories/permission.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +FactoryBot.define do + factory :permission do + role { %w[member trader broker admin accountant support technical compliance superadmin] } + path { 'api/v2' } + action { 'ACCEPT' } + verb { %w[get post put delete head patch all] } + end +end diff --git a/spec/factories/phones.rb b/spec/factories/phones.rb new file mode 100644 index 0000000..0c7e840 --- /dev/null +++ b/spec/factories/phones.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +FactoryBot.define do + factory :phone do + number { '12345678911' } + user + end +end diff --git a/spec/factories/profile.rb b/spec/factories/profile.rb new file mode 100644 index 0000000..2058399 --- /dev/null +++ b/spec/factories/profile.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +FactoryBot.define do + factory :profile do + user { FactoryBot.create(:user) } + author { } + first_name { Faker::Name.first_name } + last_name { Faker::Name.last_name } + dob { Faker::Date.birthday } + address { Faker::Address.state } + city { Faker::Address.city } + country { Faker::Address.country_code_long } + postcode { Faker::Address.postcode } + end +end diff --git a/spec/factories/restriction.rb b/spec/factories/restriction.rb new file mode 100644 index 0000000..ae4359a --- /dev/null +++ b/spec/factories/restriction.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +FactoryBot.define do + factory :restriction do + scope { 'ip_subnet' } + value { '0.0.0.0/0' } + end +end diff --git a/spec/factories/service_account.rb b/spec/factories/service_account.rb new file mode 100644 index 0000000..2603781 --- /dev/null +++ b/spec/factories/service_account.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +FactoryBot.define do + factory :service_account do + user { FactoryBot.create(:user) } + email { Faker::Internet.email } + uid { UIDGenerator.generate("SI") } + + trait :without_user do + user { nil } + end + end +end diff --git a/spec/factories/user.rb b/spec/factories/user.rb new file mode 100644 index 0000000..8974148 --- /dev/null +++ b/spec/factories/user.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +FactoryBot.define do + factory :user do + email { Faker::Internet.email } + password { 'Tecohvi0' } + password_confirmation { 'Tecohvi0' } + state { 'active' } + + trait :with_profile do + after(:create) do |user, _| + create(:profile, user: user) + end + end + + trait :with_document do + after(:create) do |user, _| + create(:document, user: user) + end + end + + trait :with_phone do + after(:create) do |user, _| + create(:phone, user: user) + end + end + + trait :with_document_phone_profile do + after(:create) do |user, _| + create(:phone, user: user) + create(:profile, user: user) + create(:document, user: user) + end + end + end +end diff --git a/spec/fixtures/files/documents_test.jpg b/spec/fixtures/files/documents_test.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9d448d18873e8c33d1c1a74b06c37b71b1e22a0d GIT binary patch literal 128519 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 z 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�EjvxF%lQEj{ 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 ['Passport', 'Identity card', 'Driver license', 'Utility Bill', 'Residental', 'Institutional'] } + allow(YAML).to receive(:load_file).and_return(@template) + end + + it 'reads configuration from the file' do + expect(DocumentTypes.list).to eq(expected_values) + end + + it 'cache preconfig and doesn\'t read from the file on every call' do + expect(DocumentTypes.list).to eq(expected_values) + + @template = {} + + expect(DocumentTypes.list).to eq(expected_values) + end + end +end diff --git a/spec/lib/barong/jwt_spec.rb b/spec/lib/barong/jwt_spec.rb new file mode 100644 index 0000000..ba9b4e0 --- /dev/null +++ b/spec/lib/barong/jwt_spec.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +require_dependency 'barong/jwt' + +describe Barong::JWT do + let(:key) { OpenSSL::PKey::RSA.generate(2048) } + + it 'should encode payload with claims' do + codec = Barong::JWT.new(key: key) + token = codec.encode({hello: 'world'}) + + decoded = ::JWT.decode(token, key.public_key, + true, { algorithm: 'RS256' }) + expect(decoded.first.fetch('hello')).to eq('world') + end +end diff --git a/spec/lib/barong/seed_spec.rb b/spec/lib/barong/seed_spec.rb new file mode 100644 index 0000000..f37e1d1 --- /dev/null +++ b/spec/lib/barong/seed_spec.rb @@ -0,0 +1,404 @@ +# frozen_string_literal: true + +require_dependency 'barong/seed' + +describe "Default seeds.yml template" do + let(:seeds) { Barong::Seed.new.seeds } + + it "Generate seed using environement variables" do + expect(seeds["levels"].size).to eq(3) + # TODO fix 2 below expect + # expect(ENV).to receive(:fetch).with("BARONG_ADMIN_EMAIL", "admin@barong.io").and_call_original + # expect(ENV).to receive(:fetch).with("BARONG_ADMIN_PASSWORD", nil).and_return("123AZErty@") + + end +end + +describe Barong::Seed do + let(:create_permissions) do + create :permission, + role: 'member' + create :permission, + role: 'admin' + end + let(:levels) { + [ + { + "key" => "email", + "value" => "verified", + "description" => "User clicked on the confirmation link" + }, + { + "key" => "phone", + "value" => "verified", + "description" => "User entered a valid code from sms" + } + ] + } + let(:permissions) {[]} + let(:restrictions) {[]} + let(:users) {[]} + let(:seeds) { + { + "users" => users, + "levels" => levels, + "permissions" => permissions, + "restrictions" => restrictions + } + } + + let(:logger) { Logger.new('/dev/null') } + let(:seeder) { Barong::Seed.new } + + before(:each) do + allow(seeder).to receive(:seeds).and_return(seeds) + allow(seeder).to receive(:logger).and_return(logger) + Level.delete_all + User.delete_all + Permission.delete_all + Restriction.delete_all + end + + context "Seed simple and valid levels" do + it "seeds levels in database" do + seeder.seed_levels + expect(Level.count).to be 2 + Level.all.each_with_index do |level, index| + expect(level.id).to eq (index+1) + expect(level.key).to eq levels[index]["key"] + expect(level.value).to eq levels[index]["value"] + expect(level.description).to eq levels[index]["description"] + end + end + + it "skips existing levels" do + seeder.seed_levels + seeder.seed_levels + expect(Level.count).to be 2 + end + end + + context "Seed one admin user" do + let(:users) { + [ + { + "email" => "admin@peatio.tech", + "password" => "123aZE@654", + "role" => "admin", + "state" => "active", + "level" => 2 + } + ] + } + + it "seeds users in database" do + create_permissions + seeder.seed_levels + seeder.seed_users + expect(User.count).to eq 1 + user = User.first + expect(user.email).to eq("admin@peatio.tech") + expect(user.role).to eq("admin") + expect(user.state).to eq("active") + expect(user.level).to eq(2) + end + end + + context "User level doesn't match levels in databases" do + let(:users) { + [ + { + "email" => "admin@peatio.tech", + "password" => "123aZE@654", + "role" => "admin", + "state" => "active", + "level" => 3 + } + ] + } + + it "raises an explicit error" do + create_permissions + seeder.seed_levels + expect { + seeder.seed_users + }.to raise_error(Barong::Seed::ConfigError, "No enough levels found in database to grant the user to level 3") + end + end + + context "User level is not set" do + let(:users) { + [ + { + "email" => "admin@peatio.tech", + "password" => "123aZE@654", + "role" => "admin", + "state" => "active", + } + ] + } + + it "raises an explicit error" do + seeder.seed_levels + expect { + seeder.seed_users + }.to raise_error(Barong::Seed::ConfigError, "Level is missing for user admin@peatio.tech") + end + end + + context "User email is not set" do + let(:users) { + [ + { + "password" => "123aZE@654", + "role" => "admin", + "state" => "active", + "level" => 2 + } + ] + } + + it "raises an explicit error" do + seeder.seed_levels + expect { + seeder.seed_users + }.to raise_error(Barong::Seed::ConfigError, "Email missing in users seed") + end + end + + context "User state is not set" do + let(:users) { + [ + { + "email" => "admin@peatio.tech", + "password" => "123aZE@654", + "role" => "admin", + "level" => 0 + } + ] + } + + it "defaults state to pending" do + create_permissions + seeder.seed_levels + seeder.seed_users + expect(User.count).to eq 1 + user = User.first + expect(user.email).to eq("admin@peatio.tech") + expect(user.role).to eq("admin") + expect(user.state).to eq("pending") + expect(user.level).to eq(0) + end + end + + context "User role is not set" do + let(:users) { + [ + { + "email" => "admin@peatio.tech", + "password" => "123aZE@654", + "state" => "active", + "level" => 2 + } + ] + } + + it "defaults role to member" do + create_permissions + seeder.seed_levels + seeder.seed_users + expect(User.count).to eq 1 + user = User.first + expect(user.email).to eq("admin@peatio.tech") + expect(user.role).to eq("member") + expect(user.state).to eq("active") + expect(user.level).to eq(2) + end + end + + context "Seed one admin and a regular user" do + let(:users) { + [ + { + "email" => "admin@peatio.tech", + "password" => "123aZE@654", + "role" => "admin", + "state" => "active", + "level" => 2 + }, + { + "email" => "user@example.com", + "password" => "123aZE@654", + "role" => "member", + "state" => "active", + "level" => 2 + } + ] + } + + it "seeds users in database" do + create_permissions + seeder.seed_levels + seeder.seed_users + + expect(User.count).to eq 2 + + admin = User.find_by(email: "admin@peatio.tech") + expect(admin.role).to eq("admin") + expect(admin.state).to eq("active") + expect(admin.level).to eq(2) + + admin = User.find_by(email: "user@example.com") + expect(admin.role).to eq("member") + expect(admin.state).to eq("active") + expect(admin.level).to eq(2) + end + end + + context "Seed simple GET /me member permissions" do + let(:permissions) { + [ + { + "role" => "member", + "verb" => "GET", + "action" => "ACCEPT", + "path" => "api/v2/resource/users/me" + } + ] + } + + it "seeds permissions in database" do + seeder.seed_permissions + expect(Permission.count).to eq 1 + permission = Permission.first + expect(permission.role).to eq("member") + expect(permission.verb).to eq("GET") + expect(permission.path).to eq("api/v2/resource/users/me") + end + end + + context "Permission verb is not set" do + let(:permissions) { + [ + { + "role" => "member", + "action" => "ACCEPT", + "path" => "api/v2/resource/users/me" + } + ] + } + + it "raises an explicit error" do + expect { + seeder.seed_permissions + }.to raise_error(Barong::Seed::ConfigError, "Can't create permission: Verb can't be blank") + end + end + + context "Permission path is not set" do + let(:permissions) { + [ + { + "role" => "member", + "action" => "ACCEPT", + "verb" => "GET" + } + ] + } + it "raises an explicit error" do + expect { + seeder.seed_permissions + }.to raise_error(Barong::Seed::ConfigError, "Can't create permission: Path can't be blank") + end + end + + context "Seed one admin GET and one accountant POST permissions" do + let(:permissions) { + [ + { + "role" => "admin", + "verb" => "GET", + "action" => "ACCEPT", + "path" => "api/v2/admin/users/list" + }, + { + "role" => "accountant", + "verb" => "POST", + "action" => "ACCEPT", + "path" => "api/v2/admin/users" + } + ] + } + + it "seeds permissions in database" do + seeder.seed_permissions + expect(Permission.count).to eq 2 + + admin_permission = Permission.find_by_role('admin') + expect(admin_permission.role).to eq("admin") + expect(admin_permission.verb).to eq("GET") + expect(admin_permission.path).to eq("api/v2/admin/users/list") + + accountant_permission = Permission.find_by_role('accountant') + expect(accountant_permission.role).to eq("accountant") + expect(accountant_permission.verb).to eq("POST") + expect(accountant_permission.path).to eq("api/v2/admin/users") + end + end + + context "Seed simple and valid restrictions" do + let(:restrictions) { + [ + { + "category" => "maintenance", + "scope" => "all", + "value" => "all", + "state" => "enabled" + }, + { + "category" => "blacklist", + "scope" => "all", + "value" => "all", + "state" => "enabled" + } + ] + } + + it "seeds restrictions in database" do + seeder.seed_restrictions + expect(Restriction.count).to be 2 + Restriction.all.each_with_index do |restriction, index| + expect(restriction.category).to eq restrictions[index]["category"] + expect(restriction.scope).to eq restrictions[index]["value"] + expect(restriction.value).to eq restrictions[index]["value"] + expect(restriction.state).to eq restrictions[index]["state"] + end + end + end + + context "Empty seed" do + it "returns without error and with kind log info" do + expect { + seeder.seed_restrictions + }.not_to raise_error + end + end + + context "Missing params in restriction seed" do + let(:restrictions) { + [ + { + "category" => "maintenance", + "scope" => "all", + "value" => "all", + } + ] + } + + it "raises error on invalid seed" do + expect { + seeder.seed_restrictions + }.to raise_error(Barong::Seed::ConfigError, "state is missing in restrictions seed") + end + end +end diff --git a/spec/mailers/postmaster_spec.rb b/spec/mailers/postmaster_spec.rb new file mode 100644 index 0000000..1c15a52 --- /dev/null +++ b/spec/mailers/postmaster_spec.rb @@ -0,0 +1,40 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe Postmaster, type: :mailer do + let!(:create_admin_permission) do + create :permission, + role: 'admin' + end + let!(:create_member_permission) do + create :permission, + role: 'member' + end + + describe '#process_payload' do + let!(:user) { create(:user, email: 'test1@gmail.com') } + let(:record) { OpenStruct.new(domain: 'barong.com', token: 'blah-blah' ) } + let(:payload) do + { + user: user, + changes: nil, + record: record, + subject: 'Test Email', + template_name: 'email_confirmation.en.html.erb', + logo: 'https://storage.googleapis.com/public_peatio/logo.png' + } + end + let(:mail) { Postmaster.process_payload(payload) } + + it 'renders the headers' do + expect(mail.subject).to eq('Test Email') + expect(mail.to).to eq(['test1@gmail.com']) + expect(mail.from).to eq(['noreply@barong.io']) + end + + it 'renders the body' do + expect(mail.body.encoded).to match('Use this unique link to confirm your email test1@gmail.com') + end + end +end diff --git a/spec/mailers/previews/mailer_preview.rb b/spec/mailers/previews/mailer_preview.rb new file mode 100644 index 0000000..522f157 --- /dev/null +++ b/spec/mailers/previews/mailer_preview.rb @@ -0,0 +1,6 @@ +# frozen_string_literal: true + +# Preview all emails at http://localhost:3000/rails/mailers/mailer +class MailerPreview < ActionMailer::Preview + +end diff --git a/spec/models/ability_spec.rb b/spec/models/ability_spec.rb new file mode 100644 index 0000000..240c229 --- /dev/null +++ b/spec/models/ability_spec.rb @@ -0,0 +1,70 @@ +# frozen_string_literal: true + +describe Ability do + + before do + allow(Ability).to receive(:admin_permissions).and_return({ + "superadmin"=>{"manage"=>["User", "Activity", "Ability", "APIKey", "Profile", "Permission", "Label", "Restriction", "Level"]}, + "admin"=>{"read"=>["Level", "APIKey", "Permission"], "manage"=>["User", "Activity", "Profile", "Label"]}, + "compliance"=>{"read"=>["Level", "User", "Activity"], "manage"=>["Label"], "update"=>["Profile"]}, + "support"=>{"read"=>["User", "Activity", "APIKey", "Profile", "Label", "Level"]} + }) + end + + let!(:create_permissions) do + create(:permission, role: 'superadmin', action: 'accept', verb: 'get') + create(:permission, role: 'admin', action: 'accept', verb: 'get') + create(:permission, role: 'compliance', action: 'accept', verb: 'get') + create(:permission, role: 'support', action: 'accept', verb: 'get') + end + + context 'abilities for superadmin' do + let(:test_user) { create(:user, email: 'example@gmail.com', role: 'superadmin') } + subject(:ability) { AdminAbility.new(test_user) } + + it { is_expected.to be_able_to(:manage, User.new) } + it { is_expected.to be_able_to(:manage, Activity.new) } + it { is_expected.to be_able_to(:manage, Profile.new) } + it { is_expected.to be_able_to(:manage, Permission.new) } + it { is_expected.to be_able_to(:manage, Label.new) } + it { is_expected.to be_able_to(:manage, Restriction.new) } + it { is_expected.to be_able_to(:manage, Level.new) } + end + + context 'abilities for admin' do + let(:test_user) { create(:user, email: 'example@gmail.com', role: 'admin') } + subject(:ability) { AdminAbility.new(test_user) } + + it { is_expected.to be_able_to(:read, Level.new) } + it { is_expected.to be_able_to(:read, APIKey.new) } + it { is_expected.to be_able_to(:read, Permission.new) } + it { is_expected.to be_able_to(:manage, User.new) } + it { is_expected.to be_able_to(:manage, Activity.new) } + it { is_expected.to be_able_to(:manage, Profile.new) } + it { is_expected.to be_able_to(:manage, Label.new) } + end + + context 'abilities for compliance' do + let(:test_user) { create(:user, email: 'example@gmail.com', role: 'compliance') } + subject(:ability) { AdminAbility.new(test_user) } + + + it { is_expected.to be_able_to(:read, Level.new) } + it { is_expected.to be_able_to(:read, User.new) } + it { is_expected.to be_able_to(:read, Activity.new) } + it { is_expected.to be_able_to(:manage, Label.new) } + it { is_expected.to be_able_to(:update, Profile.new) } + end + + context 'abilities for support' do + let(:test_user) { create(:user, email: 'example@gmail.com', role: 'support') } + subject(:ability) { AdminAbility.new(test_user) } + + it { is_expected.to be_able_to(:read, User.new) } + it { is_expected.to be_able_to(:read, Activity.new) } + it { is_expected.to be_able_to(:read, APIKey.new) } + it { is_expected.to be_able_to(:read, Profile.new) } + it { is_expected.to be_able_to(:read, Label.new) } + it { is_expected.to be_able_to(:read, Level.new) } + end +end diff --git a/spec/models/activity_spec.rb b/spec/models/activity_spec.rb new file mode 100644 index 0000000..d5e7352 --- /dev/null +++ b/spec/models/activity_spec.rb @@ -0,0 +1,65 @@ +# frozen_string_literal: true + +RSpec.describe Activity, type: :model do + let!(:create_admin_permission) do + create :permission, + role: 'admin' + end + let!(:create_member_permission) do + create :permission, + role: 'member' + end + let!(:activity) do + create :activity, topic: 'session', + action: 'login', + result: 'succeed', + user_agent: 'Magic Pony Browser' + end + + context 'General' do + it { should belong_to(:user) } + it { + expect { + activity.update_attribute(:topic, 'otp') + }.to raise_error(ActiveRecord::ActiveRecordError, 'Activity is marked as readonly') + } + end + + describe 'Validations' do + context 'Correct fields values' do + it { should allow_value('session').for(:topic) } + it { should allow_value('otp').for(:topic) } + it { should allow_value('password').for(:topic) } + it { should allow_value('succeed').for(:result) } + it { should allow_value('failed').for(:result) } + it { expect(activity.browser.ua).to eq 'Magic Pony Browser'} + end + + context 'Banned actions and values' do + it { should_not allow_value('passed').for(:result) } + it { should_not allow_value('').for(:user_ip) } + it { expect(activity.browser.known?).to eq false } + it { expect(JSON.parse(activity.data)['note']).to eq 'Detected suspicious browser' } + end + end + + describe 'Browser functionality' do + let(:valid_user_agent){'Android SDK 1.5r3: Mozilla/5.0 (Linux; U; Android 1.5; de-; sdk Build/CUPCAKE) + AppleWebkit/528.5+ (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1'} + let!(:activity) do + create :activity, topic: 'session', + action: 'login', + result: 'succeed', + user_agent: valid_user_agent + end + + context 'Detects browser information' do + it { expect(activity.browser.name).to eq 'Safari' } + it { expect(activity.browser.platform.android?).to eq true } + it { expect(activity.browser.webkit?).to eq true } + it { expect(activity.browser.full_version).to eq '3.1.2' } + it { expect(activity.browser.version).to eq '3' } + end + end + +end diff --git a/spec/models/api_key_spec.rb b/spec/models/api_key_spec.rb new file mode 100644 index 0000000..4b55a72 --- /dev/null +++ b/spec/models/api_key_spec.rb @@ -0,0 +1,124 @@ +# frozen_string_literal: true + +RSpec.describe APIKey, type: :model do + let!(:create_member_permission) do + create :permission, + role: 'member' + end + + let!(:create_service_account_permission) do + create :permission, + role: 'service_account' + end + + describe 'Validations' do + subject(:api_key) { build(:api_key, :with_user) } + + it { should validate_presence_of(:secret).with_message(/can't be blank/) } + it { should validate_uniqueness_of(:kid).with_message(/has already been taken/) } + + context 'key holder state' do + context 'valid response' do + context 'user with active state' do + let!(:user) { create(:user, state: 'active') } + + it 'creates api key' do + subject.key_holder_account = user + expect(subject.save).to eq true + expect(subject.errors.full_messages).to eq [] + end + end + + context 'service account with active state' do + let!(:user) { create(:user, state: 'active') } + let!(:service_account) { create(:service_account, owner_id: user.id) } + + it 'creates api key' do + subject.key_holder_account = user + expect(subject.save).to eq true + expect(subject.errors.full_messages).to eq [] + end + end + end + + context 'invalid response' do + subject { build(:api_key) } + + context 'user with non active state' do + let!(:user) { create(:user, state: 'pending') } + + it 'render error message' do + subject.key_holder_account = user + expect(subject.save).to eq false + expect(subject.errors.full_messages).to include(/non active state for key holder account/) + end + end + + context 'service account with non active state' do + let!(:user) { create(:user, state: 'pending') } + let!(:service_account) { create(:service_account, owner_id: user.id) } + + it 'render error message' do + subject.key_holder_account = service_account + expect(subject.save).to eq false + expect(subject.errors.full_messages).to include(/non active state for key holder account/) + end + end + end + end + + context 'api key state on update' do + context 'valid response' do + context 'user with active state' do + let!(:user) { create(:user, state: 'active') } + let!(:api_key) { create(:api_key, key_holder_account: user, state: 'disabled') } + + it 'updates api key state' do + api_key.state = 'active' + expect(api_key.save).to eq true + expect(api_key.errors.full_messages).to eq [] + end + end + + context 'service account with non active state' do + let!(:user) { create(:user, state: 'active') } + let!(:service_account) { create(:service_account, owner_id: user.id) } + let!(:api_key) { create(:api_key, key_holder_account: service_account, state: 'disabled') } + + it 'render error message' do + api_key.state = 'active' + expect(api_key.save).to eq true + expect(api_key.errors.full_messages).to eq [] + end + end + end + + context 'invalid response' do + context 'user with non active state' do + let!(:user) { create(:user, state: 'active') } + let!(:api_key) { create(:api_key, key_holder_account: user) } + + it 'render error message' do + user.update(state: 'banned') + api_key.state = 'active' + expect(api_key.save).to eq false + expect(api_key.errors.full_messages).to include(/cant activate api key with disabled key holder account/) + end + end + + context 'service account with non active state' do + let!(:user) { create(:user, state: 'active') } + let!(:service_account) { create(:service_account, owner_id: user.id) } + let!(:api_key) { create(:api_key, key_holder_account: service_account) } + + it 'render error message' do + service_account.update(state: 'disabled') + api_key.state = 'active' + expect(api_key.save).to eq false + expect(api_key.errors.full_messages).to include(/cant activate api key with disabled key holder account/) + end + end + end + end + end +end diff --git a/spec/models/document_spec.rb b/spec/models/document_spec.rb new file mode 100644 index 0000000..ebe5607 --- /dev/null +++ b/spec/models/document_spec.rb @@ -0,0 +1,108 @@ +# frozen_string_literal: true + +RSpec.describe Document, type: :model do + ## Test of relationships + let!(:create_admin_permission) do + create :permission, + role: 'admin' + end + let!(:create_member_permission) do + create :permission, + role: 'member' + end + + it { should belong_to(:user) } + + describe 'validation' do + let!(:document) { build :document, doc_expire: doc_expire } + subject do + document.valid? + document.errors.messages + end + let(:doc_expire) { Date.current.to_s } + it { is_expected.to be_blank } + + context 'when doc_expire is expired' do + let(:doc_expire) { 1.day.ago.to_s } + + it { is_expected.to eq(doc_expire: ['is invalid']) } + end + end + + context 'Document creation' do + let!(:current_user) { create(:user) } + let(:create_document) { create :document, user: current_user, doc_type: 'Passport', doc_category: 'front_side' } + let(:create_document_second) { create :document, user: current_user, doc_type: 'Passport', doc_category: 'Selfie' } + let(:create_without_label) { create :document, user: current_user, update_labels: false } + let(:document_label) { current_user.labels.first } + + context 'when it is first document' do + it 'adds new document label' do + create_document + expect { create_document_second }.to change { current_user.reload.labels.count }.from(0).to(1) + end + + it 'new document label is document: pending' do + create_document + create_document_second + expect(document_label.key).to eq 'document' + expect(document_label.value).to eq 'pending' + end + end + + context 'when user has label document: rejected' do + let!(:document_label) do + create :label, + scope: 'private', + key: 'document', + value: 'rejected', + user: current_user + end + + it 'does not add new label' do + create_document + expect { create_document_second }.to_not change { Label.count } + end + + it 'changes label value to pending' do + create_document + create_document_second + expect(current_user.labels.first.value).to eq 'pending' + end + end + + context 'when user has label document: verified' do + let!(:document_label) do + create :label, + scope: 'private', + key: 'document', + value: 'verified', + user: current_user + end + + it 'does not add new label' do + expect { create_document }.to_not change { Label.count } + end + + it 'remains value verified' do + expect { create_document }.to_not change { document_label } + end + end + end + + context 'submasked fields' do + let!(:current_user) { create(:user) } + let(:document) { create :document, user: current_user, doc_type: 'Passport', doc_number: 'M0993353' } + let(:document_without_doc_number) { create :document, user: current_user, doc_type: 'Passport', doc_number: nil } + + context 'number' do + it { expect(document.sub_masked_doc_number).to eq 'M0****53' } + it { expect(document_without_doc_number.sub_masked_doc_number).to eq nil } + + it 'should mask first 2 letters and last 2 digits' do + document.update(doc_type: 'Driver license', doc_number: 'BO231283013DSAS23') + expect(document.sub_masked_doc_number).to eq 'BO*************23' + end + end + end +end diff --git a/spec/models/label_spec.rb b/spec/models/label_spec.rb new file mode 100644 index 0000000..17cd513 --- /dev/null +++ b/spec/models/label_spec.rb @@ -0,0 +1,252 @@ +# frozen_string_literal: true + +RSpec.describe Label, type: :model do + let!(:create_admin_permission) do + create :permission, + role: 'admin' + end + let!(:create_member_permission) do + create :permission, + role: 'member' + end + it { should belong_to(:user) } + + describe 'update user level if label defined as level', order: :defined do + let!(:email_verified_level) { Level.find(1) } + let!(:phone_verified_level) { Level.find(2) } + let!(:identity_verified_level) { Level.find(3) } + let!(:document_verified_level) { Level.find(4) } + + context 'when user has no labels' do + let!(:user) { create(:user) } + it { expect(user.reload.level).to eq 0 } + + it 'does not change level if valid label has public scope' do + expect do + create_label_with_level(user, email_verified_level, scope: 'public') + end.to_not change { user.reload.level } + end + + it 'when checks labels-levels mappings' do + expect do + create_label_with_level(user, email_verified_level) + end.to change { user.reload.level }.from(0).to(1) + + expect do + create_label_with_level(user, phone_verified_level) + end.to change { user.reload.level }.from(1).to(2) + + expect do + create_label_with_level(user, identity_verified_level) + end.to change { user.reload.level }.from(2).to(3) + + expect do + create_label_with_level(user, document_verified_level) + end.to change { user.reload.level }.from(3).to(4) + end + end + + context 'when user has verified email and phone' do + let!(:user) { create(:user) } + + before do + create_label_with_level(user, email_verified_level) + create_label_with_level(user, phone_verified_level) + end + + it 'changes to level 2 when identity verified label applied' do + expect(user.reload.level).to eq(2) + end + + it 'changes to level 3 when identity verified label applied' do + expect do + create_label_with_level(user, identity_verified_level) + end.to change { user.reload.level }.to(3) + end + + it 'downgrades level to 1 when phone state changes to rejected' do + Label.find_by(user: user, key: phone_verified_level.key).update(value: 'rejected') + user.update_level + expect(user.reload.level).to eq 1 + end + + it 'does not change level if user has document verified label' do + expect do + create_label_with_level(user, document_verified_level) + end.to_not change { user.reload.level } + end + end + + context 'when user has all label required for level 4' do + let!(:user) { create(:user) } + before do + create_label_with_level(user, email_verified_level) + create_label_with_level(user, phone_verified_level) + create_label_with_level(user, identity_verified_level) + create_label_with_level(user, document_verified_level) + end + + it { expect(user.reload.level).to eq 4 } + + it 'downgrades level to 0 when email verified label changes' do + Label.find_by(user: user, key: email_verified_level.key).update(value: 'rejected') + user.update_level + expect(user.reload.level).to eq 0 + end + + it 'downgrades level to 0 when email verified label changes' do + Label.find_by(user: user, key: email_verified_level.key).destroy + user.update_level + expect(user.reload.level).to eq 0 + end + end + + context 'document label changes' do + let!(:user) { create(:user) } + let(:last_mailer_delivery) { ActionMailer::Base.deliveries.last } + let!(:document_label) do + create( + :label, + user: user, + key: 'document', + value: 'pending', + scope: 'private' + ) + end + end + + context 'when label scope is changed from private to public and reverse' do + let!(:user) { create(:user) } + + before do + create_label_with_level(user, email_verified_level) + create_label_with_level(user, phone_verified_level) + create_label_with_level(user, identity_verified_level) + create_label_with_level(user, document_verified_level) + end + + it 'updates level' do + expect do + user.labels.last.update(scope: :public) + end.to change { user.reload.level }.from(4).to(3) + + expect do + user.labels.last.update(scope: :private) + end.to change { user.reload.level }.from(3).to(4) + end + end + + context '2 labels with same keys' do + let!(:user) { create(:user) } + let!(:label_public) do + create :label, + user: user, + key: email_verified_level.key, + value: email_verified_level.value, + scope: 'public' + end + + let!(:label_private) do + create :label, + user: user, + key: email_verified_level.key, + value: email_verified_level.value, + scope: 'private' + end + + context 'can be created with different scopes' do + it 'user has both labels' do + expect(user.labels).to include(label_private, label_public) + end + + it 'user has level 1' do + expect(user.level).to eq 1 + end + + context 'when private label changes' do + it 'user level downgrades when value changed' do + expect { label_private.update(value: 'rejected') }.to change { user.reload.level }.to 0 + end + + it 'user level downgrades when key changed' do + expect { label_private.update(key: 'email0') }.to change { user.reload.level }.to 0 + end + end + + context 'when public label changes' do + it 'user level does not change' do + expect { label_public.update(value: 'rejected') }.to_not change { user.reload.level } + end + end + end + end + + context 'when user has all required labels for level 4 in wrong scope' do + let!(:user) { create(:user) } + let!(:label_email_public) do + create :label, + user: user, + key: email_verified_level.key, + value: email_verified_level.value, + scope: 'public' + end + let!(:label_phone_public) do + create :label, + user: user, + key: phone_verified_level.key, + value: phone_verified_level.value, + scope: 'public' + end + let!(:label_identity_public) do + create :label, + user: user, + key: identity_verified_level.key, + value: identity_verified_level.value, + scope: 'public' + end + let!(:label_document_public) do + create :label, + user: user, + key: document_verified_level.key, + value: document_verified_level.value, + scope: 'public' + end + + it { expect(user.reload.level).to eq 0 } + end + end + + context 'downcase fields' do + let(:user) { create(:user) } + let(:label) { build(:label, user: user, key: 'PhoNe', value: 'VeRifiEd') } + + it 'downcases key and value before save' do + label.save + expect(label.reload.key).to eq 'phone' + expect(label.reload.value).to eq 'verified' + end + end + + context 'event api behaviour' do + let!(:user) { create(:user, state: 'pending') } + let(:label) { create(:label, user_id: user.id) } + + before do + allow(EventAPI).to receive(:notify) + end + + it 'receives event with label create' do + label + + expect(EventAPI).to have_received(:notify).with('model.label.created', + hash_including( + record: hash_including( + id: label.id, + key: label.key, + value: label.value, + user: hash_including(uid: user.uid, level: 0, email: user.email) + ) + )) + end + end +end diff --git a/spec/models/level_spec.rb b/spec/models/level_spec.rb new file mode 100644 index 0000000..726288e --- /dev/null +++ b/spec/models/level_spec.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +RSpec.describe Level, type: :model do + it { should validate_presence_of(:key) } + it { should validate_presence_of(:value) } + it { should validate_presence_of(:description) } +end diff --git a/spec/models/phone_spec.rb b/spec/models/phone_spec.rb new file mode 100644 index 0000000..029c61f --- /dev/null +++ b/spec/models/phone_spec.rb @@ -0,0 +1,41 @@ +# frozen_string_literal: true + +RSpec.describe Phone, type: :model do + let!(:create_member_permission) do + create :permission, + role: 'member' + end + + context 'submasked fields' do + let!(:phone) { create(:phone) } + + context 'number' do + it 'should mask country code and last 4 digits' do + phone.update(number: '79225551234') + expect(phone.sub_masked_number).to eq '7******1234' + end + + it 'should mask country code and last 4 digits' do + phone.update(number: '+201112341923') + expect(phone.sub_masked_number).to eq '20******1923' + end + + it 'should mask country code and last 4 digits' do + phone.update(number: '+380971232322') + expect(phone.sub_masked_number).to eq '380*****2322' + end + + it 'should return empty phone number' do + phone.update(number: '') + expect(phone.sub_masked_number).to eq '' + end + + context 'default country code' do + it 'should mask country code' do + phone.update_attribute(:number, '1112222') + expect(phone.sub_masked_number).to eq '11*2222' + end + end + end + end +end diff --git a/spec/models/profile_spec.rb b/spec/models/profile_spec.rb new file mode 100644 index 0000000..4382b18 --- /dev/null +++ b/spec/models/profile_spec.rb @@ -0,0 +1,385 @@ +# frozen_string_literal: true + +RSpec.describe Profile, type: :model do + describe 'squish_spaces' do + let!(:create_member_permission) do + create :permission, + role: 'member' + end + let!(:profile) do + create :profile, first_name: ' First Name ', + last_name: ' Last Name ', + city: ' New York ', + postcode: ' AB 135-144 ' + end + + it 'squishes spaces' do + profile.reload + expect(profile.first_name).to eq 'First Name' + expect(profile.last_name).to eq 'Last Name' + expect(profile.city).to eq 'New York' + expect(profile.postcode).to eq 'AB 135-144' + end + end + + describe 'creating partial priofile' do + let!(:create_member_permission) do + create :permission, + role: 'member' + end + let!(:user) { create(:user) } + + subject { Profile.create(params.merge(user: user)) } + + context 'empty params' do + let!(:params) { {} } + + it { expect(subject).to be_valid } + it { expect(subject.first_name.nil?).to be_truthy } + it { expect(subject.last_name.nil?).to be_truthy } + it { expect(subject.dob.nil?).to be_truthy } + it { expect(subject.address.nil?).to be_truthy } + it { expect(subject.postcode.nil?).to be_truthy } + it { expect(subject.city.nil?).to be_truthy } + it { expect(subject.country.nil?).to be_truthy } + it { expect(subject.metadata.nil?).to be_truthy } + it { expect(subject.state).to eq('drafted') } + it { expect(subject.user.labels.find_by(key: 'profile').value).to eq('drafted') } + + context 'add empty params' do + + let!(:params) { + { + last_name: Faker::Name.last_name, + first_name: Faker::Name.first_name, + dob: Faker::Date.birthday, + country: Faker::Address.country_code_long, + city: Faker::Address.city, + address: Faker::Address.street_address, + postcode: Faker::Address.zip_code + } + } + + before do + subject.update(params) + end + + it { expect(subject).to be_valid } + it { expect(subject.first_name.present?).to be_truthy } + it { expect(subject.last_name.present?).to be_truthy } + it { expect(subject.dob.present?).to be_truthy } + it { expect(subject.address.present?).to be_truthy } + it { expect(subject.postcode.present?).to be_truthy } + it { expect(subject.city.present?).to be_truthy } + it { expect(subject.country.present?).to be_truthy } + it { expect(subject.metadata.nil?).to be_truthy } + it { expect(subject.state).to eq('drafted') } + it { expect(subject.user.labels.find_by(key: 'profile').value).to eq('drafted') } + end + end + + context 'all profile params' do + let!(:params) { + { + last_name: Faker::Name.last_name, + first_name: Faker::Name.first_name, + dob: Faker::Date.birthday, + country: Faker::Address.country_code_long, + city: Faker::Address.city, + address: Faker::Address.street_address, + postcode: Faker::Address.zip_code + } + } + + it { expect(subject).to be_valid } + it { expect(subject.first_name.present?).to be_truthy } + it { expect(subject.last_name.present?).to be_truthy } + it { expect(subject.dob.present?).to be_truthy } + it { expect(subject.address.present?).to be_truthy } + it { expect(subject.postcode.present?).to be_truthy } + it { expect(subject.city.present?).to be_truthy } + it { expect(subject.country.present?).to be_truthy } + it { expect(subject.metadata.present?).to be_falsey } + it { expect(subject.state).to eq('drafted') } + it { expect(subject.user.labels.find_by(key: 'profile').value).to eq('drafted') } + end + end + + context 'profile_state!' do + let!(:create_member_permission) do + create :permission, + role: 'member' + end + + let!(:user) { create(:user) } + let!(:verified_profile) { create(:profile, user_id: user.id, state: 'verified') } + let!(:rejected_profile) { create(:profile, user_id: user.id, state: 'rejected') } + let!(:drafted_profile) { create(:profile, user_id: user.id, state: 'drafted') } + let!(:profile_params) { + { + user_id: user.id, + last_name: Faker::Name.last_name, + first_name: Faker::Name.first_name, + dob: Faker::Date.birthday, + country: Faker::Address.country_code_long, + city: Faker::Address.city, + address: Faker::Address.street_address, + postcode: Faker::Address.zip_code + } + } + + it 'profile with state drafted' do + profile = Profile.new(profile_params) + profile.save + profile.valid? + + expect(profile.errors[:state]).to eq(['already exists']) + end + + it 'profile with state submitted' do + profile = Profile.new(profile_params.merge(state: 'submitted')) + profile.save + profile.valid? + + expect(profile.errors[:state]).to eq(['already exists']) + end + + it 'profile with state verified' do + profile = Profile.new(profile_params.merge(state: 'verified')) + profile.save + expect(profile.valid?).to eq true + end + + it 'profile with state rejected' do + profile = Profile.new(profile_params.merge(state: 'rejected')) + profile.save + expect(profile.valid?).to eq true + end + end + + context 'create_or_update_profile_label' do + let!(:create_member_permission) do + create :permission, + role: 'member' + end + + let!(:user) { create(:user) } + let!(:profile_params) { + { + user_id: user.id, + last_name: Faker::Name.last_name, + first_name: Faker::Name.first_name, + dob: Faker::Date.birthday, + country: Faker::Address.country_code_long, + city: Faker::Address.city, + address: Faker::Address.street_address, + postcode: Faker::Address.zip_code + } + } + + it 'creating profile label' do + expect(user.labels.count).to eq 0 + + Profile.create(profile_params) + expect(user.labels.count).to eq 1 + expect(user.labels.first.key).to eq 'profile' + expect(user.labels.first.value).to eq 'drafted' + end + + it 'updating profile label' do + profile = Profile.create(profile_params.merge(state: 'submitted')) + expect(user.labels.count).to eq 1 + expect(user.labels.first.key).to eq 'profile' + expect(user.labels.first.value).to eq 'submitted' + + expect(user.labels.count).to eq 1 + + profile.update(state: 'verified') + expect(user.labels.count).to eq 1 + expect(user.labels.first.key).to eq 'profile' + expect(user.labels.first.value).to eq 'verified' + end + + context 'dob param' do + let!(:profile) { create(:profile, user_id: user.id, state: 'verified') } + + it 'should be valid dob' do + profile.update(dob: Time.now) + expect(profile.valid?).to eq true + end + + it 'should be invalid dob format' do + profile.update(dob: '') + expect(profile.valid?).to eq false + expect(profile.errors[:dob]).to eq ["invalid date format"] + end + + it 'should be invalid dob format' do + profile.update(dob: Time.now + 3.days) + expect(profile.valid?).to eq false + expect(profile.errors[:dob]).to eq ["cant be in future"] + end + end + end + + context 'update_document_label' do + let!(:create_member_permission) do + create :permission, + role: 'member' + end + + let!(:user) { create(:user) } + let!(:user_without_document) { create(:user) } + let!(:document_verified_level) { Level.find(4) } + let!(:document_verified_label) { create_label_with_level(user, document_verified_level) } + + let!(:profile_params) { + { + last_name: Faker::Name.last_name, + first_name: Faker::Name.first_name, + dob: Faker::Date.birthday, + country: Faker::Address.country_code_long, + city: Faker::Address.city, + address: Faker::Address.street_address, + postcode: Faker::Address.zip_code + } + } + + it 'change document state when new profile created' do + expect(user.labels.find_by(key: :document).value).to eq 'verified' + + Profile.create(profile_params.merge(user_id: user.id)) + expect(user.labels.count).to eq 2 + expect(user.labels.find_by(key: :document).value).to eq 'verified' + end + + it 'do not change document state when document doesnt exist' do + expect(user_without_document.labels.find_by(key: :document)).to eq nil + + Profile.create(profile_params.merge(user_id: user_without_document.id)) + expect(user_without_document.labels.count).to eq 1 + expect(user_without_document.labels.find_by(key: :document)).to eq nil + end + end + + context 'event api behaviour' do + let!(:permission) { create(:permission, role: 'member') } + let!(:user) { create(:user, state: 'pending', role: 'member') } + let!(:profile) { create(:profile, user_id: user.id, first_name: old_name) } + let!(:old_name) { Faker::Name.first_name } + let!(:new_name) { Faker::Name.first_name } + + let(:profile_update) { profile.update(first_name: new_name ) } + + before do + allow(EventAPI).to receive(:notify) + end + + it 'receives event with label create' do + profile_update + + expect(EventAPI).to have_received(:notify).with('model.profile.updated', + hash_including( + changes: { first_name: old_name }, + record: hash_including(first_name: new_name) + )) + end + end + + context 'validation' do + let!(:create_member_permission) do + create :permission, + role: 'member' + end + + context 'encrypted fields length' do + let!(:profile) { create(:profile) } + + it 'encrypted first name should be valid with 255 characters' do + profile.update(first_name: Faker::Alphanumeric.alphanumeric(number: 255)) + + expect(profile.valid?).to eq true + end + + it 'encrypted last name should be valid with 255 characters' do + profile.update(last_name: Faker::Alphanumeric.alphanumeric(number: 255)) + + expect(profile.valid?).to eq true + end + + it 'encrypted address should be valid with 255 characters' do + profile.update(address: Faker::Alphanumeric.alphanumeric(number: 255)) + + expect(profile.valid?).to eq true + end + end + end + + context 'submasked fields' do + let!(:create_member_permission) do + create :permission, + role: 'member' + end + + let!(:user) { create(:user) } + + let!(:profile) do + create :profile, first_name: 'Oleksandr', + last_name: 'Berezniy', + city: 'New York', + postcode: 'AB 135-144', + dob: Date.new(2007, 5, 12) + end + + let!(:profile_without_last_name) do + create :profile, first_name: 'Oleksandr', + last_name: nil, + city: 'New York', + postcode: 'AB 135-144' + end + + let!(:profile_without_dob) do + create :profile, first_name: 'Oleksandr', + last_name: nil, + city: 'New York', + postcode: 'AB 135-144', + dob: nil + end + + context 'last_name' do + it { expect(profile.sub_masked_last_name).to eq 'B*******' } + + it 'should mask all letters except first one' do + profile.update(last_name: 'Teylor_1') + expect(profile.sub_masked_last_name).to eq 'T*******' + end + + it 'should mask all letters except first one' do + profile.update(last_name: ' Last name ') + expect(profile.sub_masked_last_name).to eq 'L********' + end + + it 'should mask all letters except first one' do + profile.update(last_name: '') + expect(profile.sub_masked_last_name).to eq '' + end + + it 'should mask all letters except first one' do + expect(profile_without_last_name.sub_masked_last_name).to eq nil + end + end + + context 'dob' do + it { expect(profile.sub_masked_dob).to eq '2007-05-**' } + + it 'should mask only date numbers' do + profile.update(dob: Date.new(2020, 12, 12)) + expect(profile.sub_masked_dob).to eq '2020-12-**' + end + + it 'should mask only date numbers' do + expect(profile_without_dob.sub_masked_dob).to eq nil + end + end + end +end diff --git a/spec/models/restrictions_spec.rb b/spec/models/restrictions_spec.rb new file mode 100644 index 0000000..dee0474 --- /dev/null +++ b/spec/models/restrictions_spec.rb @@ -0,0 +1,86 @@ +# frozen_string_literal: true + +RSpec.describe Restriction, type: :model do + context 'create' do + it { should_not allow_value('planet').for(:scope) } + + it 'valid address with ip scope' do + expect(Restriction.new(scope: 'ip', value: '127.0.0.1', category: 'blacklist').valid?).to be_truthy + end + + it 'invalid address with ip scope' do + expect(Restriction.new(scope: 'ip', value: 'abc.0.0.1', category: 'blacklist').valid?).to be_falsey + end + + it 'ip subnet with ip scope' do + expect(Restriction.new(scope: 'ip', value: '127.0.0.1/24', category: 'blacklist').valid?).to be_falsey + end + + it 'valid subnet with ip_subnet scope' do + expect(Restriction.new(scope: 'ip_subnet', value: '127.0.0.1/24', category: 'blacklist').valid?).to be_truthy + end + + it 'invalid subnet with ip_subnet scope' do + expect(Restriction.new(scope: 'ip_subnet', value: '127.0.0.1/one', category: 'blacklist').valid?).to be_falsey + end + + it 'ip address with ip_subnet scope' do + expect(Restriction.new(scope: 'ip_subnet', value: '127.0.0.1', category: 'blacklist').valid?).to be_falsey + end + end + + context 'session destroy' do + let!(:permission) { create :permission, role: 'member'} + let(:user) { create(:user) } + + before do + allow(Rails.cache).to receive(:delete_matched).and_return(nil) + end + + context 'blocklogin category' do + context 'after create' do + it do + expect(Rails.cache).to receive(:delete_matched) + Restriction.create!(scope: 'ip', value: '127.0.0.1', category: 'blocklogin', state: "enabled") + end + + it do + expect(Rails.cache).to_not receive(:delete_matched) + Restriction.create!(scope: 'ip', value: '127.0.0.2', category: 'blocklogin', state: "disabled") + end + end + + context 'after update' do + let!(:enabled_restriction) {create(:restriction, scope: 'ip', value: '127.0.0.3', category: 'blocklogin', state: "enabled")} + let!(:disabled_restriction) {create( :restriction, scope: 'ip', value: '127.0.0.4', category: 'blocklogin', state: "disabled")} + + it do + expect(Rails.cache).to receive(:delete_matched) + disabled_restriction.update(state: "enabled") + end + + it do + expect(Rails.cache).to_not receive(:delete_matched) + enabled_restriction.update(state: "enabled") + end + + it do + expect(Rails.cache).to_not receive(:delete_matched) + disabled_restriction.update(state: "disabled") + end + + it do + expect(Rails.cache).to_not receive(:delete_matched) + enabled_restriction.update(state: "disabled") + end + end + end + + context 'another category' do + it 'it should not destroy sessions' do + expect(Rails.cache).to_not receive(:delete_matched) + Restriction.create!(scope: 'ip', value: '127.0.0.1', category: 'blacklist', state: "enabled") + end + end + end +end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb new file mode 100644 index 0000000..61ce410 --- /dev/null +++ b/spec/models/user_spec.rb @@ -0,0 +1,409 @@ +# frozen_string_literal: true + +RSpec.describe User, type: :model do + before { allow(Barong::App.config).to receive_messages(kyc_provider: 'local') } + + let!(:create_member_permission) do + create :permission, + role: 'member' + end + context 'User model basic syntax' do + ## Test of data length + it { should validate_length_of(:data) } + + # 1100 char string + let(:big_str) { "string bar"*11 } + + it { should_not allow_value(big_str).for(:data)} + + ## Test of validations + it { should validate_presence_of(:email) } + it { should have_many(:documents).dependent(:destroy) } + + ## Test of relationships + it { should have_many(:profiles).dependent(:destroy) } + + ## Test of UID creation + it 'creates default uid with prefix ID' do + default_user = create(:user) + expect(default_user.uid).to start_with(Barong::App.config.uid_prefix) + end + + it 'uid prefix can be changed by ENV' do + allow(Barong::App.config).to receive(:uid_prefix).and_return('GG') + + default_user = create(:user) + expect(default_user.uid).to start_with('GG') + end + + it 'uid_prefix doesnt case sensitive and always converts to big letters' do + allow(Barong::App.config).to receive(:uid_prefix).and_return('aa') + + default_user = create(:user) + expect(default_user.uid).to start_with('AA') + end + + it do + usr = create(:user) + payload = usr.as_payload + expect(payload['email']).to eq(usr.email) + end + + describe '#referral' do + let!(:user1) { create(:user) } + let!(:user2) { create(:user, referral_id: user1.id) } + + it 'return error when referral doesnt exist' do + record = User.new(uid: 'ID122312323', email: 'test@barong.io', password: 'Oo213Wqw') + record.referral_id = 0 + record.valid? + + expect(record.errors[:referral_id]).to eq(['doesnt_exist']) + end + + it 'return refferal uid' do + expect(user2.referral_uid).to eq user1.uid + end + end + end + + describe '#submitted_profile' do + let!(:user_with_drafted_profile) { create(:user) } + let!(:user_with_submitted_profiles) { create(:user) } + let!(:user_without_profile) { create(:user) } + let!(:drafted_profile) { create(:profile, user: user_with_drafted_profile) } + let!(:submitted_profile) { create(:profile, user: user_with_submitted_profiles, state: 'submitted') } + + it { expect(user_with_drafted_profile.submitted_profile).to eq nil } + it { expect(user_without_profile.submitted_profile).to eq nil } + it { expect(user_with_submitted_profiles.submitted_profile).to eq submitted_profile } + end + + describe '#drafted_profile' do + let!(:user_with_drafted_profile) { create(:user) } + let!(:user_without_profile) { create(:user) } + let!(:drafted_profile) { create(:profile, user: user_with_drafted_profile) } + + it { expect(user_with_drafted_profile.drafted_profile).to eq drafted_profile } + it { expect(user_without_profile.drafted_profile).to eq nil } + end + + describe '#password' do + it { should_not allow_value('Password1').for(:password)} + it { should_not allow_value('Password1123').for(:password)} + it { should_not allow_value('password').for(:password)} + it { should_not allow_value('password1').for(:password)} + it { should_not allow_value('Qq123123').for(:password)} + it { should_not allow_value('QqQq123123').for (:password)} + it { should_not allow_value('X2qL32').for(:password)} + it { should_not allow_value('eoV0qu').for(:password)} + it { should allow_value('Iequ4geiEWQw').for(:password)} + it { should allow_value('Xwqe213PZCXwe').for(:password)} + it { should allow_value('Kal31ewwqXrew').for(:password)} + end + + let(:uploaded_file) { fixture_file_upload('/files/documents_test.jpg', 'image/jpg') } + + context 'User with 2 or more documents' do + it do + user = User.create!(email: 'test@gmail.com', password: 'KeeKi7zoWExzc') + expect(User.count).to eq 1 + document1 = user.documents.create!(upload: uploaded_file, + doc_type: 'Passport', + doc_number: 'MyString', + doc_expire: '01-01-3020') + document2 = user.documents.create!(upload: uploaded_file, + doc_type: 'Passport', + doc_number: 'MyString', + doc_expire: '01-02-3020') + expect(user.reload.documents).to eq([document1, document2]) + end + + after(:all) { User.destroy_all } + end + + describe 'Iso8601TimeFormat' do + let!(:user) { create(:user) } + around(:each) { |example| Time.use_zone('Pacific/Midway') { example.run } } + + it 'parses time in utc and iso8601' do + expect(user.format_iso8601_time(user.created_at)).to \ + eq user.created_at.utc.iso8601 + end + + it 'skips nil' do + expect(user.format_iso8601_time(nil)).to eq nil + end + + it 'parses date to iso8601' do + expect(user.format_iso8601_time(user.created_at.to_date)).to \ + eq user.created_at.to_date.iso8601 + end + end + + describe 'States and labels dependency' do + let(:reqs_list) { {} } + let!(:create_permissions) do + create :permission, role: 'member' + end + + before do + allow(BarongConfig).to receive(:list) { reqs_list } + end + + context 'function testing' do + let!(:user) { create(:user) } + let!(:user_with_no_labels) { create(:user) } + let!(:user_with_labels) do + create(:label, user_id: user.id, key: 'email', value: 'verified', scope: 'private') + create(:label, user_id: user.id, key: 'phone', value: 'verified', scope: 'private') + end + let(:reqs_list) { + { + "activation_requirements" => { + "phone" => "verified", + "documents" => "verified" + }, + "state_triggers" => { + "active_one_of_1_label" => ['email'], + "active_one_of_3_labels" => ['first', 'second', 'third'] + } + } + } + + context 'labels_include?' do + it { expect(user.labels_include?({ 'email' => 'verified' })).to be_truthy } + + it { expect(user.labels_include?({ 'email' => 'pending' })).to be_falsey } + + it { expect(user.labels_include?({ 'email' => 'verified', 'phone' => 'verified' })).to be_truthy } + + it { expect(user.labels_include?({ 'email' => 'verified', 'phone' => 'pending' })).to be_falsey } + end + + context 'private_labels_to_hash' do + it { expect(user.private_labels_to_hash).to eq({ 'email' => 'verified', 'phone' => 'verified' }) } + + it { expect(user_with_no_labels.private_labels_to_hash).to eq({}) } + end + end + + describe 'testing workability with ALL mapping type' do + let!(:user) { create(:user, state: 'pending') } + let(:reqs_list) { + { + "activation_requirements" => { + "phone" => "verified", + "documents" => "verified" + }, + "state_triggers" => { + "active_one_of_1_label" => ['email'], + "active_one_of_3_labels" => ['first', 'second', 'third'] + } + } + } + + context 'changing state on adding label' do + context 'sucessfully' do + it 'changes state when only one label required' do + # email required + expect(user.state).to eq('pending') + + user.labels.create(key: 'email', value: 'verified', scope: 'private') + expect(user.state).to eq('active_one_of_1_label') + end + + it 'rollback from active to pending only in case of deleted one of activation reqs' do + # [phone documents] required + expect(user.state).to eq('pending') + + user.labels.create(key: 'phone', value: 'verified', scope: 'private') + expect(user.state).to eq('pending') + + user.labels.create(key: 'documents', value: 'verified', scope: 'private') + expect(user.state).to eq('active') + + user.labels.create(key: 'random', value: 'verified', scope: 'private') + expect(user.state).to eq('active') + + user.labels.last.destroy + expect(user.state).to eq('active') + + user.labels.find_by_key('phone').destroy + expect(user.state).to eq('pending') + end + + it 'changes state when 2 label required' do + # [phone documents] required + expect(user.state).to eq('pending') + + user.labels.create(key: 'phone', value: 'verified', scope: 'private') + expect(user.state).to eq('pending') + + user.labels.create(key: 'documents', value: 'verified', scope: 'private') + expect(user.state).to eq('active') + end + + it 'changes state when one out of 3 label required' do + # first or second third required + expect(user.state).to eq('pending') + + user.labels.create(key: 'first', value: 'verified', scope: 'private') + expect(user.state).to eq('active_one_of_3_labels') + + user.labels.find_by_key('first').destroy + expect(user.state).to eq('pending') + + user.labels.create(key: 'third', value: 'verified', scope: 'private') + expect(user.state).to eq('active_one_of_3_labels') + + user.labels.find_by_key('third').destroy + expect(user.state).to eq('pending') + + user.labels.create(key: 'second', value: 'verified', scope: 'private') + expect(user.state).to eq('active_one_of_3_labels') + end + end + + context 'not enough labels' do + it 'doesnt change state if provided 1 out of 2 labels only' do + # [phone documents] required + expect(user.state).to eq('pending') + + user.labels.create(key: 'documents', value: 'verified', scope: 'private') + expect(user.state).to eq('pending') + end + end + end + + context 'changing state on deleting' do + context 'ALL policy' do + let!(:give_user_active_state) do + user.labels.create(key: 'phone', value: 'verified', scope: 'private') + user.labels.create(key: 'documents', value: 'verified', scope: 'private') + end + + it 'recalculates from active to when remove all active labels' do + expect(user.state).to eq('active') + Label.find_by(key: 'documents', user: user).destroy + Label.find_by(key: 'phone', user: user).destroy + + user.reload + + expect(user.state).to eq('pending') + end + + it 'recalculates from active_2_labels to active when pending one of active labels on ALL policy' do + expect(user.state).to eq('active') + Label.find_by(key: 'documents', user: user).destroy + user.reload + + expect(user.state).to eq('pending') + end + end + end + end + + describe 'testing workability if config is missing' do + let!(:user) { create(:user, state: 'pending') } + let(:reqs_list) { + { + "activation_requirements" => { + "email" => "verified" + }, + } + } + + context 'not changing state on adding label' do + it 'doesnt changes state if state_triggers config is missing' do + expect(user.state).to eq('pending') + + user.labels.create(key: 'trade', value: 'suspicious', scope: 'private') + expect(user.state).to eq('pending') + end + end + end + + describe 'testing workability with ANY mapping type' do + let!(:user) { create(:user, state: 'pending') } + let(:reqs_list) { + { + "activation_requirements" => { + "email" => "verified" + }, + "state_triggers" => { + "locked" => ['trade', 'withdraw'] + } + } + } + + context 'changing state on adding label' do + context 'sucessfully' do + it 'changes state when only when 1 label out of 2 matches' do + expect(user.state).to eq('pending') + + user.labels.create(key: 'trade', value: 'suspicious', scope: 'private') + expect(user.state).to eq('locked') + end + end + + context 'not enough labels' do + it 'doesnt change state when no label matches' do + expect(user.state).to eq('pending') + user.labels.create(key: 'random', value: 'suspicious', scope: 'private') + + expect(user.state).to eq('pending') + end + end + end + + context 'changing state on deleting' do + context 'ANY policy' do + let!(:give_user_locked_state) do + user.labels.create(key: 'trade', value: 'suspicious', scope: 'private') + user.labels.create(key: 'withdraw', value: 'suspicious', scope: 'private') + end + + it 'doesnt recalculate state if remove one of ANY and another one of ANY still here with ANY policy' do + expect(user.state).to eq('locked') + + user.labels.find_by(key: 'trade').destroy + user.reload + + expect(user.state).to eq('locked') + end + + it 'recalculates if removed all of ANY and there is no more match' do + expect(user.state).to eq('locked') + + user.labels.find_by(key: 'trade').destroy + user.labels.find_by(key: 'withdraw').destroy + + user.reload + expect(user.state).to eq('pending') + end + end + end + end + end + + describe 'event api behaviour' do + let!(:user) { create(:user) } + + context 'user updated' do + before do + allow(EventAPI).to receive(:notify) + end + + it 'receives event with change info' do + user.update(level: 2) + + expect(EventAPI).to have_received(:notify).with('model.user.updated', + hash_including( + changes: { level: 0 }, + record: hash_including(uid: user.uid, level: 2, email: user.email) + )) + end + end + end +end diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb new file mode 100644 index 0000000..09fc43b --- /dev/null +++ b/spec/rails_helper.rb @@ -0,0 +1,74 @@ +# This file is copied to spec/ when you run 'rails generate rspec:install' +require 'spec_helper' + +ENV['RAILS_ENV'] ||= 'test' + +require File.expand_path('../../config/environment', __FILE__) +# Prevent database truncation if the environment is production +abort("The Rails environment is running in production mode!") if Rails.env.production? +require 'rspec/rails' +require 'cancan/matchers' +# Add additional requires below this line. Rails is not loaded until this point! + +# Requires supporting ruby files with custom matchers and macros, etc, in +# spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are +# run as spec files by default. This means that files in spec/support that end +# in _spec.rb will both be required and run as specs, causing the specs to be +# run twice. It is recommended that you do not name files matching this glob to +# end with _spec.rb. You can configure this pattern with the --pattern +# option on the command line or in ~/.rspec, .rspec or `.rspec-local`. +# +# The following line is provided for convenience purposes. It has the downside +# of increasing the boot-up time by auto-requiring all files in the support +# directory. Alternatively, in the individual `*_spec.rb` files, manually +# require only the support files necessary. +# +# Dir[Rails.root.join('spec', 'support', '**', '*.rb')].each { |f| require f } + +# Checks for pending migrations and applies them before tests are run. +# If you are not using ActiveRecord, you can remove these lines. +begin + ActiveRecord::Migration.maintain_test_schema! +rescue ActiveRecord::PendingMigrationError => e + puts e.to_s.strip + exit 1 +end + +Shoulda::Matchers.configure do |config| + config.integrate do |with| + with.test_framework :rspec + with.library :rails + end +end + + +RSpec.configure do |config| + # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures + config.fixture_path = "#{::Rails.root}/spec/fixtures" + + # If you're not using ActiveRecord, or you'd prefer not to run each of your + # examples within a transaction, remove the following line or assign false + # instead of true. + config.use_transactional_fixtures = true + + # RSpec Rails can automatically mix in different behaviours to your tests + # based on their file location, for example enabling you to call `get` and + # `post` in specs under `spec/controllers`. + # + # You can disable this behaviour by removing the line below, and instead + # explicitly tag your specs with their type, e.g.: + # + # RSpec.describe UsersController, :type => :controller do + # # ... + # end + # + # The different available types are documented in the features, such as in + # https://relishapp.com/rspec/rspec-rails/docs + config.infer_spec_type_from_file_location! + + # Filter lines from Rails gems in backtraces. + config.filter_rails_from_backtrace! + # arbitrary gems may also be filtered via: + # config.filter_gems_from_backtrace("gem name") + +end diff --git a/spec/services/encryption_service_spec.rb b/spec/services/encryption_service_spec.rb new file mode 100644 index 0000000..2d781a3 --- /dev/null +++ b/spec/services/encryption_service_spec.rb @@ -0,0 +1,154 @@ +# frozen_string_literal: true + +describe EncryptionService do + context 'current_salt' do + before(:each) do + EncryptionService.instance_variable_set(:@cache, {}) + end + + it { expect(EncryptionService.current_salt).to eq Time.now.strftime('%Y%W') } + + it do + allow(Time).to receive(:now).and_return(1.week.ago) + expect(EncryptionService.current_salt).to eq Time.now.strftime('%Y%W') + end + end + + context 'pack' do + before(:each) do + EncryptionService.instance_variable_set(:@cache, {}) + end + + it { expect(EncryptionService.pack('salt', 'value')).to eq 'salt.value' } + it { expect(EncryptionService.pack('salt', nil)).to eq 'salt.' } + it { expect(EncryptionService.pack('salt', '')).to eq 'salt.' } + end + + context 'unpack' do + before(:each) do + EncryptionService.instance_variable_set(:@cache, {}) + end + + it { expect(EncryptionService.unpack('salt.value')).to eq ['salt', 'value'] } + it { expect(EncryptionService.unpack('salt.value.value')).to eq ['salt', 'value.value'] } + it { expect(EncryptionService.unpack(' salt.value')).to eq ['salt', 'value'] } + it { expect(EncryptionService.unpack(' salt_underscore.value')).to eq ['salt_underscore', 'value'] } + it { expect(EncryptionService.unpack('salt.')).to eq ['salt', ''] } + it { expect { EncryptionService.unpack('salt') }.to raise_error('Invalid encrypted value: salt') } + end + + context 'encrypt' do + before(:each) do + EncryptionService.instance_variable_set(:@cache, {}) + end + + let(:time) { Time.now.strftime('%Y%W') } + it { expect(EncryptionService.encrypt('value')).to match(/#{time}/) } + end + + context 'decrypt' do + before(:each) do + EncryptionService.instance_variable_set(:@cache, {}) + end + + let(:encrypted_key) { EncryptionService.encrypt('value') } + it { expect(EncryptionService.decrypt(encrypted_key)).to eq 'value' } + end + + context 'private methods' do + context 'delete_expired_keys' do + context 'ivalid cases' do + context 'cache as number' do + it 'shouldnt delete expired hash when hash is invalid' do + EncryptionService.instance_variable_set(:@cache, 5) + EncryptionService.send(:delete_expired_keys) + expect(EncryptionService.instance_variable_get(:@cache)).to eq 5 + end + end + + context 'empty hash' do + it 'shouldnt delete expired hash when hash is invalid' do + EncryptionService.instance_variable_set(:@cache, {}) + EncryptionService.send(:delete_expired_keys) + expect(EncryptionService.instance_variable_get(:@cache)).to eq ({}) + end + end + + context 'invalid hash' do + it 'shouldnt delete expired hash when hash is invalid' do + EncryptionService.instance_variable_set(:@cache, {'test': 'value'}) + EncryptionService.send(:delete_expired_keys) + expect(EncryptionService.instance_variable_get(:@cache)).to eq ({'test': 'value'}) + end + end + + context 'hash without expire date' do + it 'shouldnt delete expired hash when hash is invalid' do + EncryptionService.instance_variable_set(:@cache, {'test': {'key': 'generated_key'}}) + EncryptionService.send(:delete_expired_keys) + expect(EncryptionService.instance_variable_get(:@cache)).to eq ({'test': {'key': 'generated_key'}}) + end + end + end + + context 'valid cases' do + context 'should not delete keys' do + it 'shouldnt delete hash keys' do + EncryptionService.instance_variable_set(:@cache, + { + 'test1': {key: 'generated_key', expire_date: Time.now + 3.hours }, + 'test2': {key: 'generated_key', expire_date: Time.now + 2.hours }, + 'test3': {key: 'generated_key', expire_date: Time.now + 1.hours }, + }.with_indifferent_access + ) + EncryptionService.send(:delete_expired_keys) + expect(EncryptionService.instance_variable_get(:@cache).keys).to match_array %w[test1 test2 test3] + end + end + + context 'should delete keys' do + it 'should delete hash keys' do + EncryptionService.instance_variable_set(:@cache, + { + 'test1': {key: 'generated_key', expire_date: Time.now - 3.hours }, + 'test2': {key: 'generated_key', expire_date: Time.now - 2.hours }, + 'test3': {key: 'generated_key', expire_date: Time.now - 1.hours }, + }.with_indifferent_access + ) + EncryptionService.send(:delete_expired_keys) + expect(EncryptionService.instance_variable_get(:@cache)).to eq({}) + end + end + end + end + + context 'get_master_key' do + context 'empty cache' do + it 'should generate key by salt' do + EncryptionService.instance_variable_set(:@cache, {}) + key = EncryptionService.send(:get_master_key, 'salt') + expect(EncryptionService.instance_variable_get(:@cache)['salt']['key']).to eq key + expect(EncryptionService.instance_variable_get(:@cache)['salt']['expire_date'].to_date).to eq 1.week.from_now.to_date + end + end + + context 'non empty hash' do + let(:values) { + { + "salt":{ + "key": "\xD5\xD8e\\N{1}\xEB\x9DP\x033)\x10{X\x91\xA1V\xB7\xCC\xE1L2\xDF\xC5,\f\x1Fh\xC6", + "expire_date": 1.week.from_now + } + } + } + + it 'should get key from hash' do + EncryptionService.instance_variable_set(:@cache, values) + allow(Time).to receive(:now).and_return(1.week.ago) + key = EncryptionService.send(:get_master_key, 'salt') + expect(key).to eq values['salt']['key'] + end + end + end + end +end diff --git a/spec/services/event_mailer_spec.rb b/spec/services/event_mailer_spec.rb new file mode 100644 index 0000000..64690b7 --- /dev/null +++ b/spec/services/event_mailer_spec.rb @@ -0,0 +1,97 @@ +# frozen_string_literal: true + +describe EventMailer do + let(:event_mailer) { EventMailer.new('', '', '')} + let(:event) { + {:record=> + {:user=> + {:uid=>"ID8434CD6E8E", + :email=>"admin@barong.io", + :role=>"admin", + :level=>1, + :otp=>false, + :state=>"active", + :referral_uid=>nil, + :created_at=>"2020-05-26T07:01:04Z", + :updated_at=>"2020-05-26T08:30:54Z"}, + :user_ip=>"::1", + :user_agent=>"PostmanRuntime/7.25.0"}, + :name=>"system.session.create", + :state=>"sdasd" + } + } + + describe "#nested_hash_value" do + it 'return event value' do + expect(event_mailer.send(:safe_dig, event, %i[name])).to eq event[:name] + expect(event_mailer.send(:safe_dig, event, %i[record user state])).to eq event[:record][:user][:state] + expect(event_mailer.send(:safe_dig, event, %i[record user uid])).to eq event[:record][:user][:uid] + expect(event_mailer.send(:safe_dig, event, %i[record user_agent])).to eq event[:record][:user_agent] + expect(event_mailer.send(:safe_dig, event, %i[record user_ip])).to eq event[:record][:user_ip] + expect(event_mailer.send(:safe_dig, event, %i[record name])).to eq nil + end + end + + describe "#skip_event" do + context 'AND expression' do + let(:expression) { { + :and=> + {:"record.user_ip"=>"::1", :"record.user.role"=>"member"} + } + } + + it 'should skip event' do + expect(event_mailer.send(:skip_event, event, expression)).to eq true + end + + it 'shouldnt skip event' do + expression[:and][:"record.user.role"] = 'admin' + expect(event_mailer.send(:skip_event, event, expression)).to eq false + end + end + + context 'OR expression' do + let(:expression) { { + :or=> + {:"record.user_ip"=>"::1", :"record.user.role"=>"member"} + } + } + + it 'shouldnt skip event' do + expect(event_mailer.send(:skip_event, event, expression)).to eq false + end + + it 'should skip event' do + expression[:or][:"record.user_ip"] = 'test' + expect(event_mailer.send(:skip_event, event, expression)).to eq true + end + end + + context 'NOT expression' do + let(:expression) { { + :not=> + {:"record.user_ip"=>"::1"} + } + } + + it 'shoul skip event' do + expect(event_mailer.send(:skip_event, event, expression)).to eq true + end + + it 'shouldnt skip event' do + expression[:not][:"record.user_ip"] = 'test' + expect(event_mailer.send(:skip_event, event, expression)).to eq false + end + + it 'should skip event' do + expression[:not][:'record.user.email'] = 'admin@barong.io' + expect(event_mailer.send(:skip_event, event, expression)).to eq true + end + + it 'shouldnt skip event' do + expression[:not][:'record.user.email'] = 'admin1@barong.io' + expect(event_mailer.send(:skip_event, event, expression)).to eq false + end + end + end +end diff --git a/spec/services/vault_totp_spec.rb b/spec/services/vault_totp_spec.rb new file mode 100644 index 0000000..1ae477f --- /dev/null +++ b/spec/services/vault_totp_spec.rb @@ -0,0 +1,148 @@ +# frozen_string_literal: true + +describe TOTPService do + let(:uid) { 'uid' } + let(:email) { 'email' } + let(:period) { '60' } + + describe '.with_human_error' do + it 'renders human error when vault is down' do + expect do + described_class.with_human_error do + raise Vault::VaultError, 'Message connection refused message' + end + end.to raise_error(described_class::Error, '2FA server is under maintenance') + end + + it 'renders human error when code was used twice' do + expect do + described_class.with_human_error do + raise Vault::VaultError, 'Message code already used message' + end + end.to raise_error(described_class::Error, + 'This code was already used. Wait until the next time period') + end + + it 'renders error when called without block' do + expect do + described_class.with_human_error + end.to raise_error(ArgumentError, 'Block is required') + end + end + + describe '.server_available?' do + subject { described_class.server_available? } + + context 'when server is available' do + before { expect(described_class).to receive(:read_data) { ['data'] } } + it { is_expected.to eq true } + end + + context 'when server is not available' do + before { expect(described_class).to receive(:read_data) { [] } } + it { is_expected.to eq false } + end + + context 'when exception raised' do + before do + expect(described_class).to receive(:read_data).and_raise(StandardError, 'vault error') + end + + it { is_expected.to eq false } + end + end + + describe '.otp_secret' do + let(:otp_url) { 'otpauth://totp/Alvand:admin@barong.io?secret=code' } + let(:otp) { double(data: { url: otp_url }) } + it { expect(described_class.otp_secret(otp)).to eq 'code' } + end + + describe '.safe_create' do + it 'does not create secret when it exists' do + expect(described_class).to receive(:exist?).with(uid) { true } + expect(described_class).to_not receive(:create) + described_class.safe_create(uid, email, period) + end + + it 'creates secret when it does not exist' do + expect(described_class).to receive(:exist?).with(uid) { false } + expect(described_class).to receive(:create).with(uid, email, period) + described_class.safe_create(uid, email, period) + end + end + + describe '.create' do + let(:create_params) do + { + generate: true, + issuer: 'Alvand', + account_name: 'email', + period: period, + qr_size: 300 + } + end + + it 'creates secret' do + expect(described_class).to receive(:write_data) + .with('totp/keys/alvand_uid', create_params) + described_class.create(uid, email, period) + end + end + + describe '.exist?' do + it 'creates secret' do + expect(described_class).to receive(:read_data) + .with('totp/keys/alvand_uid') { ['data'] } + described_class.exist?(uid) + end + end + + describe '.validate?' do + before do + allow(described_class).to receive(:write_data) { double(data: data) } + allow(described_class).to receive(:read_data) { double(data: data) } + end + let(:data) { { valid: true } } + + subject { described_class.validate?(uid, 'code') } + + context 'when not exist' do + before { expect(described_class).to receive(:exist?) { false } } + it { is_expected.to eq false } + end + + context 'when valid' do + before { expect(described_class).to receive(:exist?) { true } } + it { is_expected.to eq true } + end + + context 'when invalid' do + before { expect(described_class).to receive(:exist?) { true } } + let(:data) { { valid: false } } + it { is_expected.to eq false } + end + end + + describe '.delete' do + before { expect(described_class).to receive(:delete_data) } + it { expect(described_class.delete(uid)) } + end + + describe 'private methods' do + let(:fake_vault) { double(read: 'read', write: 'writed', delete: 'deleted') } + before { stub_const('Vault', double(logical: fake_vault)) } + + it 'read_data reads from vault storage' do + expect(described_class.send(:read_data, 'key')).to eq 'read' + end + + it 'write_data writes to vault storage' do + expect(described_class.send(:write_data, 'key', {})).to eq 'writed' + end + + it 'delete_data deletes from vault storage' do + expect(described_class.send(:delete_data, 'key')).to eq 'deleted' + end + end +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb new file mode 100644 index 0000000..031a1d6 --- /dev/null +++ b/spec/spec_helper.rb @@ -0,0 +1,161 @@ +# frozen_string_literal: true + +require 'rails_helper' + +require_dependency 'barong/jwt' + +# This file was generated by the `rails generate rspec:install` command. Conventionally, all +# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`. +# The generated `.rspec` file contains `--require spec_helper` which will cause +# this file to always be loaded, without a need to explicitly require it in any +# files. +# +# Given that it is always loaded, you are encouraged to keep this file as +# light-weight as possible. Requiring heavyweight dependencies from this file +# will add to the boot time of your test suite on EVERY test run, even for an +# individual file that may not need all of that loaded. Instead, consider making +# a separate helper file that requires the additional dependencies and performs +# the additional setup, and require it from the spec files that actually need +# it. +# +# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration + +# Requires supporting ruby files with custom matchers and macros, etc, in +# spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are +# run as spec files by default. This means that files in spec/support that end +# in _spec.rb will both be required and run as specs, causing the specs to be +# run twice. It is recommended that you do not name files matching this glob to +# end with _spec.rb. You can configure this pattern with the --pattern +# option on the command line or in ~/.rspec, .rspec or `.rspec-local`. +# +# The following line is provided for convenience purposes. It has the downside +# of increasing the boot-up time by auto-requiring all files in the support +# directory. Alternatively, in the individual `*_spec.rb` files, manually +# require only the support files necessary. +# +Dir[Rails.root.join('spec/support/**/*.rb')].sort.each { |f| require f } +RSpec.configure do |config| + # If you're not using ActiveRecord, or you'd prefer not to run each of your + # examples within a transaction, remove the following line or assign false + # instead of true. + config.use_transactional_fixtures = false + + # See https://github.com/DatabaseCleaner/database_cleaner#rspec-with-capybara-example + config.before(:suite) do + FileUtils.rm_rf(File.join(__dir__, 'tmp', 'cache')) + DatabaseCleaner.clean_with(:truncation) + end + + config.before(:each) do + DatabaseCleaner.strategy = :transaction + end + + config.before(:each, clean_database_with_truncation: true) do + FileUtils.rm_rf(File.join(__dir__, 'tmp', 'cache')) + DatabaseCleaner.clean_with :truncation + end + + config.append_after(:each) do + DatabaseCleaner.clean + end + + # rspec-expectations config goes here. You can use an alternate + # assertion/expectation library such as wrong or the stdlib/minitest + # assertions if you prefer. + config.before(:each) do + DatabaseCleaner.start + allow(Ability).to receive(:abilities).and_return( + 'roles' => %w[admin manager accountant superadmin technical compliance support], + 'admin_permissions' => { + 'superadmin' => { 'manage' => %w[User Activity Ability APIKey Profile Permission Label Restriction Level] }, + 'admin' => { 'read' => %w[Level APIKey Permission], 'manage' => %w[User Activity Profile Label] }, + 'compliance' => { 'read' => %w[User Activity Level], 'manage' => %w[Label], 'update' => %w[Profile] }, + 'support' => { 'read' => %w[User Activity APIKey Profile Label Level] } + } + ) + allow_any_instance_of(Barong::Authorize).to receive(:validate_csrf!).and_return(true) + allow(UserStorageTitles).to receive(:list).and_return(%w[personal company]) + %w[email phone identity document].each_with_index do |key, index| + FactoryBot.create(:level, id: index + 1, key: key, value: 'verified') + end + end + + config.after(:each) do + DatabaseCleaner.clean + end + + config.expect_with :rspec do |expectations| + # This option will default to `true` in RSpec 4. It makes the `description` + # and `failure_message` of custom matchers include text for helper methods + # defined using `chain`, e.g.: + # be_bigger_than(2).and_smaller_than(4).description + # # => "be bigger than 2 and smaller than 4" + # ...rather than: + # # => "be bigger than 2" + expectations.include_chain_clauses_in_custom_matcher_descriptions = true + end + + # rspec-mocks config goes here. You can use an alternate test double + # library (such as bogus or mocha) by changing the `mock_with` option here. + config.mock_with :rspec do |mocks| + # Prevents you from mocking or stubbing a method that does not exist on + # a real object. This is generally recommended, and will default to + # `true` in RSpec 4. + mocks.verify_partial_doubles = true + end + + # This option will default to `:apply_to_host_groups` in RSpec 4 (and will + # have no way to turn it off -- the option exists only for backwards + # compatibility in RSpec 3). It causes shared context metadata to be + # inherited by the metadata hash of host groups and examples, rather than + # triggering implicit auto-inclusion in groups with matching metadata. + config.shared_context_metadata_behavior = :apply_to_host_groups + + # Run specs in random order to surface order dependencies. If you find an + # order dependency and want to debug it, you can fix the order by providing + # the seed, which is printed after each run. + # --seed 1234 + config.order = :random + + # The settings below are suggested to provide a good initial experience + # with RSpec, but feel free to customize to your heart's content. + # # This allows you to limit a spec run to individual examples or groups + # # you care about by tagging them with `:focus` metadata. When nothing + # # is tagged with `:focus`, all examples get run. RSpec also provides + # # aliases for `it`, `describe`, and `context` that include `:focus` + # # metadata: `fit`, `fdescribe` and `fcontext`, respectively. + # config.filter_run_when_matching :focus + # + # # Allows RSpec to persist some state between runs in order to support + # # the `--only-failures` and `--next-failure` CLI options. We recommend + # # you configure your source control system to ignore this file. + # config.example_status_persistence_file_path = "spec/examples.txt" + # + # # Limits the available syntax to the non-monkey patched syntax that is + # # recommended. For more details, see: + # # - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/ + # # - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/ + # # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode + # config.disable_monkey_patching! + # + # # Many RSpec users commonly either run the entire suite or an individual + # # file, and it's useful to allow more verbose output when running an + # # individual spec file. + # if config.files_to_run.one? + # # Use the documentation formatter for detailed output, + # # unless a formatter has already been configured + # # (e.g. via a command-line flag). + # config.default_formatter = "doc" + # end + # + # # Print the 10 slowest examples and example groups at the + # # end of the spec run, to help surface which specs are running + # # particularly slow. + # config.profile_examples = 10 + # + # # Seed global randomization in this process using the `--seed` CLI option. + # # Setting this allows you to use `--seed` to deterministically reproduce + # # test failures related to randomization by passing the same `--seed` value + # # as the one that triggered the failure. + # Kernel.srand config.seed +end diff --git a/spec/support/api_helpers.rb b/spec/support/api_helpers.rb new file mode 100644 index 0000000..4ee204c --- /dev/null +++ b/spec/support/api_helpers.rb @@ -0,0 +1,105 @@ +# frozen_string_literal: true + +module APIHelpers + extend Memoist + + def json_body + JSON.parse(response.body, symbolize_names: true) + end + + def expect_status_to_eq(status) + expect_status.to eq status + end + + def expect_status + expect(response.status) + end + + def expect_body + expect(json_body) + end + + def post_json(destination, body, headers = {}) + post destination, + params: build_body(body), + headers: headers.reverse_merge('Content-Type' => 'application/json') + end + + def delete_json(destination, body, headers = {}) + delete destination, + params: build_body(body), + headers: headers.reverse_merge('Content-Type' => 'application/json') + end + + def put_json(destination, body, headers = {}) + put destination, + params: build_body(body), + headers: headers.reverse_merge('Content-Type' => 'application/json') + end + + def build_body(body) + body.is_a?(String) ? body : body.to_json + end + + def create_label_with_level(user, level, scope: 'private') + create(:label, user: user, + key: level.key, + value: level.value, + scope: scope) + end + + def set_level(user, level) + raise "level doesn't exist" if Level.last.id < level + levels = Level.where(id: 1..level) + levels.each do |lvl| + Label.find_or_create_by(user: user, key: lvl.key, value: lvl.value, scope: 'private') + end + end + + def applogic_signed_jwt(payload) + multisig_jwt(payload, management_api_v2_keychain, :james, management_api_v2_algorithms) + end + + def multisig_jwt(payload, keychain, signers, algorithms) + JWT::Multisig.generate_jwt(payload, keychain.slice(*signers), algorithms) + end + + def multisig_jwt_management_api_v2(payload, *signers) + multisig_jwt(payload, management_api_v2_keychain, signers, management_api_v2_algorithms) + end + + def management_api_v2_keychain + require 'openssl' + { james: OpenSSL::PKey::RSA.generate(2048), + john: OpenSSL::PKey::RSA.generate(2048), + david: OpenSSL::PKey::RSA.generate(2048), + robert: OpenSSL::PKey::RSA.generate(2048), + alex: OpenSSL::PKey::RSA.generate(2048), + jeff: OpenSSL::PKey::RSA.generate(2048) } + end + memoize :management_api_v2_keychain + + def management_api_v2_algorithms + management_api_v2_keychain.each_with_object({}) { |(k, _v), memo| memo[k] = 'RS256' } + end + memoize :management_api_v2_algorithms + + def management_api_v2_security_configuration + API::V2::Management::JWTAuthenticationMiddleware.security_configuration + end + + def defaults_for_management_api_v2_security_configuration! + config = { jwt: {} } + config[:keychain] = management_api_v2_keychain.each_with_object({}) do |(signer, key), memo| + memo[signer] = { algorithm: management_api_v2_algorithms.fetch(signer), value: key.public_key } + end + API::V2::Management::JWTAuthenticationMiddleware.security_configuration = config + end + + def codec + @_codec ||= Barong::JWT.new(key: Barong::App.config.keystore.private_key) + end + +end + +RSpec.configure { |config| config.include APIHelpers } diff --git a/spec/support/bearer_context.rb b/spec/support/bearer_context.rb new file mode 100644 index 0000000..c45d11a --- /dev/null +++ b/spec/support/bearer_context.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +shared_context 'bearer authentication' do + + let(:test_user) { create(:user) } + + let(:jwt_token) do + pkey = Rails.application.config.x.keystore.private_key + codec = Barong::JWT.new(key: pkey) + codec.encode(test_user.as_payload) + end + + let(:auth_header) { { 'Authorization' => "Bearer #{jwt_token}" } } +end diff --git a/spec/support/factory_bot.rb b/spec/support/factory_bot.rb new file mode 100644 index 0000000..2e7665c --- /dev/null +++ b/spec/support/factory_bot.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +RSpec.configure do |config| + config.include FactoryBot::Syntax::Methods +end diff --git a/spec/support/geoip_context.rb b/spec/support/geoip_context.rb new file mode 100644 index 0000000..665797d --- /dev/null +++ b/spec/support/geoip_context.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +shared_context 'geoip mock' do + let(:london_ip) { '196.245.163.202' } + let(:tokyo_ip) { '140.227.60.114' } + + before do + class DummyReader + def get(ip) + case ip + when '196.245.163.202' + { + 'country' => { 'names' => { 'en' => 'United Kingdom' } }, + 'continent' => { 'names' => { 'en' => 'Europe' } } + } + when '140.227.60.114' + { + 'country' => { 'names' => { 'en' => 'Japan' } }, + 'continent' => { 'names' => { 'en' => 'Asia' } } + } + else + {} + end + end + end + + reader = DummyReader.new + + allow(Barong::GeoIP).to receive(:reader).and_return(reader) + end +end diff --git a/spec/support/helper.rb b/spec/support/helper.rb new file mode 100644 index 0000000..3766146 --- /dev/null +++ b/spec/support/helper.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +module Helper + def to_readable(field) + field.to_s.humanize.downcase + end +end + + +RSpec.configure { |config| config.include Helper } diff --git a/spec/workers/address_worker_spec.rb b/spec/workers/address_worker_spec.rb new file mode 100644 index 0000000..34ef021 --- /dev/null +++ b/spec/workers/address_worker_spec.rb @@ -0,0 +1,93 @@ +# frozen_string_literal: true + +describe 'KYC::Kycaid::AddressWorker' do + before { allow(Barong::App.config).to receive_messages(kyc_provider: 'kycaid') } + + include_context 'bearer authentication' + let!(:create_member_permission) do + create :permission, + role: 'member' + end + let(:user) { create(:user) } + let!(:profile) { create(:profile, country: 'UA', state: 'submitted', applicant_id: '84e51f8a0677a646fd185fc741717ad9a8b3', user_id: user.id) } + let!(:document) { create(:document, identificator: '84e51f8a06', user_id: user.id, doc_type: 'Address') } + let!(:label) { create(:label, key: 'address', user_id: user.id, value: 'pending', scope: 'private') } + let(:address_params) { { "identificator": '84e51f8a06', 'user_id': document.user.id, "country": 'UA', "city": 'Kiev', "postcode": '101010' } } + + describe 'successful verification' do + let(:successful_docs_response) { OpenStruct.new(address_id: '84e51f8a0677a646fd185fc741717ad9a8b3') } + let(:successful_verification_response) { OpenStruct.new(verification_id: '84e51f8a0677a646fd185fc741717ad9a8b3') } + + before { allow(KYCAID::Address).to receive(:create).and_return(successful_docs_response) } + before { allow(KYCAID::Verification).to receive(:create).and_return(successful_verification_response) } + + before { allow_any_instance_of(KYC::Kycaid::AddressWorker).to receive(:address_params).and_return({}) } + + context 'perform' do + before { allow(KYCAID::Address).to receive(:create).and_return(successful_docs_response) } + before { allow(KYCAID::Verification).to receive(:create).and_return(successful_verification_response) } + + it 'creates a document record' do + expect(document.metadata).to eq(nil) + expect(KYCAID::Address).to receive(:create) + + KYC::Kycaid::AddressWorker.new.perform(address_params) + expect(document.reload.metadata).not_to eq(nil) + end + + it 'creates a verification request' do + expect(document.metadata).to eq(nil) + expect(KYCAID::Address).to receive(:create) + expect(KYCAID::Verification).to receive(:create) + + KYC::Kycaid::AddressWorker.new.perform(address_params) + expect(document.reload.metadata).not_to eq(nil) + end + end + end + + describe 'failed verification' do + before { allow_any_instance_of(KYC::Kycaid::AddressWorker).to receive(:address_params).and_return({}) } + let(:unauthorized_response) { OpenStruct.new(error: { "type": 'unauthorized' }) } + let(:unsuccessful_response) do + OpenStruct.new(type: 'validation', errors: [{ "parameter": 'front_file', "message": 'Image is blured' }]) + end + context 'unathorized' do + before { allow(KYCAID::Address).to receive(:create).and_return(unauthorized_response) } + + it 'does not create a address because of error' do + expect(document.metadata).to eq(nil) + expect(KYCAID::Address).to receive(:create) + expect(KYCAID::Verification).not_to receive(:create) + + KYC::Kycaid::AddressWorker.new.perform(address_params) + expect(document.reload.metadata).to eq(nil) + end + end + + context 'validation failed' do + before { allow(KYCAID::Address).to receive(:create).and_return(unsuccessful_response) } + + it 'does not create a address' do + expect(document.metadata).to eq(nil) + expect(KYCAID::Address).to receive(:create) + + KYC::Kycaid::AddressWorker.new.perform(address_params) + expect(document.metadata).to eq(nil) + end + + it 'gets a rejected label' do + expect(document.metadata).to eq(nil) + expect(document.user.labels.count).to eq(2) + expect(document.user.labels.find_by(key: :address).value).to eq('pending') + + expect(KYCAID::Address).to receive(:create) + + KYC::Kycaid::AddressWorker.new.perform(address_params) + expect(document.metadata).to eq(nil) + expect(document.user.labels.count).to eq(2) + expect(document.user.labels.find_by(key: :address).value).to eq('rejected') + end + end + end +end diff --git a/spec/workers/applicant_worker_spec.rb b/spec/workers/applicant_worker_spec.rb new file mode 100644 index 0000000..32b1f41 --- /dev/null +++ b/spec/workers/applicant_worker_spec.rb @@ -0,0 +1,90 @@ +# frozen_string_literal: true + +describe 'KYC::ApplicantWorker' do + include_context 'bearer authentication' + before { allow(Barong::App.config).to receive_messages(kyc_provider: 'kycaid') } + + let!(:create_member_permission) do + create :permission, + role: 'member' + end + let(:profile) { create(:profile, country: "UA", state: 'submitted') } + + describe 'successful verification' do + let(:successful_response) { OpenStruct.new(applicant_id: "84e51f8a0677a646fd185fc741717ad9a8b3") } + let(:params) {{ type: 'PERSON', first_name: profile.first_name, last_name: profile.last_name, dob: profile.dob, + residence_country: profile.country, email: profile.user.email, phone: profile.user.phones&.last&.number }} + + before { allow(KYCAID::Applicant).to receive(:create).with(params).and_return(successful_response)} + + context 'perform' do + it 'creates an applicant' do + expect(profile.applicant_id).to eq(nil) + expect(KYCAID::Applicant).to receive(:create) + + KYC::Kycaid::ApplicantWorker.new.perform(profile.id) + expect(profile.reload.applicant_id).not_to eq(nil) + end + + it 'changes a label to verified' do + expect(profile.applicant_id).to eq(nil) + expect(profile.user.labels.count).to eq(1) + expect(profile.user.labels.first.key).to eq('profile') + expect(profile.user.labels.first.value).to eq('submitted') + + expect(KYCAID::Applicant).to receive(:create) + KYC::Kycaid::ApplicantWorker.new.perform(profile.id) + + expect(profile.reload.applicant_id).not_to eq(nil) + expect(profile.user.labels.count).to eq(1) + expect(profile.user.labels.first.key).to eq('profile') + expect(profile.user.labels.first.value).to eq('verified') + end + end + end + + describe 'failed verification' do + let(:unauthorized_response) { OpenStruct.new(error: { "type": "unauthorized"}) } + let(:unsuccessful_response) { + OpenStruct.new(type: "validation", errors: [{"parameter": "residence_country", "message": "Country of residence is not valid"}]) + } + + let(:params) {{ type: 'PERSON', first_name: profile.first_name, last_name: profile.last_name, dob: profile.dob, + residence_country: profile.country, email: profile.user.email, phone: profile.user.phones&.last&.number }} + + context 'unathorized' do + before { allow(KYCAID::Applicant).to receive(:create).with(params).and_return(unauthorized_response)} + + it 'does not create an applicant' do + expect(profile.applicant_id).to eq(nil) + expect(KYCAID::Applicant).to receive(:create) + + KYC::Kycaid::ApplicantWorker.new.perform(profile.id) + expect(profile.reload.applicant_id).to eq(nil) + end + end + + context 'validation failed' do + before { allow(KYCAID::Applicant).to receive(:create).with(params).and_return(unsuccessful_response)} + + it 'does not create an applicant' do + expect(profile.applicant_id).to eq(nil) + expect(KYCAID::Applicant).to receive(:create) + + KYC::Kycaid::ApplicantWorker.new.perform(profile.id) + expect(profile.reload.applicant_id).to eq(nil) + end + + it 'gets a rejected label' do + expect(profile.applicant_id).to eq(nil) + expect(KYCAID::Applicant).to receive(:create) + + KYC::Kycaid::ApplicantWorker.new.perform(profile.id) + expect(profile.reload.applicant_id).to eq(nil) + expect(profile.user.labels.count).to eq(1) + expect(profile.user.labels.first.key).to eq('profile') + expect(profile.user.labels.first.value).to eq('rejected') + end + end + end +end diff --git a/spec/workers/document_worker_spec.rb b/spec/workers/document_worker_spec.rb new file mode 100644 index 0000000..c0dda6e --- /dev/null +++ b/spec/workers/document_worker_spec.rb @@ -0,0 +1,93 @@ +# frozen_string_literal: true + +describe 'KYC::Kycaid::DocumentWorker' do + before { allow(Barong::App.config).to receive_messages(kyc_provider: 'kycaid') } + + include_context 'bearer authentication' + let!(:create_member_permission) do + create :permission, + role: 'member' + end + let(:user) { create(:user) } + let!(:profile) { create(:profile, country: 'UA', state: 'submitted', applicant_id: '84e51f8a0677a646fd185fc741717ad9a8b3', user_id: user.id) } + let!(:document) { create(:document, identificator: '84e51f8a06', doc_type: 'Passport', doc_category: 'front_side', user_id: user.id) } + let!(:document_second) { create(:document, identificator: '84e51f8a06', doc_type: 'Passport', doc_category: 'selfie', user_id: user.id) } + + describe 'successful verification' do + let(:successful_docs_response) { OpenStruct.new(document_id: '84e51f8a0677a646fd185fc741717ad9a8b3') } + let(:successful_verification_response) { OpenStruct.new(verification_id: '84e51f8a0677a646fd185fc741717ad9a8b3') } + + before { allow(KYCAID::Document).to receive(:create).and_return(successful_docs_response) } + before { allow(KYCAID::Verification).to receive(:create).and_return(successful_verification_response) } + + before { allow_any_instance_of(KYC::Kycaid::DocumentWorker).to receive(:document_params).and_return({}) } + before { allow_any_instance_of(KYC::Kycaid::DocumentWorker).to receive(:selfie_image_params).and_return({}) } + + context 'perform' do + it 'creates a document record' do + expect(document.metadata).to eq(nil) + expect(KYCAID::Document).to receive(:create) + + KYC::Kycaid::DocumentWorker.new.perform(document.user.id, '84e51f8a06') + expect(document.reload.metadata).not_to eq(nil) + end + + it 'creates a verification request' do + expect(document.metadata).to eq(nil) + expect(KYCAID::Document).to receive(:create) + expect(KYCAID::Verification).to receive(:create) + + KYC::Kycaid::DocumentWorker.new.perform(document.user.id, '84e51f8a06') + expect(document.reload.metadata).not_to eq(nil) + end + end + end + + describe 'failed verification' do + before { allow_any_instance_of(KYC::Kycaid::DocumentWorker).to receive(:document_params).and_return({}) } + before { allow_any_instance_of(KYC::Kycaid::DocumentWorker).to receive(:selfie_image_params).and_return({}) } + + let(:unauthorized_response) { OpenStruct.new(error: { "type": 'unauthorized' }) } + let(:unsuccessful_response) do + OpenStruct.new(type: 'validation', errors: [{ "parameter": 'front_file', "message": 'Image is blured' }]) + end + + context 'unathorized' do + before { allow(KYCAID::Document).to receive(:create).and_return(unauthorized_response) } + + it 'does not create a document because of error' do + expect(document.metadata).to eq(nil) + expect(KYCAID::Document).to receive(:create) + expect(KYCAID::Verification).not_to receive(:create) + + KYC::Kycaid::DocumentWorker.new.perform(document.user.id, '84e51f8a06') + expect(document.reload.metadata).to eq(nil) + end + end + + context 'validation failed' do + before { allow(KYCAID::Document).to receive(:create).and_return(unsuccessful_response) } + + it 'does not create a document' do + expect(document.metadata).to eq(nil) + expect(KYCAID::Document).to receive(:create) + + KYC::Kycaid::DocumentWorker.new.perform(document.user.id, '84e51f8a06') + expect(document.metadata).to eq(nil) + end + + it 'gets a rejected label' do + expect(document.metadata).to eq(nil) + expect(document.user.labels.count).to eq(2) + expect(document.user.labels.find_by(key: :document).value).to eq('pending') + + expect(KYCAID::Document).to receive(:create) + + KYC::Kycaid::DocumentWorker.new.perform(document.user.id, '84e51f8a06') + expect(document.metadata).to eq(nil) + expect(document.user.labels.count).to eq(2) + expect(document.user.labels.find_by(key: :document).value).to eq('rejected') + end + end + end +end diff --git a/spec/workers/verification_worker_spec.rb b/spec/workers/verification_worker_spec.rb new file mode 100644 index 0000000..9ffa5a6 --- /dev/null +++ b/spec/workers/verification_worker_spec.rb @@ -0,0 +1,87 @@ +# frozen_string_literal: true + +describe 'KYC::Kycaid::VerificationWorker' do + before { allow(Barong::App.config).to receive_messages(kyc_provider: 'kycaid') } + + include_context 'bearer authentication' + let!(:create_member_permission) do + create :permission, + role: 'member' + end + let(:user) { create(:user) } + let!(:profile) { create(:profile, country: 'UA', state: 'submitted', applicant_id: '84e51f8a0677a646fd185fc741717ad9a8b3', user_id: user.id) } + let!(:document) { create(:document, identificator: '84e51f8a06', doc_type: 'Passport', doc_category: 'front_side', user_id: user.id) } + let!(:document_second) { create(:document, identificator: '84e51f8a06', doc_type: 'Passport', doc_category: 'selfie', user_id: user.id) } + + describe 'successful verifications' do + let(:successful_verification_response) { OpenStruct.new(status: 'completed', verifications: { document: { verified: true } }) } + before { allow(KYCAID::Verification).to receive(:fetch).and_return(successful_verification_response) } + + context 'perform' do + it 'fetches verification data' do + expect(user.labels.count).to eq(2) + expect(user.labels.find_by(key: :document, scope: :private).value).to eq('pending') + + expect(KYCAID::Verification).to receive(:fetch) + + KYC::Kycaid::VerificationsWorker.new.perform({ applicant_id: profile.applicant_id, verification_id: '84e51f8a' }) + end + + it 'changes label accordingly to verification' do + expect(user.labels.count).to eq(2) + expect(user.labels.find_by(key: :document, scope: :private).value).to eq('pending') + + expect(KYCAID::Verification).to receive(:fetch) + + KYC::Kycaid::VerificationsWorker.new.perform({ applicant_id: profile.applicant_id, verification_id: '84e51f8a' }) + + expect(user.labels.count).to eq(2) + expect(user.labels.reload.find_by(key: :document, scope: :private).value).to eq('verified') + end + end + end + + describe 'failed verification' do + let(:unsuccessful_response) { OpenStruct.new(status: 'completed', verifications: { document: { verified: false } }) } + before { allow(KYCAID::Verification).to receive(:fetch).and_return(unsuccessful_response) } + + let(:unauthorized_response) { OpenStruct.new(error: { "type": 'unauthorized' }) } + + context 'unathorized' do + before { allow(KYCAID::Verification).to receive(:fetch).and_return(unauthorized_response) } + + it 'does not create a document because of error' do + expect(user.labels.count).to eq(2) + expect(user.labels.find_by(key: :document, scope: :private).value).to eq('pending') + + expect(KYCAID::Verification).to receive(:fetch) + + KYC::Kycaid::VerificationsWorker.new.perform({ applicant_id: profile.applicant_id, verification_id: '84e51f8a' }) + expect(user.labels.reload.find_by(key: :document, scope: :private).value).to eq('pending') + end + end + + context 'verification declined' do + it 'fetches verification data' do + expect(user.labels.count).to eq(2) + expect(user.labels.find_by(key: :document, scope: :private).value).to eq('pending') + + expect(KYCAID::Verification).to receive(:fetch) + + KYC::Kycaid::VerificationsWorker.new.perform({ applicant_id: profile.applicant_id, verification_id: '84e51f8a' }) + end + + it 'changes label accordingly to verification' do + expect(user.labels.count).to eq(2) + expect(user.labels.find_by(key: :document, scope: :private).value).to eq('pending') + + expect(KYCAID::Verification).to receive(:fetch) + + KYC::Kycaid::VerificationsWorker.new.perform({ applicant_id: profile.applicant_id, verification_id: '84e51f8a' }) + + expect(user.labels.count).to eq(2) + expect(user.labels.reload.find_by(key: :document, scope: :private).value).to eq('rejected') + end + end + end +end diff --git a/storage/.keep b/storage/.keep new file mode 100644 index 0000000..e69de29 diff --git a/test.rb b/test.rb new file mode 100644 index 0000000..95f207e --- /dev/null +++ b/test.rb @@ -0,0 +1,24 @@ +module Mo + MAPPING = { a: 'a', b: 'b' } + @mapping = 'ayza2' + class << self + @mapping_singleton = 'ayza' + def test + a = :a + p MAPPING.dig(a) + p @mapping + end + end + + def test2 + p MAPPING + end +end + + +Mo.test + +# Mo::test2 + +p Mo.singleton_class.instance_variables +p Mo.instance_variables diff --git a/test/application_system_test_case.rb b/test/application_system_test_case.rb new file mode 100644 index 0000000..d19212a --- /dev/null +++ b/test/application_system_test_case.rb @@ -0,0 +1,5 @@ +require "test_helper" + +class ApplicationSystemTestCase < ActionDispatch::SystemTestCase + driven_by :selenium, using: :chrome, screen_size: [1400, 1400] +end diff --git a/test/controllers/.keep b/test/controllers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/test/fixtures/.keep b/test/fixtures/.keep new file mode 100644 index 0000000..e69de29 diff --git a/test/fixtures/files/.keep b/test/fixtures/files/.keep new file mode 100644 index 0000000..e69de29 diff --git a/test/helpers/.keep b/test/helpers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/test/integration/.keep b/test/integration/.keep new file mode 100644 index 0000000..e69de29 diff --git a/test/mailers/.keep b/test/mailers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/test/models/.keep b/test/models/.keep new file mode 100644 index 0000000..e69de29 diff --git a/test/system/.keep b/test/system/.keep new file mode 100644 index 0000000..e69de29 diff --git a/test/test_helper.rb b/test/test_helper.rb new file mode 100644 index 0000000..3ab84e3 --- /dev/null +++ b/test/test_helper.rb @@ -0,0 +1,10 @@ +ENV['RAILS_ENV'] ||= 'test' +require_relative '../config/environment' +require 'rails/test_help' + +class ActiveSupport::TestCase + # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order. + fixtures :all + + # Add more helper methods to be used by all tests here... +end diff --git a/tmp/.keep b/tmp/.keep new file mode 100644 index 0000000..e69de29 diff --git a/vendor/.keep b/vendor/.keep new file mode 100644 index 0000000..e69de29

|t%mKW-A3*1$h}VOcEdXi?=);rt%DHb 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�e^W1+>>(JFm4y5N+Tu;f8gGpW@IfUdEl0!)@ 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 z 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