forked from dfinity/portal
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'master' into mraszyk/use-quill-in-sns-testflight
- Loading branch information
Showing
34 changed files
with
539 additions
and
222 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
1 change: 0 additions & 1 deletion
1
docs/developer-docs/build/_attachments/SDK-protocol-local-overview.svg
This file was deleted.
Oops, something went wrong.
1 change: 0 additions & 1 deletion
1
docs/developer-docs/build/_attachments/SDK-protocol-network.svg
This file was deleted.
Oops, something went wrong.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
This file was deleted.
Oops, something went wrong.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
2 changes: 0 additions & 2 deletions
2
docs/developer-docs/build/_attachments/three-path-workflow.svg
This file was deleted.
Oops, something went wrong.
4 changes: 4 additions & 0 deletions
4
docs/developer-docs/frontend/my-contacts.md → ...developer-docs/frontend/add-stylesheet.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
6 changes: 4 additions & 2 deletions
6
docs/developer-docs/security/rust-canister-development-security-best-practices.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,222 @@ | ||
--- | ||
title: Asset Canister | ||
--- | ||
|
||
# The Asset Canister | ||
|
||
The [Asset Canister](https://github.com/dfinity/sdk/tree/master/src/canisters/frontend/ic-frontend-canister) provides | ||
you with a mechanism to store and retrieve static assets from a canister deployed on the Internet | ||
Computer. It is generally used to serve HTML, JS, and CSS assets | ||
for [single page applications](https://en.wikipedia.org/wiki/Single-page_application), i.e. your application's frontend. | ||
|
||
DFX provides this canister by default when your canister `type` is set to `assets` in `dfx.json`. | ||
|
||
For example: | ||
|
||
```json | ||
{ | ||
"canisters": { | ||
"www": { | ||
"frontend": { | ||
"entrypoint": "assets/src/index.html" | ||
}, | ||
"source": [ | ||
"assets/assets", | ||
"assets/src" | ||
], | ||
"type": "assets" | ||
} | ||
}, | ||
"defaults": { | ||
"build": { | ||
"args": "", | ||
"packtool": "" | ||
} | ||
}, | ||
"version": 1 | ||
} | ||
``` | ||
|
||
:::caution | ||
The asset canister can host roughly 1GB in static files. It is recommended that you distribute your files | ||
across multiple canisters if the total size of all your assets begins to exceed this amount. Once you exceed this | ||
figure, your canister may fail to upgrade. | ||
::: | ||
|
||
<br/> | ||
|
||
# Anatomy | ||
|
||
The Asset Canister is written in Rust and exposes the following methods: | ||
|
||
```go | ||
#[update] | ||
async fn authorize(other: Principal) | ||
|
||
#[update] | ||
async fn grant_permission(arg: GrantPermissionArguments) | ||
|
||
#[update] | ||
async fn validate_grant_permission(arg: GrantPermissionArguments) -> Result<String, String> | ||
|
||
#[update] | ||
async fn deauthorize(other: Principal) | ||
|
||
#[update] | ||
async fn revoke_permission(arg: RevokePermissionArguments) | ||
|
||
#[update] | ||
async fn validate_revoke_permission(arg: RevokePermissionArguments) -> Result<String, String> | ||
|
||
#[update] | ||
fn list_authorized() -> Vec<Principal> | ||
|
||
#[query(manual_reply = true)] | ||
fn list_permitted(arg: ListPermittedArguments) -> ManualReply<Vec<Principal>> | ||
|
||
#[update] | ||
async fn take_ownership() | ||
|
||
#[query] | ||
fn retrieve(key: Key) -> RcBytes | ||
|
||
#[update(guard = "can_commit")] | ||
fn store(arg: StoreArg) | ||
|
||
#[update(guard = "can_prepare")] | ||
fn create_batch() -> CreateBatchResponse | ||
|
||
#[update(guard = "can_prepare")] | ||
fn create_chunk(arg: CreateChunkArg) -> CreateChunkResponse | ||
|
||
#[update(guard = "can_commit")] | ||
fn create_asset(arg: CreateAssetArguments) | ||
|
||
#[update(guard = "can_commit")] | ||
fn set_asset_content(arg: SetAssetContentArguments) | ||
|
||
#[update(guard = "can_commit")] | ||
fn unset_asset_content(arg: UnsetAssetContentArguments) | ||
|
||
#[update(guard = "can_commit")] | ||
fn delete_asset(arg: DeleteAssetArguments) | ||
|
||
#[update(guard = "can_commit")] | ||
fn clear() | ||
|
||
#[update(guard = "can_commit")] | ||
fn commit_batch(arg: CommitBatchArguments) | ||
|
||
#[query] | ||
fn get(arg: GetArg) -> EncodedAsset | ||
|
||
#[query] | ||
fn get_chunk(arg: GetChunkArg) -> GetChunkResponse | ||
|
||
#[query] | ||
fn list() -> Vec<AssetDetails> | ||
|
||
#[query] | ||
fn certified_tree() -> CertifiedTree | ||
|
||
#[query] | ||
fn http_request(req: HttpRequest) -> HttpResponse | ||
|
||
#[query] | ||
fn http_request_streaming_callback(token: StreamingCallbackToken) -> StreamingCallbackHttpResponse | ||
|
||
#[query] | ||
fn get_asset_properties(key: Key) -> AssetProperties | ||
|
||
#[update(guard = "can_commit")] | ||
fn set_asset_properties(arg: SetAssetPropertiesArguments) | ||
``` | ||
|
||
<br/> | ||
|
||
# Configuration | ||
|
||
You can configure how the Asset Canister responds to requests for specific assets by defining your | ||
desired configuration in a file named `.ic-assets.json` | ||
|
||
Each entry in `.ic-assets.json` allows for specifying a glob pattern along with the headers to be returned in | ||
the response for any file that matches the pattern. You may also dictate whether redirects are performed from the | ||
non-certified endpoint to a certified endpoint for any given filename pattern. | ||
|
||
Here is a sample: | ||
|
||
```json | ||
[ | ||
{ | ||
"match": "**/*", | ||
"headers": { | ||
// Security: The Content Security Policy (CSP) given below aims at working with many apps rather than providing maximal security. | ||
// We recommend tightening the CSP for your specific application. Some recommendations are as follows: | ||
// - Use the CSP Evaluator (https://csp-evaluator.withgoogle.com/) to validate the CSP you define. | ||
// - Follow the “Strict CSP” recommendations (https://csp.withgoogle.com/docs/strict-csp.html). However, note that in the context of the IC, | ||
// nonces cannot be used because the response bodies must be static to work well with HTTP asset certification. | ||
// Thus, we recommend to include script hashes (in combination with strict-dynamic) in the CSP as described | ||
// in https://csp.withgoogle.com/docs/faq.html in section “What if my site is static and I can't add nonces to scripts?”. | ||
// See for example the II CSP (https://github.com/dfinity/internet-identity/blob/main/src/internet_identity/src/http.rs). | ||
// - It is recommended to tighten the connect-src directive. With the current CSP configuration the browser can | ||
// make requests to https://*.ic0.app, hence being able to call any canister via https://ic0.app/api/v2/canister/{canister-ID}. | ||
// This could potentially be used in combination with another vulnerability (e.g. XSS) to exfiltrate private data. | ||
// The developer can configure this policy to only allow requests to their specific canisters, | ||
// e.g: connect-src 'self' https://ic0.app/api/v2/canister/{my-canister-ID}, where {my-canister-ID} has the following format: aaaaa-aaaaa-aaaaa-aaaaa-aaa | ||
// - It is recommended to configure style-src, style-src-elem and font-src directives with the resources your canister is going to use | ||
// instead of using the wild card (*) option. Normally this will include 'self' but also other third party styles or fonts resources (e.g: https://fonts.googleapis.com or other CDNs) | ||
|
||
// Notes about the CSP below: | ||
// - script-src 'unsafe-eval' is currently required because agent-js uses a WebAssembly module for the validation of bls signatures. | ||
// There is currently no other way to allow execution of WebAssembly modules with CSP. | ||
// See: https://github.com/WebAssembly/content-security-policy/blob/main/proposals/CSP.md. | ||
// - We added img-src data: because data: images are used often. | ||
// - frame-ancestors: none mitigates clickjacking attacks. See https://owasp.org/www-community/attacks/Clickjacking. | ||
"Content-Security-Policy": "default-src 'self';script-src 'self' 'unsafe-eval';connect-src 'self' https://ic0.app https://*.ic0.app;img-src 'self' data:;style-src * 'unsafe-inline';style-src-elem * 'unsafe-inline';font-src *;object-src 'none';base-uri 'self';frame-ancestors 'none';form-action 'self';upgrade-insecure-requests;", | ||
// Security: The permissions policy disables all features for security reasons. If your site needs such permissions, activate them. | ||
// To configure permissions go here https://www.permissionspolicy.com/ | ||
"Permissions-Policy": "accelerometer=(), ambient-light-sensor=(), autoplay=(), battery=(), camera=(), cross-origin-isolated=(), display-capture=(), document-domain=(), encrypted-media=(), execution-while-not-rendered=(), execution-while-out-of-viewport=(), fullscreen=(), geolocation=(), gyroscope=(), keyboard-map=(), magnetometer=(), microphone=(), midi=(), navigation-override=(), payment=(), picture-in-picture=(), publickey-credentials-get=(), screen-wake-lock=(), sync-xhr=(), usb=(), web-share=(), xr-spatial-tracking=(), clipboard-read=(), clipboard-write=(), gamepad=(), speaker-selection=(), conversion-measurement=(), focus-without-user-activation=(), hid=(), idle-detection=(), interest-cohort=(), serial=(), sync-script=(), trust-token-redemption=(), window-placement=(), vertical-scroll=()", | ||
// Security: Mitigates clickjacking attacks. | ||
// See: https://owasp.org/www-community/attacks/Clickjacking. | ||
"X-Frame-Options": "DENY", | ||
// Security: Avoids forwarding referrer information to other origins. | ||
// See: https://owasp.org/www-project-secure-headers/#referrer-policy. | ||
"Referrer-Policy": "same-origin", | ||
// Security: Tells the user’s browser that it must always use HTTPS with your site. | ||
// See: https://owasp.org/www-project-secure-headers/#http-strict-transport-security | ||
"Strict-Transport-Security": "max-age=31536000; includeSubDomains", | ||
// Security: Prevents the browser from interpreting files as a different MIME type to what is specified in the Content-Type header. | ||
// See: https://owasp.org/www-project-secure-headers/#x-content-type-options | ||
"X-Content-Type-Options": "nosniff", | ||
// Security: Enables browser features to mitigate some of the XSS attacks. Note that it has to be in mode=block. | ||
// See: https://owasp.org/www-community/attacks/xss/ | ||
"X-XSS-Protection": "1; mode=block" | ||
}, | ||
// redirect all requests from .raw.ic0.app to .ic0.app (this redirection is the default) | ||
"allow_raw_access": false | ||
} | ||
] | ||
``` | ||
|
||
# Troubleshooting | ||
|
||
Here are some common resolutions for issues encountered with the Asset canister. | ||
|
||
### Asset canister fails to upgrade | ||
|
||
It is likely that the total size of all the static files stored in your Asset canister exceed the | ||
recommended 1GB limit. The resolution is to uninstall and redeploy your canister code. | ||
|
||
```bash | ||
dfx canister uninstall-code <CANISTER NAME or ID> | ||
``` | ||
|
||
```bash | ||
dfx deploy --upgrade-unchanged <CANISTER NAME> | ||
``` | ||
|
||
:::caution | ||
This will incur downtime. This first uninstalls the WASM module from your canister. During this period, your canister | ||
will not be reachable. The second command redeploys with fresh state, after which point, your canister will be available | ||
to serve assets again. | ||
::: |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
6 changes: 5 additions & 1 deletion
6
.../Step 3 - Adding variables and methods.md → ...first_app/adding-variables-and-methods.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
7 changes: 6 additions & 1 deletion
7
...ur_first_app/Step 1 - Backend Overview.md → ...create_your_first_app/backend-overview.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,12 @@ | ||
--- | ||
sidebar_position: 1 | ||
title: Step 1 - Backend overview | ||
--- | ||
|
||
# Step 1 - Backend intro | ||
In first part of the tutorial we will create a backend for our application that will be implemented as Internet Computer canister. | ||
|
||
Backend canisters have a default user interface called Candid UI that will allow you to interact with them without writing any frontend code. Here's how Candid UI for our project will look like at the end of this step: | ||
 | ||
 | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.