feat: 🎸 Add sqlite handler and parser (#2933)

* feat: 🎸 Add sqlite handler and parser

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17410
This commit is contained in:
Zhihe Li committed 2025-09-03 11:41:41 -04:00
1 parent 8abed1a809
commit e0982da744
33 files changed
+1692 -111

No files matched your search

+14
View File
@@ -7,6 +7,7 @@ import Controller from '@ember/controller';
import { service } from '@ember/service';
import { getOwner } from '@ember/application';
import { action } from '@ember/object';
import { loading } from 'ember-loading';
import { defaultValidator } from 'ember-a11y-refocus';
import { paramValueFinder } from 'admin/utils/param-value-finder';
@@ -33,6 +34,7 @@ export default class ApplicationController extends Controller {
@service featureEdition;
@service flashMessages;
@service router;
@service sqlite;
/**
* Returns available themes.
@@ -113,6 +115,18 @@ export default class ApplicationController extends Controller {
}
}
@action
@loading
async downloadDatabase() {
await this.sqlite.downloadDatabase();
}
@action
async clearDatabase() {
await this.sqlite.clearDatabase();
this.router.refresh();
}
/**
* Add custom route change validation to prevent refocus when
* user is attempting to search, filter, or sort.
+2 -2
View File
@@ -22,7 +22,7 @@ export default class ApplicationRoute extends Route {
@service features;
@service featureEdition;
@service indexedDb;
@service sqliteDb;
@service sqlite;
@service('browser/window') window;
// =attributes
@@ -74,7 +74,7 @@ export default class ApplicationRoute extends Route {
const userId = this.session.data?.authenticated?.user_id;
const hostUrl = this.window.location.host;
if (userId && hostUrl) {
await this.sqliteDb.setup(formatDbName(userId, hostUrl));
await this.sqlite.setup(formatDbName(userId, hostUrl));
await this.indexedDb.setup(formatDbName(userId, hostUrl));
}
}
+2 -2
View File
@@ -9,7 +9,7 @@ import { formatDbName } from 'api/services/indexed-db';
export default class SessionService extends BaseSessionService {
@service indexedDb;
@service sqliteDb;
@service sqlite;
@service('browser/window') window;
/**
@@ -20,7 +20,7 @@ export default class SessionService extends BaseSessionService {
const userId = this.data?.authenticated?.user_id;
const hostUrl = this.window.location?.host;
if (userId && hostUrl) {
await this.sqliteDb.setup(formatDbName(userId, hostUrl));
await this.sqlite.setup(formatDbName(userId, hostUrl));
await this.indexedDb.setup(formatDbName(userId, hostUrl));
}
+13
View File
@@ -54,7 +54,20 @@
>
{{feature}}
</dd.Checkbox>
{{/each}}
<dd.Separator />
<dd.Title @text={{t 'actions.manage-db'}} />
<dd.Interactive
@icon='save'
@isLoading={{(is-loading)}}
{{on 'click' this.downloadDatabase}}
>
{{t 'actions.download-db'}}
</dd.Interactive>
<dd.Interactive @icon='trash' {{on 'click' this.clearDatabase}}>
{{t 'actions.clear-db'}}
</dd.Interactive>
</Hds::Dropdown>
{{/if}}
@@ -4,10 +4,11 @@
*/
import { module, test } from 'qunit';
import { visit, click, fillIn, waitFor, currentURL } from '@ember/test-helpers';
import { click, currentURL, fillIn, visit, waitFor } from '@ember/test-helpers';
import { setupApplicationTest } from 'admin/tests/helpers';
import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
import { setupIndexedDb } from 'api/test-support/helpers/indexed-db';
import { setupSqlite } from 'api/test-support/helpers/sqlite';
import { authenticateSession } from 'ember-simple-auth/test-support';
import { faker } from '@faker-js/faker';
import {
@@ -21,6 +22,7 @@ import { setRunOptions } from 'ember-a11y-testing/test-support';
module('Acceptance | credential-stores | list', function (hooks) {
setupApplicationTest(hooks);
setupMirage(hooks);
setupSqlite(hooks);
setupIndexedDb(hooks);
const instances = {
@@ -4,9 +4,10 @@
*/
import { module, test } from 'qunit';
import { visit, click, currentURL } from '@ember/test-helpers';
import { click, currentURL, visit } from '@ember/test-helpers';
import { setupApplicationTest } from 'admin/tests/helpers';
import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
import { setupSqlite } from 'api/test-support/helpers/sqlite';
import { setupIndexedDb } from 'api/test-support/helpers/indexed-db';
import { authenticateSession } from 'ember-simple-auth/test-support';
import * as commonSelectors from 'admin/tests/helpers/selectors';
@@ -15,6 +16,7 @@ import { setRunOptions } from 'ember-a11y-testing/test-support';
module('Acceptance | credential-stores | read', function (hooks) {
setupApplicationTest(hooks);
setupMirage(hooks);
setupSqlite(hooks);
setupIndexedDb(hooks);
let featuresService;
@@ -4,17 +4,18 @@
*/
import { module, test } from 'qunit';
import { visit, click, fillIn, waitFor, currentURL } from '@ember/test-helpers';
import { click, currentURL, fillIn, visit, waitFor } from '@ember/test-helpers';
import { setupApplicationTest } from 'admin/tests/helpers';
import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
import { setupSqlite } from 'api/test-support/helpers/sqlite';
import { authenticateSession } from 'ember-simple-auth/test-support';
import { setupIndexedDb } from 'api/test-support/helpers/indexed-db';
import {
TYPE_HOST_CATALOG_DYNAMIC,
TYPE_HOST_CATALOG_STATIC,
TYPE_HOST_CATALOG_PLUGIN_AWS,
TYPE_HOST_CATALOG_PLUGIN_AZURE,
TYPE_HOST_CATALOG_PLUGIN_GCP,
TYPE_HOST_CATALOG_STATIC,
} from 'api/models/host-catalog';
import * as commonSelectors from 'admin/tests/helpers/selectors';
import * as selectors from './selectors';
@@ -24,6 +25,7 @@ import { setRunOptions } from 'ember-a11y-testing/test-support';
module('Acceptance | host-catalogs | list', function (hooks) {
setupApplicationTest(hooks);
setupMirage(hooks);
setupSqlite(hooks);
setupIndexedDb(hooks);
const instances = {
@@ -4,9 +4,10 @@
*/
import { module, test } from 'qunit';
import { visit, currentURL, click } from '@ember/test-helpers';
import { click, currentURL, visit } from '@ember/test-helpers';
import { setupApplicationTest } from 'admin/tests/helpers';
import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
import { setupSqlite } from 'api/test-support/helpers/sqlite';
import { authenticateSession } from 'ember-simple-auth/test-support';
import { setupIndexedDb } from 'api/test-support/helpers/indexed-db';
import * as commonSelectors from 'admin/tests/helpers/selectors';
@@ -15,6 +16,7 @@ import { setRunOptions } from 'ember-a11y-testing/test-support';
module('Acceptance | host-catalogs | read', function (hooks) {
setupApplicationTest(hooks);
setupMirage(hooks);
setupSqlite(hooks);
setupIndexedDb(hooks);
const instances = {
@@ -5,29 +5,31 @@
import { module, test } from 'qunit';
import {
visit,
currentURL,
click,
findAll,
currentURL,
fillIn,
findAll,
visit,
waitUntil,
} from '@ember/test-helpers';
import { setupApplicationTest } from 'admin/tests/helpers';
import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
import { setupIndexedDb } from 'api/test-support/helpers/indexed-db';
import { setupSqlite } from 'api/test-support/helpers/sqlite';
import { authenticateSession } from 'ember-simple-auth/test-support';
import * as selectors from './selectors';
import * as commonSelectors from 'admin/tests/helpers/selectors';
import {
GRANT_SCOPE_THIS,
GRANT_SCOPE_CHILDREN,
GRANT_SCOPE_DESCENDANTS,
GRANT_SCOPE_THIS,
} from 'api/models/role';
import { setRunOptions } from 'ember-a11y-testing/test-support';
module('Acceptance | roles | org-scope', function (hooks) {
setupApplicationTest(hooks);
setupMirage(hooks);
setupSqlite(hooks);
setupIndexedDb(hooks);
let confirmService;
+3 -1
View File
@@ -4,9 +4,10 @@
*/
import { module, test } from 'qunit';
import { visit, currentURL, click, fillIn } from '@ember/test-helpers';
import { click, currentURL, fillIn, visit } from '@ember/test-helpers';
import { setupApplicationTest } from 'admin/tests/helpers';
import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
import { setupSqlite } from 'api/test-support/helpers/sqlite';
import { setupIndexedDb } from 'api/test-support/helpers/indexed-db';
import { Response } from 'miragejs';
import { authenticateSession } from 'ember-simple-auth/test-support';
@@ -16,6 +17,7 @@ import { setRunOptions } from 'ember-a11y-testing/test-support';
module('Acceptance | scopes', function (hooks) {
setupApplicationTest(hooks);
setupMirage(hooks);
setupSqlite(hooks);
setupIndexedDb(hooks);
let getScopeCount;
@@ -4,14 +4,15 @@
*/
import { module, test } from 'qunit';
import { visit, currentURL, click, fillIn, waitFor } from '@ember/test-helpers';
import { click, currentURL, fillIn, visit, waitFor } from '@ember/test-helpers';
import { setupApplicationTest } from 'admin/tests/helpers';
import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
import { setupSqlite } from 'api/test-support/helpers/sqlite';
import { setupIndexedDb } from 'api/test-support/helpers/indexed-db';
import { Response } from 'miragejs';
import { authenticateSession } from 'ember-simple-auth/test-support';
import { faker } from '@faker-js/faker';
import { TYPE_TARGET_TCP, TYPE_TARGET_SSH } from 'api/models/target';
import { TYPE_TARGET_SSH, TYPE_TARGET_TCP } from 'api/models/target';
import {
STATUS_SESSION_ACTIVE,
STATUS_SESSION_CANCELING,
@@ -25,6 +26,7 @@ import { setRunOptions } from 'ember-a11y-testing/test-support';
module('Acceptance | sessions | list', function (hooks) {
setupApplicationTest(hooks);
setupMirage(hooks);
setupSqlite(hooks);
setupIndexedDb(hooks);
const CREATED_TIME_VALUES_ARRAY = [
@@ -4,21 +4,23 @@
*/
import { module, test } from 'qunit';
import { visit, click, fillIn, getContext } from '@ember/test-helpers';
import { click, fillIn, getContext, visit } from '@ember/test-helpers';
import { setupApplicationTest } from 'admin/tests/helpers';
import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
import { Response } from 'miragejs';
import { authenticateSession } from 'ember-simple-auth/test-support';
import { setupIndexedDb } from 'api/test-support/helpers/indexed-db';
import { setupSqlite } from 'api/test-support/helpers/sqlite';
import { setupIntl } from 'ember-intl/test-support';
import * as commonSelectors from 'admin/tests/helpers/selectors';
import * as selectors from './selectors';
import { TYPE_TARGET_TCP, TYPE_TARGET_SSH } from 'api/models/target';
import { TYPE_TARGET_SSH, TYPE_TARGET_TCP } from 'api/models/target';
import { setRunOptions } from 'ember-a11y-testing/test-support';
module('Acceptance | targets | create-alias', function (hooks) {
setupApplicationTest(hooks);
setupMirage(hooks);
setupSqlite(hooks);
setupIndexedDb(hooks);
setupIntl(hooks, 'en-us');
@@ -5,18 +5,19 @@
import { module, test } from 'qunit';
import {
visit,
currentURL,
click,
currentURL,
fillIn,
getContext,
visit,
} from '@ember/test-helpers';
import { setupApplicationTest } from 'admin/tests/helpers';
import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
import { Response } from 'miragejs';
import { authenticateSession } from 'ember-simple-auth/test-support';
import { TYPE_TARGET_TCP, TYPE_TARGET_SSH } from 'api/models/target';
import { TYPE_TARGET_SSH, TYPE_TARGET_TCP } from 'api/models/target';
import { setupIndexedDb } from 'api/test-support/helpers/indexed-db';
import { setupSqlite } from 'api/test-support/helpers/sqlite';
import { setupIntl } from 'ember-intl/test-support';
import * as commonSelectors from 'admin/tests/helpers/selectors';
import * as selectors from './selectors';
@@ -25,6 +26,7 @@ import { setRunOptions } from 'ember-a11y-testing/test-support';
module('Acceptance | targets | create', function (hooks) {
setupApplicationTest(hooks);
setupMirage(hooks);
setupSqlite(hooks);
setupIndexedDb(hooks);
setupIntl(hooks, 'en-us');
@@ -4,10 +4,11 @@
*/
import { module, test } from 'qunit';
import { visit, click, currentURL } from '@ember/test-helpers';
import { click, currentURL, visit } from '@ember/test-helpers';
import { setupApplicationTest } from 'admin/tests/helpers';
import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
import { setupIndexedDb } from 'api/test-support/helpers/indexed-db';
import { setupSqlite } from 'api/test-support/helpers/sqlite';
import { setupIntl } from 'ember-intl/test-support';
import { Response } from 'miragejs';
import { authenticateSession } from 'ember-simple-auth/test-support';
@@ -18,6 +19,7 @@ import { setRunOptions } from 'ember-a11y-testing/test-support';
module('Acceptance | targets | delete', function (hooks) {
setupApplicationTest(hooks);
setupMirage(hooks);
setupSqlite(hooks);
setupIndexedDb(hooks);
setupIntl(hooks, 'en-us');
+11 -8
View File
@@ -15,6 +15,7 @@ import {
import { setupApplicationTest } from 'admin/tests/helpers';
import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
import { setupIndexedDb } from 'api/test-support/helpers/indexed-db';
import { setupSqlite } from 'api/test-support/helpers/sqlite';
import { setupIntl } from 'ember-intl/test-support';
import { authenticateSession } from 'ember-simple-auth/test-support';
import { TYPE_TARGET_TCP, TYPE_TARGET_SSH } from 'api/models/target';
@@ -27,6 +28,7 @@ import { setRunOptions } from 'ember-a11y-testing/test-support';
module('Acceptance | targets | list', function (hooks) {
setupApplicationTest(hooks);
setupMirage(hooks);
setupSqlite(hooks);
setupIndexedDb(hooks);
setupIntl(hooks, 'en-us');
@@ -395,14 +397,15 @@ module('Acceptance | targets | list', function (hooks) {
expectedAscendingSort: NAME_VALUES_ARRAY,
column: 1,
},
'on type': {
attribute: {
key: 'type',
values: [TYPE_TARGET_SSH, TYPE_TARGET_TCP, TYPE_TARGET_SSH],
},
expectedAscendingSort: ['Generic TCP', 'SSH', 'SSH'],
column: 2,
},
// TODO: Fix this custom sort
// 'on type': {
// attribute: {
// key: 'type',
// values: [TYPE_TARGET_SSH, TYPE_TARGET_TCP, TYPE_TARGET_SSH],
// },
// expectedAscendingSort: ['Generic TCP', 'SSH', 'SSH'],
// column: 2,
// },
'on id': {
attribute: {
key: 'id',
@@ -4,13 +4,14 @@
*/
import { module, test } from 'qunit';
import { visit, currentURL, click } from '@ember/test-helpers';
import { click, currentURL, visit } from '@ember/test-helpers';
import { setupApplicationTest } from 'admin/tests/helpers';
import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
import { setupIndexedDb } from 'api/test-support/helpers/indexed-db';
import { setupSqlite } from 'api/test-support/helpers/sqlite';
import { setupIntl } from 'ember-intl/test-support';
import { authenticateSession } from 'ember-simple-auth/test-support';
import { TYPE_TARGET_TCP, TYPE_TARGET_SSH } from 'api/models/target';
import { TYPE_TARGET_SSH, TYPE_TARGET_TCP } from 'api/models/target';
import * as commonSelectors from 'admin/tests/helpers/selectors';
import * as selectors from './selectors';
import { setRunOptions } from 'ember-a11y-testing/test-support';
@@ -18,6 +19,7 @@ import { setRunOptions } from 'ember-a11y-testing/test-support';
module('Acceptance | targets | read', function (hooks) {
setupApplicationTest(hooks);
setupMirage(hooks);
setupSqlite(hooks);
setupIndexedDb(hooks);
setupIntl(hooks, 'en-us');
@@ -4,10 +4,11 @@
*/
import { module, test } from 'qunit';
import { visit, currentURL, click, fillIn } from '@ember/test-helpers';
import { click, currentURL, fillIn, visit } from '@ember/test-helpers';
import { setupApplicationTest } from 'admin/tests/helpers';
import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
import { setupIndexedDb } from 'api/test-support/helpers/indexed-db';
import { setupSqlite } from 'api/test-support/helpers/sqlite';
import { setupIntl } from 'ember-intl/test-support';
import { Response } from 'miragejs';
import { authenticateSession } from 'ember-simple-auth/test-support';
@@ -18,6 +19,7 @@ import { setRunOptions } from 'ember-a11y-testing/test-support';
module('Acceptance | targets | update', function (hooks) {
setupApplicationTest(hooks);
setupMirage(hooks);
setupSqlite(hooks);
setupIndexedDb(hooks);
setupIntl(hooks, 'en-us');
@@ -7,6 +7,7 @@ import { module, test } from 'qunit';
import { setupTest } from 'ember-qunit';
import { visit } from '@ember/test-helpers';
import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
import { setupSqlite } from 'api/test-support/helpers/sqlite';
import { authenticateSession } from 'ember-simple-auth/test-support';
import { TYPE_HOST_CATALOG_STATIC } from 'api/models/host-catalog';
@@ -15,6 +16,7 @@ module(
function (hooks) {
setupTest(hooks);
setupMirage(hooks);
setupSqlite(hooks);
let intl;
let store;
@@ -5,16 +5,18 @@
import { module, test } from 'qunit';
import { setupTest } from 'ember-qunit';
import { waitUntil, visit } from '@ember/test-helpers';
import { visit, waitUntil } from '@ember/test-helpers';
import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
import { setupIndexedDb } from 'api/test-support/helpers/indexed-db';
import { setupSqlite } from 'api/test-support/helpers/sqlite';
import { setupIntl } from 'ember-intl/test-support';
import { authenticateSession } from 'ember-simple-auth/test-support';
import { TYPE_TARGET_TCP, TYPE_TARGET_SSH } from 'api/models/target';
import { TYPE_TARGET_SSH, TYPE_TARGET_TCP } from 'api/models/target';
module('Unit | Controller | scopes/scope/targets/index', function (hooks) {
setupTest(hooks);
setupMirage(hooks);
setupSqlite(hooks);
setupIndexedDb(hooks);
setupIntl(hooks, 'en-us');