浏览代码

Merge branch 'master' into admin-disable-user

Daniel García 5 年之前
父节点
当前提交
b32f4451ee

文件差异内容过多而无法显示
+ 173 - 225
Cargo.lock


+ 11 - 11
Cargo.toml

@@ -32,7 +32,7 @@ rocket = { version = "0.5.0-dev", features = ["tls"], default-features = false }
 rocket_contrib = "0.5.0-dev"
 
 # HTTP client
-reqwest = { version = "0.10.8", features = ["blocking", "json"] }
+reqwest = { version = "0.10.9", features = ["blocking", "json"] }
 
 # multipart/form-data support
 multipart = { version = "0.17.0", features = ["server"], default-features = false }
@@ -49,7 +49,7 @@ chashmap = "2.2.2"
 # A generic serialization/deserialization framework
 serde = "1.0.117"
 serde_derive = "1.0.117"
-serde_json = "1.0.59"
+serde_json = "1.0.60"
 
 # Logging
 log = "0.4.11"
@@ -64,7 +64,7 @@ libsqlite3-sys = { version = "0.18.0", features = ["bundled"], optional = true }
 
 # Crypto-related libraries
 rand = "0.7.3"
-ring = "0.16.15"
+ring = "0.16.19"
 
 # UUID generation
 uuid = { version = "0.8.1", features = ["v4"] }
@@ -72,7 +72,7 @@ uuid = { version = "0.8.1", features = ["v4"] }
 # Date and time libraries
 chrono = "0.4.19"
 chrono-tz = "0.5.3"
-time = "0.2.22"
+time = "0.2.23"
 
 # TOTP library
 oath = "0.10.2"
