54 changed files with 1292 additions and 534 deletions
			
			
		
								
									
										File diff suppressed because it is too large
									
								
							
						
					@ -0,0 +1,104 @@ | 
				
			|||||
 | 
					# Using multistage build:  | 
				
			||||
 | 
					# 	https://docs.docker.com/develop/develop-images/multistage-build/ | 
				
			||||
 | 
					# 	https://whitfin.io/speeding-up-rust-docker-builds/ | 
				
			||||
 | 
					####################### VAULT BUILD IMAGE  ####################### | 
				
			||||
 | 
					FROM alpine:3.10 as vault | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					ENV VAULT_VERSION "v2.12.0" | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					ENV URL "https://github.com/dani-garcia/bw_web_builds/releases/download/$VAULT_VERSION/bw_web_$VAULT_VERSION.tar.gz" | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					RUN apk add --no-cache --upgrade \ | 
				
			||||
 | 
					    curl \ | 
				
			||||
 | 
					    tar | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					RUN mkdir /web-vault | 
				
			||||
 | 
					WORKDIR /web-vault | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					SHELL ["/bin/ash", "-eo", "pipefail", "-c"] | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					RUN curl -L $URL | tar xz | 
				
			||||
 | 
					RUN ls | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					########################## BUILD IMAGE  ########################## | 
				
			||||
 | 
					# We need to use the Rust build image, because | 
				
			||||
 | 
					# we need the Rust compiler and Cargo tooling | 
				
			||||
 | 
					FROM rust:1.36 as build | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# set mysql backend | 
				
			||||
 | 
					ARG DB=postgresql | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Using bundled SQLite, no need to install it | 
				
			||||
 | 
					# RUN apt-get update && apt-get install -y\ | 
				
			||||
 | 
					#    --no-install-recommends \ | 
				
			||||
 | 
					#    sqlite3\ | 
				
			||||
 | 
					# && rm -rf /var/lib/apt/lists/* | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Install MySQL package | 
				
			||||
 | 
					RUN apt-get update && apt-get install -y \ | 
				
			||||
 | 
					    --no-install-recommends \ | 
				
			||||
 | 
					    libpq-dev \ | 
				
			||||
 | 
					    && rm -rf /var/lib/apt/lists/* | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Creates a dummy project used to grab dependencies | 
				
			||||
 | 
					RUN USER=root cargo new --bin app | 
				
			||||
 | 
					WORKDIR /app | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Copies over *only* your manifests and build files | 
				
			||||
 | 
					COPY ./Cargo.* ./ | 
				
			||||
 | 
					COPY ./rust-toolchain ./rust-toolchain | 
				
			||||
 | 
					COPY ./build.rs ./build.rs | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Builds your dependencies and removes the | 
				
			||||
 | 
					# dummy project, except the target folder | 
				
			||||
 | 
					# This folder contains the compiled dependencies | 
				
			||||
 | 
					RUN cargo build --features ${DB} --release | 
				
			||||
 | 
					RUN find . -not -path "./target*" -delete | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Copies the complete project | 
				
			||||
 | 
					# To avoid copying unneeded files, use .dockerignore | 
				
			||||
 | 
					COPY . . | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Make sure that we actually build the project | 
				
			||||
 | 
					RUN touch src/main.rs | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Builds again, this time it'll just be | 
				
			||||
 | 
					# your actual source files being built | 
				
			||||
 | 
					RUN cargo build --features ${DB} --release | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					######################## RUNTIME IMAGE  ######################## | 
				
			||||
 | 
					# Create a new stage with a minimal image | 
				
			||||
 | 
					# because we already have a binary built | 
				
			||||
 | 
					FROM debian:stretch-slim | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					ENV ROCKET_ENV "staging" | 
				
			||||
 | 
					ENV ROCKET_PORT=80 | 
				
			||||
 | 
					ENV ROCKET_WORKERS=10 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Install needed libraries | 
				
			||||
 | 
					RUN apt-get update && apt-get install -y \ | 
				
			||||
 | 
					    --no-install-recommends \ | 
				
			||||
 | 
					    openssl \ | 
				
			||||
 | 
					    ca-certificates \ | 
				
			||||
 | 
					    curl \ | 
				
			||||
 | 
					    sqlite3 \ | 
				
			||||
 | 
					    libpq5 \ | 
				
			||||
 | 
					    && rm -rf /var/lib/apt/lists/* | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					RUN mkdir /data | 
				
			||||
 | 
					VOLUME /data | 
				
			||||
 | 
					EXPOSE 80 | 
				
			||||
 | 
					EXPOSE 3012 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Copies the files from the context (Rocket.toml file and web-vault) | 
				
			||||
 | 
					# and the binary from the "build" stage to the current stage | 
				
			||||
 | 
					COPY Rocket.toml . | 
				
			||||
 | 
					COPY --from=vault /web-vault ./web-vault | 
				
			||||
 | 
					COPY --from=build app/target/release/bitwarden_rs . | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					COPY docker/healthcheck.sh ./healthcheck.sh | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					HEALTHCHECK --interval=30s --timeout=3s CMD sh healthcheck.sh || exit 1 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Configures the startup! | 
				
			||||
 | 
					CMD ["./bitwarden_rs"] | 
				
			||||
@ -0,0 +1,86 @@ | 
				
			|||||
 | 
					# Using multistage build:  | 
				
			||||
 | 
					# 	https://docs.docker.com/develop/develop-images/multistage-build/ | 
				
			||||
 | 
					# 	https://whitfin.io/speeding-up-rust-docker-builds/ | 
				
			||||
 | 
					####################### VAULT BUILD IMAGE  ####################### | 
				
			||||
 | 
					FROM alpine:3.10 as vault | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					ENV VAULT_VERSION "v2.12.0" | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					ENV URL "https://github.com/dani-garcia/bw_web_builds/releases/download/$VAULT_VERSION/bw_web_$VAULT_VERSION.tar.gz" | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					RUN apk add --no-cache --upgrade \ | 
				
			||||
 | 
					    curl \ | 
				
			||||
 | 
					    tar | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					RUN mkdir /web-vault | 
				
			||||
 | 
					WORKDIR /web-vault | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					SHELL ["/bin/ash", "-eo", "pipefail", "-c"] | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					RUN curl -L $URL | tar xz | 
				
			||||
 | 
					RUN ls | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					########################## BUILD IMAGE  ########################## | 
				
			||||
 | 
					# Musl build image for statically compiled binary | 
				
			||||
 | 
					FROM clux/muslrust:nightly-2019-07-08 as build | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# set mysql backend | 
				
			||||
 | 
					ARG DB=postgresql | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					ENV USER "root" | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Install needed libraries | 
				
			||||
 | 
					RUN apt-get update && apt-get install -y \ | 
				
			||||
 | 
					    --no-install-recommends \ | 
				
			||||
 | 
					    libpq-dev \ | 
				
			||||
 | 
					    && rm -rf /var/lib/apt/lists/* | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					WORKDIR /app | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Copies the complete project | 
				
			||||
 | 
					# To avoid copying unneeded files, use .dockerignore | 
				
			||||
 | 
					COPY . . | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					RUN rustup target add x86_64-unknown-linux-musl | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Make sure that we actually build the project | 
				
			||||
 | 
					RUN touch src/main.rs | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Build | 
				
			||||
 | 
					RUN cargo build --features ${DB} --release | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					######################## RUNTIME IMAGE  ######################## | 
				
			||||
 | 
					# Create a new stage with a minimal image | 
				
			||||
 | 
					# because we already have a binary built | 
				
			||||
 | 
					FROM alpine:3.10 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					ENV ROCKET_ENV "staging" | 
				
			||||
 | 
					ENV ROCKET_PORT=80 | 
				
			||||
 | 
					ENV ROCKET_WORKERS=10 | 
				
			||||
 | 
					ENV SSL_CERT_DIR=/etc/ssl/certs | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Install needed libraries | 
				
			||||
 | 
					RUN apk add --no-cache \ | 
				
			||||
 | 
					        openssl \ | 
				
			||||
 | 
					        postgresql-libs \ | 
				
			||||
 | 
					        curl \ | 
				
			||||
 | 
					        sqlite \ | 
				
			||||
 | 
					        ca-certificates | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					RUN mkdir /data | 
				
			||||
 | 
					VOLUME /data | 
				
			||||
 | 
					EXPOSE 80 | 
				
			||||
 | 
					EXPOSE 3012 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Copies the files from the context (Rocket.toml file and web-vault) | 
				
			||||
 | 
					# and the binary from the "build" stage to the current stage | 
				
			||||
 | 
					COPY Rocket.toml . | 
				
			||||
 | 
					COPY --from=vault /web-vault ./web-vault | 
				
			||||
 | 
					COPY --from=build /app/target/x86_64-unknown-linux-musl/release/bitwarden_rs . | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					COPY docker/healthcheck.sh ./healthcheck.sh | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					HEALTHCHECK --interval=30s --timeout=3s CMD sh healthcheck.sh || exit 1 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Configures the startup! | 
				
			||||
 | 
					CMD ["./bitwarden_rs"] | 
				
			||||
@ -0,0 +1 @@ | 
				
			|||||
 | 
					ALTER TABLE twofactor ADD COLUMN last_used INTEGER NOT NULL DEFAULT 0; | 
				
			||||
@ -0,0 +1,13 @@ | 
				
			|||||
 | 
					DROP TABLE devices; | 
				
			||||
 | 
					DROP TABLE attachments; | 
				
			||||
 | 
					DROP TABLE users_collections; | 
				
			||||
 | 
					DROP TABLE users_organizations; | 
				
			||||
 | 
					DROP TABLE folders_ciphers; | 
				
			||||
 | 
					DROP TABLE ciphers_collections; | 
				
			||||
 | 
					DROP TABLE twofactor; | 
				
			||||
 | 
					DROP TABLE invitations; | 
				
			||||
 | 
					DROP TABLE collections; | 
				
			||||
 | 
					DROP TABLE folders; | 
				
			||||
 | 
					DROP TABLE ciphers; | 
				
			||||
 | 
					DROP TABLE users; | 
				
			||||
 | 
					DROP TABLE organizations; | 
				
			||||
@ -0,0 +1,121 @@ | 
				
			|||||
 | 
					CREATE TABLE users ( | 
				
			||||
 | 
					  uuid                CHAR(36) NOT NULL PRIMARY KEY, | 
				
			||||
 | 
					  created_at          TIMESTAMP NOT NULL, | 
				
			||||
 | 
					  updated_at          TIMESTAMP NOT NULL, | 
				
			||||
 | 
					  email               VARCHAR(255) NOT NULL UNIQUE, | 
				
			||||
 | 
					  name                TEXT     NOT NULL, | 
				
			||||
 | 
					  password_hash       BYTEA     NOT NULL, | 
				
			||||
 | 
					  salt                BYTEA     NOT NULL, | 
				
			||||
 | 
					  password_iterations INTEGER  NOT NULL, | 
				
			||||
 | 
					  password_hint       TEXT, | 
				
			||||
 | 
					  akey                TEXT     NOT NULL, | 
				
			||||
 | 
					  private_key         TEXT, | 
				
			||||
 | 
					  public_key          TEXT, | 
				
			||||
 | 
					  totp_secret         TEXT, | 
				
			||||
 | 
					  totp_recover        TEXT, | 
				
			||||
 | 
					  security_stamp      TEXT     NOT NULL, | 
				
			||||
 | 
					  equivalent_domains  TEXT     NOT NULL, | 
				
			||||
 | 
					  excluded_globals    TEXT     NOT NULL, | 
				
			||||
 | 
					  client_kdf_type     INTEGER NOT NULL DEFAULT 0, | 
				
			||||
 | 
					  client_kdf_iter INTEGER NOT NULL DEFAULT 100000 | 
				
			||||
 | 
					); | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					CREATE TABLE devices ( | 
				
			||||
 | 
					  uuid          CHAR(36) NOT NULL PRIMARY KEY, | 
				
			||||
 | 
					  created_at    TIMESTAMP NOT NULL, | 
				
			||||
 | 
					  updated_at    TIMESTAMP NOT NULL, | 
				
			||||
 | 
					  user_uuid     CHAR(36) NOT NULL REFERENCES users (uuid), | 
				
			||||
 | 
					  name          TEXT     NOT NULL, | 
				
			||||
 | 
					  atype         INTEGER  NOT NULL, | 
				
			||||
 | 
					  push_token    TEXT, | 
				
			||||
 | 
					  refresh_token TEXT     NOT NULL, | 
				
			||||
 | 
					  twofactor_remember TEXT | 
				
			||||
 | 
					); | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					CREATE TABLE organizations ( | 
				
			||||
 | 
					  uuid          VARCHAR(40) NOT NULL PRIMARY KEY, | 
				
			||||
 | 
					  name          TEXT NOT NULL, | 
				
			||||
 | 
					  billing_email TEXT NOT NULL | 
				
			||||
 | 
					); | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					CREATE TABLE ciphers ( | 
				
			||||
 | 
					  uuid              CHAR(36) NOT NULL PRIMARY KEY, | 
				
			||||
 | 
					  created_at        TIMESTAMP NOT NULL, | 
				
			||||
 | 
					  updated_at        TIMESTAMP NOT NULL, | 
				
			||||
 | 
					  user_uuid         CHAR(36) REFERENCES users (uuid), | 
				
			||||
 | 
					  organization_uuid CHAR(36) REFERENCES organizations (uuid), | 
				
			||||
 | 
					  atype             INTEGER  NOT NULL, | 
				
			||||
 | 
					  name              TEXT     NOT NULL, | 
				
			||||
 | 
					  notes             TEXT, | 
				
			||||
 | 
					  fields            TEXT, | 
				
			||||
 | 
					  data              TEXT     NOT NULL, | 
				
			||||
 | 
					  favorite          BOOLEAN  NOT NULL, | 
				
			||||
 | 
					  password_history  TEXT | 
				
			||||
 | 
					); | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					CREATE TABLE attachments ( | 
				
			||||
 | 
					  id          CHAR(36) NOT NULL PRIMARY KEY, | 
				
			||||
 | 
					  cipher_uuid CHAR(36) NOT NULL REFERENCES ciphers (uuid), | 
				
			||||
 | 
					  file_name   TEXT    NOT NULL, | 
				
			||||
 | 
					  file_size   INTEGER NOT NULL, | 
				
			||||
 | 
					  akey        TEXT | 
				
			||||
 | 
					); | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					CREATE TABLE folders ( | 
				
			||||
 | 
					  uuid       CHAR(36) NOT NULL PRIMARY KEY, | 
				
			||||
 | 
					  created_at TIMESTAMP NOT NULL, | 
				
			||||
 | 
					  updated_at TIMESTAMP NOT NULL, | 
				
			||||
 | 
					  user_uuid  CHAR(36) NOT NULL REFERENCES users (uuid), | 
				
			||||
 | 
					  name       TEXT     NOT NULL | 
				
			||||
 | 
					); | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					CREATE TABLE collections ( | 
				
			||||
 | 
					  uuid     VARCHAR(40) NOT NULL PRIMARY KEY, | 
				
			||||
 | 
					  org_uuid VARCHAR(40) NOT NULL REFERENCES organizations (uuid), | 
				
			||||
 | 
					  name     TEXT NOT NULL | 
				
			||||
 | 
					); | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					CREATE TABLE users_collections ( | 
				
			||||
 | 
					  user_uuid       CHAR(36) NOT NULL REFERENCES users (uuid), | 
				
			||||
 | 
					  collection_uuid CHAR(36) NOT NULL REFERENCES collections (uuid), | 
				
			||||
 | 
					  read_only       BOOLEAN NOT NULL DEFAULT false, | 
				
			||||
 | 
					  PRIMARY KEY (user_uuid, collection_uuid) | 
				
			||||
 | 
					); | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					CREATE TABLE users_organizations ( | 
				
			||||
 | 
					  uuid       CHAR(36) NOT NULL PRIMARY KEY, | 
				
			||||
 | 
					  user_uuid  CHAR(36) NOT NULL REFERENCES users (uuid), | 
				
			||||
 | 
					  org_uuid   CHAR(36) NOT NULL REFERENCES organizations (uuid), | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					  access_all BOOLEAN NOT NULL, | 
				
			||||
 | 
					  akey       TEXT    NOT NULL, | 
				
			||||
 | 
					  status     INTEGER NOT NULL, | 
				
			||||
 | 
					  atype      INTEGER NOT NULL, | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					  UNIQUE (user_uuid, org_uuid) | 
				
			||||
 | 
					); | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					CREATE TABLE folders_ciphers ( | 
				
			||||
 | 
					  cipher_uuid CHAR(36) NOT NULL REFERENCES ciphers (uuid), | 
				
			||||
 | 
					  folder_uuid CHAR(36) NOT NULL REFERENCES folders (uuid), | 
				
			||||
 | 
					  PRIMARY KEY (cipher_uuid, folder_uuid) | 
				
			||||
 | 
					); | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					CREATE TABLE ciphers_collections ( | 
				
			||||
 | 
					  cipher_uuid       CHAR(36) NOT NULL REFERENCES ciphers (uuid), | 
				
			||||
 | 
					  collection_uuid CHAR(36) NOT NULL REFERENCES collections (uuid), | 
				
			||||
 | 
					  PRIMARY KEY (cipher_uuid, collection_uuid) | 
				
			||||
 | 
					); | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					CREATE TABLE twofactor ( | 
				
			||||
 | 
					  uuid      CHAR(36) NOT NULL PRIMARY KEY, | 
				
			||||
 | 
					  user_uuid CHAR(36) NOT NULL REFERENCES users (uuid), | 
				
			||||
 | 
					  atype     INTEGER  NOT NULL, | 
				
			||||
 | 
					  enabled   BOOLEAN  NOT NULL, | 
				
			||||
 | 
					  data      TEXT     NOT NULL, | 
				
			||||
 | 
					  UNIQUE (user_uuid, atype) | 
				
			||||
 | 
					); | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					CREATE TABLE invitations ( | 
				
			||||
 | 
					    email   VARCHAR(255) NOT NULL PRIMARY KEY | 
				
			||||
 | 
					); | 
				
			||||
@ -0,0 +1,26 @@ | 
				
			|||||
 | 
					ALTER TABLE attachments ALTER COLUMN id TYPE CHAR(36); | 
				
			||||
 | 
					ALTER TABLE attachments ALTER COLUMN cipher_uuid TYPE CHAR(36); | 
				
			||||
 | 
					ALTER TABLE users ALTER COLUMN uuid TYPE CHAR(36); | 
				
			||||
 | 
					ALTER TABLE users ALTER COLUMN email TYPE VARCHAR(255); | 
				
			||||
 | 
					ALTER TABLE devices ALTER COLUMN uuid TYPE CHAR(36); | 
				
			||||
 | 
					ALTER TABLE devices ALTER COLUMN user_uuid TYPE CHAR(36); | 
				
			||||
 | 
					ALTER TABLE organizations ALTER COLUMN uuid TYPE CHAR(40); | 
				
			||||
 | 
					ALTER TABLE ciphers ALTER COLUMN uuid TYPE CHAR(36); | 
				
			||||
 | 
					ALTER TABLE ciphers ALTER COLUMN user_uuid TYPE CHAR(36); | 
				
			||||
 | 
					ALTER TABLE ciphers ALTER COLUMN organization_uuid TYPE CHAR(36); | 
				
			||||
 | 
					ALTER TABLE folders ALTER COLUMN uuid TYPE CHAR(36); | 
				
			||||
 | 
					ALTER TABLE folders ALTER COLUMN user_uuid TYPE CHAR(36); | 
				
			||||
 | 
					ALTER TABLE collections ALTER COLUMN uuid TYPE CHAR(40); | 
				
			||||
 | 
					ALTER TABLE collections ALTER COLUMN org_uuid TYPE CHAR(40); | 
				
			||||
 | 
					ALTER TABLE users_collections ALTER COLUMN user_uuid TYPE CHAR(36); | 
				
			||||
 | 
					ALTER TABLE users_collections ALTER COLUMN collection_uuid TYPE CHAR(36); | 
				
			||||
 | 
					ALTER TABLE users_organizations ALTER COLUMN uuid TYPE CHAR(36); | 
				
			||||
 | 
					ALTER TABLE users_organizations ALTER COLUMN user_uuid TYPE CHAR(36); | 
				
			||||
 | 
					ALTER TABLE users_organizations ALTER COLUMN org_uuid TYPE CHAR(36); | 
				
			||||
 | 
					ALTER TABLE folders_ciphers ALTER COLUMN cipher_uuid TYPE CHAR(36); | 
				
			||||
 | 
					ALTER TABLE folders_ciphers ALTER COLUMN folder_uuid TYPE CHAR(36); | 
				
			||||
 | 
					ALTER TABLE ciphers_collections ALTER COLUMN cipher_uuid TYPE CHAR(36); | 
				
			||||
 | 
					ALTER TABLE ciphers_collections ALTER COLUMN collection_uuid TYPE CHAR(36); | 
				
			||||
 | 
					ALTER TABLE twofactor ALTER COLUMN uuid TYPE CHAR(36); | 
				
			||||
 | 
					ALTER TABLE twofactor ALTER COLUMN user_uuid TYPE CHAR(36); | 
				
			||||
 | 
					ALTER TABLE invitations ALTER COLUMN email TYPE VARCHAR(255); | 
				
			||||
@ -0,0 +1,27 @@ | 
				
			|||||
 | 
					-- Switch from CHAR() types to VARCHAR() types to avoid padding issues. | 
				
			||||
 | 
					ALTER TABLE attachments ALTER COLUMN id TYPE TEXT; | 
				
			||||
 | 
					ALTER TABLE attachments ALTER COLUMN cipher_uuid TYPE VARCHAR(40); | 
				
			||||
 | 
					ALTER TABLE users ALTER COLUMN uuid TYPE VARCHAR(40); | 
				
			||||
 | 
					ALTER TABLE users ALTER COLUMN email TYPE TEXT; | 
				
			||||
 | 
					ALTER TABLE devices ALTER COLUMN uuid TYPE VARCHAR(40); | 
				
			||||
 | 
					ALTER TABLE devices ALTER COLUMN user_uuid TYPE VARCHAR(40); | 
				
			||||
 | 
					ALTER TABLE organizations ALTER COLUMN uuid TYPE VARCHAR(40); | 
				
			||||
 | 
					ALTER TABLE ciphers ALTER COLUMN uuid TYPE VARCHAR(40); | 
				
			||||
 | 
					ALTER TABLE ciphers ALTER COLUMN user_uuid TYPE VARCHAR(40); | 
				
			||||
 | 
					ALTER TABLE ciphers ALTER COLUMN organization_uuid TYPE VARCHAR(40); | 
				
			||||
 | 
					ALTER TABLE folders ALTER COLUMN uuid TYPE VARCHAR(40); | 
				
			||||
 | 
					ALTER TABLE folders ALTER COLUMN user_uuid TYPE VARCHAR(40); | 
				
			||||
 | 
					ALTER TABLE collections ALTER COLUMN uuid TYPE VARCHAR(40); | 
				
			||||
 | 
					ALTER TABLE collections ALTER COLUMN org_uuid TYPE VARCHAR(40); | 
				
			||||
 | 
					ALTER TABLE users_collections ALTER COLUMN user_uuid TYPE VARCHAR(40); | 
				
			||||
 | 
					ALTER TABLE users_collections ALTER COLUMN collection_uuid TYPE VARCHAR(40); | 
				
			||||
 | 
					ALTER TABLE users_organizations ALTER COLUMN uuid TYPE VARCHAR(40); | 
				
			||||
 | 
					ALTER TABLE users_organizations ALTER COLUMN user_uuid TYPE VARCHAR(40); | 
				
			||||
 | 
					ALTER TABLE users_organizations ALTER COLUMN org_uuid TYPE VARCHAR(40); | 
				
			||||
 | 
					ALTER TABLE folders_ciphers ALTER COLUMN cipher_uuid TYPE VARCHAR(40); | 
				
			||||
 | 
					ALTER TABLE folders_ciphers ALTER COLUMN folder_uuid TYPE VARCHAR(40); | 
				
			||||
 | 
					ALTER TABLE ciphers_collections ALTER COLUMN cipher_uuid TYPE VARCHAR(40); | 
				
			||||
 | 
					ALTER TABLE ciphers_collections ALTER COLUMN collection_uuid TYPE VARCHAR(40); | 
				
			||||
 | 
					ALTER TABLE twofactor ALTER COLUMN uuid TYPE VARCHAR(40); | 
				
			||||
 | 
					ALTER TABLE twofactor ALTER COLUMN user_uuid TYPE VARCHAR(40); | 
				
			||||
 | 
					ALTER TABLE invitations ALTER COLUMN email TYPE TEXT; | 
				
			||||
@ -0,0 +1 @@ | 
				
			|||||
 | 
					ALTER TABLE twofactor ADD COLUMN last_used INTEGER NOT NULL DEFAULT 0; | 
				
			||||
@ -0,0 +1 @@ | 
				
			|||||
 | 
					ALTER TABLE twofactor ADD COLUMN last_used INTEGER NOT NULL DEFAULT 0; | 
				
			||||
@ -1 +1 @@ | 
				
			|||||
nightly-2019-08-27 | 
					nightly-2019-10-14 | 
				
			||||
 | 
				
			|||||
@ -0,0 +1,173 @@ | 
				
			|||||
 | 
					table! { | 
				
			||||
 | 
					    attachments (id) { | 
				
			||||
 | 
					        id -> Text, | 
				
			||||
 | 
					        cipher_uuid -> Text, | 
				
			||||
 | 
					        file_name -> Text, | 
				
			||||
 | 
					        file_size -> Integer, | 
				
			||||
 | 
					        akey -> Nullable<Text>, | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					table! { | 
				
			||||
 | 
					    ciphers (uuid) { | 
				
			||||
 | 
					        uuid -> Text, | 
				
			||||
 | 
					        created_at -> Timestamp, | 
				
			||||
 | 
					        updated_at -> Timestamp, | 
				
			||||
 | 
					        user_uuid -> Nullable<Text>, | 
				
			||||
 | 
					        organization_uuid -> Nullable<Text>, | 
				
			||||
 | 
					        atype -> Integer, | 
				
			||||
 | 
					        name -> Text, | 
				
			||||
 | 
					        notes -> Nullable<Text>, | 
				
			||||
 | 
					        fields -> Nullable<Text>, | 
				
			||||
 | 
					        data -> Text, | 
				
			||||
 | 
					        favorite -> Bool, | 
				
			||||
 | 
					        password_history -> Nullable<Text>, | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					table! { | 
				
			||||
 | 
					    ciphers_collections (cipher_uuid, collection_uuid) { | 
				
			||||
 | 
					        cipher_uuid -> Text, | 
				
			||||
 | 
					        collection_uuid -> Text, | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					table! { | 
				
			||||
 | 
					    collections (uuid) { | 
				
			||||
 | 
					        uuid -> Text, | 
				
			||||
 | 
					        org_uuid -> Text, | 
				
			||||
 | 
					        name -> Text, | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					table! { | 
				
			||||
 | 
					    devices (uuid) { | 
				
			||||
 | 
					        uuid -> Text, | 
				
			||||
 | 
					        created_at -> Timestamp, | 
				
			||||
 | 
					        updated_at -> Timestamp, | 
				
			||||
 | 
					        user_uuid -> Text, | 
				
			||||
 | 
					        name -> Text, | 
				
			||||
 | 
					        atype -> Integer, | 
				
			||||
 | 
					        push_token -> Nullable<Text>, | 
				
			||||
 | 
					        refresh_token -> Text, | 
				
			||||
 | 
					        twofactor_remember -> Nullable<Text>, | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					table! { | 
				
			||||
 | 
					    folders (uuid) { | 
				
			||||
 | 
					        uuid -> Text, | 
				
			||||
 | 
					        created_at -> Timestamp, | 
				
			||||
 | 
					        updated_at -> Timestamp, | 
				
			||||
 | 
					        user_uuid -> Text, | 
				
			||||
 | 
					        name -> Text, | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					table! { | 
				
			||||
 | 
					    folders_ciphers (cipher_uuid, folder_uuid) { | 
				
			||||
 | 
					        cipher_uuid -> Text, | 
				
			||||
 | 
					        folder_uuid -> Text, | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					table! { | 
				
			||||
 | 
					    invitations (email) { | 
				
			||||
 | 
					        email -> Text, | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					table! { | 
				
			||||
 | 
					    organizations (uuid) { | 
				
			||||
 | 
					        uuid -> Text, | 
				
			||||
 | 
					        name -> Text, | 
				
			||||
 | 
					        billing_email -> Text, | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					table! { | 
				
			||||
 | 
					    twofactor (uuid) { | 
				
			||||
 | 
					        uuid -> Text, | 
				
			||||
 | 
					        user_uuid -> Text, | 
				
			||||
 | 
					        atype -> Integer, | 
				
			||||
 | 
					        enabled -> Bool, | 
				
			||||
 | 
					        data -> Text, | 
				
			||||
 | 
					        last_used -> Integer, | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					table! { | 
				
			||||
 | 
					    users (uuid) { | 
				
			||||
 | 
					        uuid -> Text, | 
				
			||||
 | 
					        created_at -> Timestamp, | 
				
			||||
 | 
					        updated_at -> Timestamp, | 
				
			||||
 | 
					        email -> Text, | 
				
			||||
 | 
					        name -> Text, | 
				
			||||
 | 
					        password_hash -> Binary, | 
				
			||||
 | 
					        salt -> Binary, | 
				
			||||
 | 
					        password_iterations -> Integer, | 
				
			||||
 | 
					        password_hint -> Nullable<Text>, | 
				
			||||
 | 
					        akey -> Text, | 
				
			||||
 | 
					        private_key -> Nullable<Text>, | 
				
			||||
 | 
					        public_key -> Nullable<Text>, | 
				
			||||
 | 
					        totp_secret -> Nullable<Text>, | 
				
			||||
 | 
					        totp_recover -> Nullable<Text>, | 
				
			||||
 | 
					        security_stamp -> Text, | 
				
			||||
 | 
					        equivalent_domains -> Text, | 
				
			||||
 | 
					        excluded_globals -> Text, | 
				
			||||
 | 
					        client_kdf_type -> Integer, | 
				
			||||
 | 
					        client_kdf_iter -> Integer, | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					table! { | 
				
			||||
 | 
					    users_collections (user_uuid, collection_uuid) { | 
				
			||||
 | 
					        user_uuid -> Text, | 
				
			||||
 | 
					        collection_uuid -> Text, | 
				
			||||
 | 
					        read_only -> Bool, | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					table! { | 
				
			||||
 | 
					    users_organizations (uuid) { | 
				
			||||
 | 
					        uuid -> Text, | 
				
			||||
 | 
					        user_uuid -> Text, | 
				
			||||
 | 
					        org_uuid -> Text, | 
				
			||||
 | 
					        access_all -> Bool, | 
				
			||||
 | 
					        akey -> Text, | 
				
			||||
 | 
					        status -> Integer, | 
				
			||||
 | 
					        atype -> Integer, | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					joinable!(attachments -> ciphers (cipher_uuid)); | 
				
			||||
 | 
					joinable!(ciphers -> organizations (organization_uuid)); | 
				
			||||
 | 
					joinable!(ciphers -> users (user_uuid)); | 
				
			||||
 | 
					joinable!(ciphers_collections -> ciphers (cipher_uuid)); | 
				
			||||
 | 
					joinable!(ciphers_collections -> collections (collection_uuid)); | 
				
			||||
 | 
					joinable!(collections -> organizations (org_uuid)); | 
				
			||||
 | 
					joinable!(devices -> users (user_uuid)); | 
				
			||||
 | 
					joinable!(folders -> users (user_uuid)); | 
				
			||||
 | 
					joinable!(folders_ciphers -> ciphers (cipher_uuid)); | 
				
			||||
 | 
					joinable!(folders_ciphers -> folders (folder_uuid)); | 
				
			||||
 | 
					joinable!(twofactor -> users (user_uuid)); | 
				
			||||
 | 
					joinable!(users_collections -> collections (collection_uuid)); | 
				
			||||
 | 
					joinable!(users_collections -> users (user_uuid)); | 
				
			||||
 | 
					joinable!(users_organizations -> organizations (org_uuid)); | 
				
			||||
 | 
					joinable!(users_organizations -> users (user_uuid)); | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					allow_tables_to_appear_in_same_query!( | 
				
			||||
 | 
					    attachments, | 
				
			||||
 | 
					    ciphers, | 
				
			||||
 | 
					    ciphers_collections, | 
				
			||||
 | 
					    collections, | 
				
			||||
 | 
					    devices, | 
				
			||||
 | 
					    folders, | 
				
			||||
 | 
					    folders_ciphers, | 
				
			||||
 | 
					    invitations, | 
				
			||||
 | 
					    organizations, | 
				
			||||
 | 
					    twofactor, | 
				
			||||
 | 
					    users, | 
				
			||||
 | 
					    users_collections, | 
				
			||||
 | 
					    users_organizations, | 
				
			||||
 | 
					); | 
				
			||||
| 
		 After Width: | Height: | Size: 9.7 KiB  | 
					Loading…
					
					
				
		Reference in new issue