diff --git a/CHANGELOG.md b/CHANGELOG.md index 14eaed8..d8c0371 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,10 @@ Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how ## [Unreleased] +## [0.0.6] - 2021-4-30 +### Fixed +- Fixed a bug where the extension could not connect to Appwrite instances over localhost beacuse of self-signed certificates. + ## [0.0.5] - 2021-4-30 ### Fixed - Sometimes views would not refresh after adding/removing a project [PR](https://github.com/streamlux/vscode-appwrite/pull/7) diff --git a/README.md b/README.md index 2ef3ce0..98f3339 100644 --- a/README.md +++ b/README.md @@ -58,6 +58,7 @@ After connecting to an Appwrite project, your `appwrite.projects` setting will c "endpoint": "https://[Domain]/v1", "projectId": "[Project ID]", "secret": "API key with all scopes", + "selfSigned": "boolean", // set to true if you're connecting to Appwrite over localhost "nickname": "My project" } ``` diff --git a/package.json b/package.json index 8241e85..c830aa9 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "vscode-appwrite", "displayName": "Appwrite", "description": "Manage your Appwrite resources right from VS Code!", - "version": "0.0.5", + "version": "0.0.6", "engines": { "vscode": "^1.55.0" }, diff --git a/src/appwrite.d.ts b/src/appwrite.d.ts index 96c72f5..e84fab3 100644 --- a/src/appwrite.d.ts +++ b/src/appwrite.d.ts @@ -243,18 +243,18 @@ type Membership = { }; export type FilesList = { - sum: number; - files: File[]; + sum: number; + files: File[]; }; export type File = { - '$id': string; - '$permissions': Permissions; - name: string; - dateCreated: number; - signature: string; - mimeType: string; - sizeOriginal: number; + $id: string; + $permissions: Permissions; + name: string; + dateCreated: number; + signature: string; + mimeType: string; + sizeOriginal: number; }; export type Collection = { @@ -266,14 +266,14 @@ export type Collection = { rules: Rule[]; }; -export type CreatedCollection = Partial & Pick; +export type CreatedCollection = Partial & Pick; export type CollectionsList = { sum: number; collections: Collection[]; }; -export type CreatedRule = Omit; +export type CreatedRule = Omit; export type Rule = { $id: string; @@ -299,6 +299,7 @@ export type Client = { setProject: (projectId: string) => Client; // Your secret API key setKey: (key: string) => Client; + setSelfSigned: (value: boolean) => void; }; export type UsersClient = { deleteUser: (id: string) => Promise; @@ -358,7 +359,7 @@ export type StorageClient = { createFile: (file: any, read: string[], write: string[]) => Promise; listFiles: () => Promise; getFile: (fileId: string) => Promise; -} +}; export type SDK = { Client: new () => Client; diff --git a/src/client.ts b/src/client.ts index 3313fcb..0772412 100644 --- a/src/client.ts +++ b/src/client.ts @@ -13,10 +13,10 @@ export let healthClient: Health | undefined; export let databaseClient: Database | undefined; export let storageClient: Storage | undefined; -function initAppwriteClient({ endpoint, projectId, secret }: AppwriteProjectConfiguration) { +function initAppwriteClient({ endpoint, projectId, secret, selfSigned }: AppwriteProjectConfiguration) { client = new AppwriteSDK.Client(); clientConfig = { endpoint, projectId, secret }; - client.setEndpoint(endpoint).setProject(projectId).setKey(secret); + client.setEndpoint(endpoint).setProject(projectId).setKey(secret).setSelfSigned(selfSigned); usersClient = new Users(client); healthClient = new Health(client); diff --git a/src/settings.ts b/src/settings.ts index 55bd14b..72a7474 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -6,6 +6,7 @@ export type AppwriteProjectConfiguration = { endpoint: string; console?: string; projectId: string; + selfSigned: boolean; secret: string; }; diff --git a/src/ui/AddProjectWizard.ts b/src/ui/AddProjectWizard.ts index 8b36ed5..a31a654 100644 --- a/src/ui/AddProjectWizard.ts +++ b/src/ui/AddProjectWizard.ts @@ -1,38 +1,51 @@ import { window } from "vscode"; -import { AppwriteProjectConfiguration } from "../settings"; +import { AppwriteProjectConfiguration, getActiveProjectConfiguration } from "../settings"; export async function addProjectWizard(): Promise { + const config = await getActiveProjectConfiguration(); const endpoint = await window.showInputBox({ placeHolder: "Endpoint", - prompt: "Enter your Appwrite API endping", - ignoreFocusOut: true + value: config?.endpoint ?? "https://localhost/v1", + valueSelection: undefined, + prompt: "Enter your Appwrite API endpoint (ex: https://localhost/v1)", + ignoreFocusOut: true, }); if (endpoint === undefined) { return; } const projectId = await window.showInputBox({ placeHolder: "Project Id", - prompt: "Enter your Appwrite project id", - ignoreFocusOut: true + prompt: "Enter your Appwrite project id (ex: 5df5acd0d48c2)", + ignoreFocusOut: true, }); if (projectId === undefined) { return; } const secret = await window.showInputBox({ placeHolder: "API key secret", - prompt: "Enter your Appwrite API key secret", - ignoreFocusOut: true + prompt: "Enter your Appwrite API key secret (with all scopes)", + ignoreFocusOut: true, }); if (secret === undefined) { return; } + const selfSigned = await window.showQuickPick( + [ + { label: "Yes", description: "If running Appwrite on localhost, or local IP" }, + { label: "No", description: "If connecting to a remote Appwrite instance" }, + ], + { placeHolder: "Allow communication with self-signed SSL certificates? (Select 'Yes' for connecting to Appwrite on localhost)" } + ); + if (selfSigned === undefined) { + return; + } const nickname = await window.showInputBox({ prompt: "(Optional) Project name", - ignoreFocusOut: true + ignoreFocusOut: true, }); if (endpoint && projectId && secret) { - return { endpoint, projectId, secret, nickname }; + return { endpoint, projectId, secret, nickname, selfSigned: selfSigned.label === "Yes" }; } return undefined; }