@@ -93,7 +93,7 @@ yubico = { version = "0.9.1", features = ["online-tokio"], default-features = fa
 dotenv = { version = "0.15.0", default-features = false }
 
 # Lazy initialization
-once_cell = "1.4.1"
+once_cell = "1.5.2"
 
 # Numerical libraries
 num-traits = "0.2.14"
@@ -120,18 +120,18 @@ percent-encoding = "2.1.0"
 idna = "0.2.0"
 
 # CLI argument parsing
-structopt = "0.3.20"
+structopt = "0.3.21"
 
 # Logging panics to logfile instead stderr only
-backtrace = "0.3.54"
+backtrace = "0.3.55"
 
 # Macro ident concatenation
-paste = "1.0.2"
+paste = "1.0.3"
 
 [patch.crates-io]
 # Use newest ring
-rocket = { git = 'https://github.com/SergioBenitez/Rocket', rev = '1010f6a2a88fac899dec0cd2f642156908038a53' }
-rocket_contrib = { git = 'https://github.com/SergioBenitez/Rocket', rev = '1010f6a2a88fac899dec0cd2f642156908038a53' }
+rocket = { git = 'https://github.com/SergioBenitez/Rocket', rev = '263e39b5b429de1913ce7e3036575a7b4d88b6d7' }
+rocket_contrib = { git = 'https://github.com/SergioBenitez/Rocket', rev = '263e39b5b429de1913ce7e3036575a7b4d88b6d7' }
 
 # For favicon extraction from main website
-data-url = { git = 'https://github.com/servo/rust-url', package="data-url", rev = '7f1bd6ce1c2fde599a757302a843a60e714c5f72' }
+data-url = { git = 'https://github.com/servo/rust-url', package="data-url", rev = '540ede02d0771824c0c80ff9f57fe8eff38b1291' }

+ 8 - 3
docker/Dockerfile.j2

@@ -1,10 +1,10 @@
 # This file was generated using a Jinja2 template.
 # Please make your changes in `Dockerfile.j2` and then `make` the individual Dockerfile's.
 
-{% set build_stage_base_image = "rust:1.46" %}
+{% set build_stage_base_image = "rust:1.48" %}
 {% if "alpine" in target_file %}
 {%   if "amd64" in target_file %}
-{%     set build_stage_base_image = "clux/muslrust:nightly-2020-10-02" %}
+{%     set build_stage_base_image = "clux/muslrust:nightly-2020-11-22" %}
 {%     set runtime_stage_base_image = "alpine:3.12" %}
 {%     set package_arch_target = "x86_64-unknown-linux-musl" %}
 {%   elif "arm32v7" in target_file %}
@@ -62,8 +62,13 @@ FROM bitwardenrs/web-vault@{{ vault_image_hash }} as vault
 FROM {{ build_stage_base_image }} as build
 
 {% if "alpine" in target_file %}
-# Alpine only works on SQlite
+{% if "amd64" in target_file -%}
+# Alpine-based AMD64 (musl) does not support mysql/mariadb during compile time.
+ARG DB=sqlite,postgresql
+{% else -%}
+# Alpine-based ARM (musl) only supports sqlite during compile time.
 ARG DB=sqlite
+{% endif %}
 {% else %}
 # Debian-based builds support multidb
 ARG DB=sqlite,mysql,postgresql

+ 1 - 1
docker/amd64/Dockerfile

@@ -18,7 +18,7 @@
 FROM bitwardenrs/web-vault@sha256:e40228f94cead5e50af6575fb39850a002dad146dab6836e5da5663e6d214303 as vault
 
 ########################## BUILD IMAGE  ##########################
-FROM rust:1.46 as build
+FROM rust:1.48 as build
 
 # Debian-based builds support multidb
 ARG DB=sqlite,mysql,postgresql

+ 3 - 3
docker/amd64/Dockerfile.alpine

@@ -18,10 +18,10 @@
 FROM bitwardenrs/web-vault@sha256:e40228f94cead5e50af6575fb39850a002dad146dab6836e5da5663e6d214303 as vault
 
 ########################## BUILD IMAGE  ##########################
-FROM clux/muslrust:nightly-2020-10-02 as build
+FROM clux/muslrust:nightly-2020-11-22 as build
 
-# Alpine only works on SQlite
-ARG DB=sqlite
+# Alpine-based AMD64 (musl) does not support mysql/mariadb during compile time.
+ARG DB=sqlite,postgresql
 
 # Build time options to avoid dpkg warnings and help with reproducible builds.
 ENV DEBIAN_FRONTEND=noninteractive LANG=C.UTF-8 TZ=UTC TERM=xterm-256color

+ 1 - 1
docker/arm32v6/Dockerfile

@@ -18,7 +18,7 @@
 FROM bitwardenrs/web-vault@sha256:e40228f94cead5e50af6575fb39850a002dad146dab6836e5da5663e6d214303 as vault
 
 ########################## BUILD IMAGE  ##########################
-FROM rust:1.46 as build
+FROM rust:1.48 as build
 
 # Debian-based builds support multidb
 ARG DB=sqlite,mysql,postgresql

+ 1 - 1
docker/arm32v7/Dockerfile

@@ -18,7 +18,7 @@
 FROM bitwardenrs/web-vault@sha256:e40228f94cead5e50af6575fb39850a002dad146dab6836e5da5663e6d214303 as vault
 
 ########################## BUILD IMAGE  ##########################
-FROM rust:1.46 as build
+FROM rust:1.48 as build
 
 # Debian-based builds support multidb
 ARG DB=sqlite,mysql,postgresql

+ 1 - 1
docker/arm32v7/Dockerfile.alpine

@@ -20,7 +20,7 @@ FROM bitwardenrs/web-vault@sha256:e40228f94cead5e50af6575fb39850a002dad146dab683
 ########################## BUILD IMAGE  ##########################
 FROM messense/rust-musl-cross:armv7-musleabihf as build
 
-# Alpine only works on SQlite
+# Alpine-based ARM (musl) only supports sqlite during compile time.
 ARG DB=sqlite
 
 # Build time options to avoid dpkg warnings and help with reproducible builds.

+ 1 - 1
docker/arm64v8/Dockerfile

@@ -18,7 +18,7 @@
 FROM bitwardenrs/web-vault@sha256:e40228f94cead5e50af6575fb39850a002dad146dab6836e5da5663e6d214303 as vault
 
 ########################## BUILD IMAGE  ##########################
-FROM rust:1.46 as build
+FROM rust:1.48 as build
 
 # Debian-based builds support multidb
 ARG DB=sqlite,mysql,postgresql

+ 1 - 1
rust-toolchain

@@ -1 +1 @@
-nightly-2020-10-14
+nightly-2020-11-22

+ 5 - 0
src/api/admin.rs

@@ -300,6 +300,11 @@ fn users_overview(_token: AdminToken, conn: DbConn) -> ApiResult<Html<String>> {
             usr["attachment_count"] = json!(Attachment::count_by_user(&u.uuid, &conn));
             usr["attachment_size"] = json!(get_display_size(Attachment::size_by_user(&u.uuid, &conn) as i32));
             usr["user_enabled"] = json!(u.enabled);
+            usr["created_at"] = json!(&u.created_at.format("%Y-%m-%d %H:%M:%S").to_string());
+            usr["last_active"] = match u.last_active(&conn) {
+                Some(timestamp) => json!(timestamp.format("%Y-%m-%d %H:%M:%S").to_string()),
+                None => json!("Never")
+            };
             usr
     }).collect();
 

+ 11 - 0
src/db/models/device.rs

@@ -178,4 +178,15 @@ impl Device {
                 .from_db()
         }}
     }
+
+    pub fn find_latest_active_by_user(user_uuid: &str, conn: &DbConn) -> Option<Self> {
+        db_run! { conn: {
+            devices::table
+                .filter(devices::user_uuid.eq(user_uuid))
+                .order(devices::updated_at.desc())
+                .first::<DeviceDb>(conn)
+                .ok()
+                .from_db()
+        }}
+    }
 }

+ 7 - 0
src/db/models/user.rs

@@ -290,6 +290,13 @@ impl User {
             users::table.load::<UserDb>(conn).expect("Error loading users").from_db()
         }}
     }
+
+    pub fn last_active(&self, conn: &DbConn) -> Option<NaiveDateTime> {
+        match Device::find_latest_active_by_user(&self.uuid, conn) {
+            Some(device) => Some(device.updated_at),
+            None => None
+        }        
+    }
 }
 
 impl Invitation {

+ 2 - 0
src/static/templates/admin/users.hbs

@@ -21,6 +21,8 @@
                             <div class="float-left">
                                 <strong>{{Name}}</strong>
                                 <span class="d-block">{{Email}}</span>
+                                <span class="d-block">Created at: {{created_at}}</span>
+                                <span class="d-block">Last active: {{last_active}}</span>
                                 <span class="d-block">
                                     {{#unless user_enabled}}
                                         <span class="badge badge-danger mr-2" title="User is disabled">Disabled</span>

部分文件因为文件数量过多而无法显示