├── .env.example ├── .gitignore ├── Cargo.lock ├── Cargo.toml ├── Diesel.toml ├── Makefile.toml ├── Rustfmt.toml ├── docker-compose.yml ├── migrations ├── .gitkeep ├── 00000000000000_diesel_initial_setup │ ├── down.sql │ └── up.sql ├── 2018-11-27-203159_create_extension_uuid_ossp │ ├── down.sql │ └── up.sql ├── 2018-11-27-203418_create_domain_email │ ├── down.sql │ └── up.sql ├── 2018-11-27-203432_create_domain_nonempty-text │ ├── down.sql │ └── up.sql ├── 2018-11-27-205316_create_schema_util │ ├── down.sql │ └── up.sql ├── 2018-11-27-205332_create_function_set_created_at │ ├── down.sql │ └── up.sql ├── 2018-11-27-205347_create_function_set_updated_at │ ├── down.sql │ └── up.sql ├── 2018-11-27-205354_create_function_keep_created_at │ ├── down.sql │ └── up.sql ├── 2018-11-27-205422_create_function_add_timestamps │ ├── down.sql │ └── up.sql ├── 2018-11-27-205538_create_function_set_updated_by │ ├── down.sql │ └── up.sql ├── 2018-11-27-205548_create_function_keep_created_by │ ├── down.sql │ └── up.sql ├── 2018-11-27-205610_create_function_add_audits │ ├── down.sql │ └── up.sql └── 2018-11-27-212202_create_table_users │ ├── down.sql │ └── up.sql └── src ├── app.rs ├── auth ├── handlers.rs ├── mod.rs └── users.rs ├── db.rs ├── error.rs ├── main.rs └── schema.rs /.env.example: -------------------------------------------------------------------------------- 1 | DATABASE_URL=postgres://admin:password@localhost:5432/rust-backend 2 | PORT=3000 3 | POSTGRES_USER=admin 4 | POSTGRES_PASSWORD=password 5 | POSTGRES_DB=rust-backend 6 | RUST_BACKTRACE=1 7 | RUST_LOG=actix_web=info 8 | TOKEN_SECRET=secret 9 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .env 2 | /target 3 | **/*.rs.bk 4 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | [[package]] 2 | name = "actix" 3 | version = "0.7.9" 4 | source = "registry+https://github.com/rust-lang/crates.io-index" 5 | dependencies = [ 6 | "actix_derive 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 7 | "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 8 | "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", 9 | "crossbeam-channel 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 10 | "failure 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 11 | "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", 12 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 13 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 14 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 15 | "parking_lot 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", 16 | "smallvec 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", 17 | "tokio 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", 18 | "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 19 | "tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 20 | "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 21 | "tokio-reactor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 22 | "tokio-signal 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", 23 | "tokio-tcp 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 24 | "tokio-timer 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 25 | "trust-dns-proto 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", 26 | "trust-dns-resolver 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", 27 | "uuid 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", 28 | ] 29 | 30 | [[package]] 31 | name = "actix-net" 32 | version = "0.2.4" 33 | source = "registry+https://github.com/rust-lang/crates.io-index" 34 | dependencies = [ 35 | "actix 0.7.9 (registry+https://github.com/rust-lang/crates.io-index)", 36 | "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", 37 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 38 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 39 | "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", 40 | "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", 41 | "num_cpus 1.9.0 (registry+https://github.com/rust-lang/crates.io-index)", 42 | "slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 43 | "tokio 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", 44 | "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 45 | "tokio-current-thread 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 46 | "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 47 | "tokio-reactor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 48 | "tokio-tcp 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 49 | "tokio-timer 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 50 | "tower-service 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 51 | "trust-dns-proto 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", 52 | "trust-dns-resolver 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", 53 | ] 54 | 55 | [[package]] 56 | name = "actix-web" 57 | version = "0.7.16" 58 | source = "registry+https://github.com/rust-lang/crates.io-index" 59 | dependencies = [ 60 | "actix 0.7.9 (registry+https://github.com/rust-lang/crates.io-index)", 61 | "actix-net 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", 62 | "askama_escape 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 63 | "base64 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", 64 | "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 65 | "brotli2 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 66 | "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", 67 | "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", 68 | "cookie 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", 69 | "encoding 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", 70 | "failure 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 71 | "flate2 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", 72 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 73 | "futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 74 | "h2 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", 75 | "http 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", 76 | "httparse 1.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 77 | "language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 78 | "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 79 | "lazycell 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 80 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 81 | "mime 0.3.12 (registry+https://github.com/rust-lang/crates.io-index)", 82 | "mime_guess 2.0.0-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)", 83 | "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", 84 | "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", 85 | "num_cpus 1.9.0 (registry+https://github.com/rust-lang/crates.io-index)", 86 | "parking_lot 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", 87 | "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 88 | "rand 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", 89 | "regex 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", 90 | "serde 1.0.82 (registry+https://github.com/rust-lang/crates.io-index)", 91 | "serde_json 1.0.33 (registry+https://github.com/rust-lang/crates.io-index)", 92 | "serde_urlencoded 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", 93 | "sha1 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", 94 | "slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 95 | "smallvec 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", 96 | "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", 97 | "tokio 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", 98 | "tokio-current-thread 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 99 | "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 100 | "tokio-reactor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 101 | "tokio-tcp 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 102 | "tokio-timer 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 103 | "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", 104 | "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 105 | ] 106 | 107 | [[package]] 108 | name = "actix_derive" 109 | version = "0.3.2" 110 | source = "registry+https://github.com/rust-lang/crates.io-index" 111 | dependencies = [ 112 | "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)", 113 | "quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)", 114 | "syn 0.15.22 (registry+https://github.com/rust-lang/crates.io-index)", 115 | ] 116 | 117 | [[package]] 118 | name = "adler32" 119 | version = "1.0.3" 120 | source = "registry+https://github.com/rust-lang/crates.io-index" 121 | 122 | [[package]] 123 | name = "aho-corasick" 124 | version = "0.6.9" 125 | source = "registry+https://github.com/rust-lang/crates.io-index" 126 | dependencies = [ 127 | "memchr 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 128 | ] 129 | 130 | [[package]] 131 | name = "antidote" 132 | version = "1.0.0" 133 | source = "registry+https://github.com/rust-lang/crates.io-index" 134 | 135 | [[package]] 136 | name = "arc-swap" 137 | version = "0.3.6" 138 | source = "registry+https://github.com/rust-lang/crates.io-index" 139 | 140 | [[package]] 141 | name = "arrayvec" 142 | version = "0.4.8" 143 | source = "registry+https://github.com/rust-lang/crates.io-index" 144 | dependencies = [ 145 | "nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", 146 | ] 147 | 148 | [[package]] 149 | name = "askama_escape" 150 | version = "0.1.0" 151 | source = "registry+https://github.com/rust-lang/crates.io-index" 152 | 153 | [[package]] 154 | name = "atty" 155 | version = "0.2.11" 156 | source = "registry+https://github.com/rust-lang/crates.io-index" 157 | dependencies = [ 158 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 159 | "termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 160 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 161 | ] 162 | 163 | [[package]] 164 | name = "backtrace" 165 | version = "0.3.9" 166 | source = "registry+https://github.com/rust-lang/crates.io-index" 167 | dependencies = [ 168 | "backtrace-sys 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)", 169 | "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 170 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 171 | "rustc-demangle 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 172 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 173 | ] 174 | 175 | [[package]] 176 | name = "backtrace-sys" 177 | version = "0.1.24" 178 | source = "registry+https://github.com/rust-lang/crates.io-index" 179 | dependencies = [ 180 | "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)", 181 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 182 | ] 183 | 184 | [[package]] 185 | name = "base64" 186 | version = "0.9.3" 187 | source = "registry+https://github.com/rust-lang/crates.io-index" 188 | dependencies = [ 189 | "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", 190 | "safemem 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 191 | ] 192 | 193 | [[package]] 194 | name = "base64" 195 | version = "0.10.0" 196 | source = "registry+https://github.com/rust-lang/crates.io-index" 197 | dependencies = [ 198 | "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", 199 | ] 200 | 201 | [[package]] 202 | name = "bcrypt" 203 | version = "0.2.1" 204 | source = "registry+https://github.com/rust-lang/crates.io-index" 205 | dependencies = [ 206 | "base64 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)", 207 | "blowfish 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 208 | "byte-tools 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 209 | "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 210 | "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", 211 | ] 212 | 213 | [[package]] 214 | name = "bitflags" 215 | version = "1.0.4" 216 | source = "registry+https://github.com/rust-lang/crates.io-index" 217 | 218 | [[package]] 219 | name = "block-cipher-trait" 220 | version = "0.5.3" 221 | source = "registry+https://github.com/rust-lang/crates.io-index" 222 | dependencies = [ 223 | "generic-array 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", 224 | ] 225 | 226 | [[package]] 227 | name = "blowfish" 228 | version = "0.3.0" 229 | source = "registry+https://github.com/rust-lang/crates.io-index" 230 | dependencies = [ 231 | "block-cipher-trait 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", 232 | "byte-tools 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 233 | "opaque-debug 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 234 | ] 235 | 236 | [[package]] 237 | name = "brotli-sys" 238 | version = "0.3.2" 239 | source = "registry+https://github.com/rust-lang/crates.io-index" 240 | dependencies = [ 241 | "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)", 242 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 243 | ] 244 | 245 | [[package]] 246 | name = "brotli2" 247 | version = "0.3.2" 248 | source = "registry+https://github.com/rust-lang/crates.io-index" 249 | dependencies = [ 250 | "brotli-sys 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 251 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 252 | ] 253 | 254 | [[package]] 255 | name = "build_const" 256 | version = "0.2.1" 257 | source = "registry+https://github.com/rust-lang/crates.io-index" 258 | 259 | [[package]] 260 | name = "byte-tools" 261 | version = "0.2.0" 262 | source = "registry+https://github.com/rust-lang/crates.io-index" 263 | 264 | [[package]] 265 | name = "byteorder" 266 | version = "1.2.7" 267 | source = "registry+https://github.com/rust-lang/crates.io-index" 268 | 269 | [[package]] 270 | name = "bytes" 271 | version = "0.4.11" 272 | source = "registry+https://github.com/rust-lang/crates.io-index" 273 | dependencies = [ 274 | "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", 275 | "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 276 | ] 277 | 278 | [[package]] 279 | name = "cc" 280 | version = "1.0.25" 281 | source = "registry+https://github.com/rust-lang/crates.io-index" 282 | 283 | [[package]] 284 | name = "cfg-if" 285 | version = "0.1.6" 286 | source = "registry+https://github.com/rust-lang/crates.io-index" 287 | 288 | [[package]] 289 | name = "chrono" 290 | version = "0.4.6" 291 | source = "registry+https://github.com/rust-lang/crates.io-index" 292 | dependencies = [ 293 | "num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", 294 | "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", 295 | "serde 1.0.82 (registry+https://github.com/rust-lang/crates.io-index)", 296 | "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", 297 | ] 298 | 299 | [[package]] 300 | name = "cloudabi" 301 | version = "0.0.3" 302 | source = "registry+https://github.com/rust-lang/crates.io-index" 303 | dependencies = [ 304 | "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 305 | ] 306 | 307 | [[package]] 308 | name = "cookie" 309 | version = "0.11.0" 310 | source = "registry+https://github.com/rust-lang/crates.io-index" 311 | dependencies = [ 312 | "base64 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)", 313 | "ring 0.13.5 (registry+https://github.com/rust-lang/crates.io-index)", 314 | "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", 315 | "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", 316 | ] 317 | 318 | [[package]] 319 | name = "crc" 320 | version = "1.8.1" 321 | source = "registry+https://github.com/rust-lang/crates.io-index" 322 | dependencies = [ 323 | "build_const 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 324 | ] 325 | 326 | [[package]] 327 | name = "crossbeam-channel" 328 | version = "0.3.3" 329 | source = "registry+https://github.com/rust-lang/crates.io-index" 330 | dependencies = [ 331 | "crossbeam-epoch 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", 332 | "crossbeam-utils 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", 333 | "parking_lot 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", 334 | "rand 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", 335 | "smallvec 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", 336 | ] 337 | 338 | [[package]] 339 | name = "crossbeam-deque" 340 | version = "0.6.2" 341 | source = "registry+https://github.com/rust-lang/crates.io-index" 342 | dependencies = [ 343 | "crossbeam-epoch 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", 344 | "crossbeam-utils 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", 345 | ] 346 | 347 | [[package]] 348 | name = "crossbeam-epoch" 349 | version = "0.6.1" 350 | source = "registry+https://github.com/rust-lang/crates.io-index" 351 | dependencies = [ 352 | "arrayvec 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 353 | "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 354 | "crossbeam-utils 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", 355 | "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 356 | "memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 357 | "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 358 | ] 359 | 360 | [[package]] 361 | name = "crossbeam-utils" 362 | version = "0.6.1" 363 | source = "registry+https://github.com/rust-lang/crates.io-index" 364 | dependencies = [ 365 | "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 366 | ] 367 | 368 | [[package]] 369 | name = "diesel" 370 | version = "1.3.3" 371 | source = "registry+https://github.com/rust-lang/crates.io-index" 372 | dependencies = [ 373 | "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 374 | "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", 375 | "chrono 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 376 | "diesel_derives 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 377 | "pq-sys 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 378 | "r2d2 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)", 379 | "uuid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", 380 | ] 381 | 382 | [[package]] 383 | name = "diesel_derives" 384 | version = "1.3.0" 385 | source = "registry+https://github.com/rust-lang/crates.io-index" 386 | dependencies = [ 387 | "proc-macro2 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 388 | "quote 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", 389 | "syn 0.13.11 (registry+https://github.com/rust-lang/crates.io-index)", 390 | ] 391 | 392 | [[package]] 393 | name = "dotenv" 394 | version = "0.13.0" 395 | source = "registry+https://github.com/rust-lang/crates.io-index" 396 | dependencies = [ 397 | "failure 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 398 | "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 399 | "regex 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", 400 | ] 401 | 402 | [[package]] 403 | name = "dtoa" 404 | version = "0.4.3" 405 | source = "registry+https://github.com/rust-lang/crates.io-index" 406 | 407 | [[package]] 408 | name = "encoding" 409 | version = "0.2.33" 410 | source = "registry+https://github.com/rust-lang/crates.io-index" 411 | dependencies = [ 412 | "encoding-index-japanese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)", 413 | "encoding-index-korean 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)", 414 | "encoding-index-simpchinese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)", 415 | "encoding-index-singlebyte 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)", 416 | "encoding-index-tradchinese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)", 417 | ] 418 | 419 | [[package]] 420 | name = "encoding-index-japanese" 421 | version = "1.20141219.5" 422 | source = "registry+https://github.com/rust-lang/crates.io-index" 423 | dependencies = [ 424 | "encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 425 | ] 426 | 427 | [[package]] 428 | name = "encoding-index-korean" 429 | version = "1.20141219.5" 430 | source = "registry+https://github.com/rust-lang/crates.io-index" 431 | dependencies = [ 432 | "encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 433 | ] 434 | 435 | [[package]] 436 | name = "encoding-index-simpchinese" 437 | version = "1.20141219.5" 438 | source = "registry+https://github.com/rust-lang/crates.io-index" 439 | dependencies = [ 440 | "encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 441 | ] 442 | 443 | [[package]] 444 | name = "encoding-index-singlebyte" 445 | version = "1.20141219.5" 446 | source = "registry+https://github.com/rust-lang/crates.io-index" 447 | dependencies = [ 448 | "encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 449 | ] 450 | 451 | [[package]] 452 | name = "encoding-index-tradchinese" 453 | version = "1.20141219.5" 454 | source = "registry+https://github.com/rust-lang/crates.io-index" 455 | dependencies = [ 456 | "encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 457 | ] 458 | 459 | [[package]] 460 | name = "encoding_index_tests" 461 | version = "0.1.4" 462 | source = "registry+https://github.com/rust-lang/crates.io-index" 463 | 464 | [[package]] 465 | name = "env_logger" 466 | version = "0.6.0" 467 | source = "registry+https://github.com/rust-lang/crates.io-index" 468 | dependencies = [ 469 | "atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", 470 | "humantime 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 471 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 472 | "regex 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", 473 | "termcolor 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 474 | ] 475 | 476 | [[package]] 477 | name = "error-chain" 478 | version = "0.8.1" 479 | source = "registry+https://github.com/rust-lang/crates.io-index" 480 | dependencies = [ 481 | "backtrace 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", 482 | ] 483 | 484 | [[package]] 485 | name = "failure" 486 | version = "0.1.3" 487 | source = "registry+https://github.com/rust-lang/crates.io-index" 488 | dependencies = [ 489 | "backtrace 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", 490 | "failure_derive 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 491 | ] 492 | 493 | [[package]] 494 | name = "failure_derive" 495 | version = "0.1.3" 496 | source = "registry+https://github.com/rust-lang/crates.io-index" 497 | dependencies = [ 498 | "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)", 499 | "quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)", 500 | "syn 0.15.22 (registry+https://github.com/rust-lang/crates.io-index)", 501 | "synstructure 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", 502 | ] 503 | 504 | [[package]] 505 | name = "flate2" 506 | version = "1.0.5" 507 | source = "registry+https://github.com/rust-lang/crates.io-index" 508 | dependencies = [ 509 | "flate2-crc 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 510 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 511 | "miniz-sys 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", 512 | "miniz_oxide_c_api 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 513 | ] 514 | 515 | [[package]] 516 | name = "flate2-crc" 517 | version = "0.1.1" 518 | source = "registry+https://github.com/rust-lang/crates.io-index" 519 | dependencies = [ 520 | "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 521 | ] 522 | 523 | [[package]] 524 | name = "fnv" 525 | version = "1.0.6" 526 | source = "registry+https://github.com/rust-lang/crates.io-index" 527 | 528 | [[package]] 529 | name = "fuchsia-zircon" 530 | version = "0.3.3" 531 | source = "registry+https://github.com/rust-lang/crates.io-index" 532 | dependencies = [ 533 | "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 534 | "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 535 | ] 536 | 537 | [[package]] 538 | name = "fuchsia-zircon-sys" 539 | version = "0.3.3" 540 | source = "registry+https://github.com/rust-lang/crates.io-index" 541 | 542 | [[package]] 543 | name = "futures" 544 | version = "0.1.25" 545 | source = "registry+https://github.com/rust-lang/crates.io-index" 546 | 547 | [[package]] 548 | name = "futures-cpupool" 549 | version = "0.1.8" 550 | source = "registry+https://github.com/rust-lang/crates.io-index" 551 | dependencies = [ 552 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 553 | "num_cpus 1.9.0 (registry+https://github.com/rust-lang/crates.io-index)", 554 | ] 555 | 556 | [[package]] 557 | name = "generic-array" 558 | version = "0.9.0" 559 | source = "registry+https://github.com/rust-lang/crates.io-index" 560 | dependencies = [ 561 | "typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", 562 | ] 563 | 564 | [[package]] 565 | name = "h2" 566 | version = "0.1.13" 567 | source = "registry+https://github.com/rust-lang/crates.io-index" 568 | dependencies = [ 569 | "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", 570 | "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", 571 | "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", 572 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 573 | "http 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", 574 | "indexmap 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 575 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 576 | "slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 577 | "string 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 578 | "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 579 | ] 580 | 581 | [[package]] 582 | name = "hostname" 583 | version = "0.1.5" 584 | source = "registry+https://github.com/rust-lang/crates.io-index" 585 | dependencies = [ 586 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 587 | "winutil 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 588 | ] 589 | 590 | [[package]] 591 | name = "http" 592 | version = "0.1.14" 593 | source = "registry+https://github.com/rust-lang/crates.io-index" 594 | dependencies = [ 595 | "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", 596 | "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", 597 | "itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", 598 | ] 599 | 600 | [[package]] 601 | name = "httparse" 602 | version = "1.3.3" 603 | source = "registry+https://github.com/rust-lang/crates.io-index" 604 | 605 | [[package]] 606 | name = "humantime" 607 | version = "1.2.0" 608 | source = "registry+https://github.com/rust-lang/crates.io-index" 609 | dependencies = [ 610 | "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 611 | ] 612 | 613 | [[package]] 614 | name = "idna" 615 | version = "0.1.5" 616 | source = "registry+https://github.com/rust-lang/crates.io-index" 617 | dependencies = [ 618 | "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 619 | "unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 620 | "unicode-normalization 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 621 | ] 622 | 623 | [[package]] 624 | name = "indexmap" 625 | version = "1.0.2" 626 | source = "registry+https://github.com/rust-lang/crates.io-index" 627 | 628 | [[package]] 629 | name = "iovec" 630 | version = "0.1.2" 631 | source = "registry+https://github.com/rust-lang/crates.io-index" 632 | dependencies = [ 633 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 634 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 635 | ] 636 | 637 | [[package]] 638 | name = "ipconfig" 639 | version = "0.1.9" 640 | source = "registry+https://github.com/rust-lang/crates.io-index" 641 | dependencies = [ 642 | "error-chain 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", 643 | "socket2 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 644 | "widestring 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 645 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 646 | "winreg 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 647 | ] 648 | 649 | [[package]] 650 | name = "itoa" 651 | version = "0.4.3" 652 | source = "registry+https://github.com/rust-lang/crates.io-index" 653 | 654 | [[package]] 655 | name = "jsonwebtoken" 656 | version = "5.0.1" 657 | source = "registry+https://github.com/rust-lang/crates.io-index" 658 | dependencies = [ 659 | "base64 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)", 660 | "chrono 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 661 | "ring 0.13.5 (registry+https://github.com/rust-lang/crates.io-index)", 662 | "serde 1.0.82 (registry+https://github.com/rust-lang/crates.io-index)", 663 | "serde_derive 1.0.82 (registry+https://github.com/rust-lang/crates.io-index)", 664 | "serde_json 1.0.33 (registry+https://github.com/rust-lang/crates.io-index)", 665 | "untrusted 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", 666 | ] 667 | 668 | [[package]] 669 | name = "kernel32-sys" 670 | version = "0.2.2" 671 | source = "registry+https://github.com/rust-lang/crates.io-index" 672 | dependencies = [ 673 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 674 | "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 675 | ] 676 | 677 | [[package]] 678 | name = "language-tags" 679 | version = "0.2.2" 680 | source = "registry+https://github.com/rust-lang/crates.io-index" 681 | 682 | [[package]] 683 | name = "lazy_static" 684 | version = "1.2.0" 685 | source = "registry+https://github.com/rust-lang/crates.io-index" 686 | 687 | [[package]] 688 | name = "lazycell" 689 | version = "1.2.0" 690 | source = "registry+https://github.com/rust-lang/crates.io-index" 691 | 692 | [[package]] 693 | name = "libc" 694 | version = "0.2.44" 695 | source = "registry+https://github.com/rust-lang/crates.io-index" 696 | 697 | [[package]] 698 | name = "linked-hash-map" 699 | version = "0.4.2" 700 | source = "registry+https://github.com/rust-lang/crates.io-index" 701 | 702 | [[package]] 703 | name = "listenfd" 704 | version = "0.3.3" 705 | source = "registry+https://github.com/rust-lang/crates.io-index" 706 | dependencies = [ 707 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 708 | "uuid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", 709 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 710 | ] 711 | 712 | [[package]] 713 | name = "lock_api" 714 | version = "0.1.5" 715 | source = "registry+https://github.com/rust-lang/crates.io-index" 716 | dependencies = [ 717 | "owning_ref 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 718 | "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 719 | ] 720 | 721 | [[package]] 722 | name = "log" 723 | version = "0.4.6" 724 | source = "registry+https://github.com/rust-lang/crates.io-index" 725 | dependencies = [ 726 | "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 727 | ] 728 | 729 | [[package]] 730 | name = "lru-cache" 731 | version = "0.1.1" 732 | source = "registry+https://github.com/rust-lang/crates.io-index" 733 | dependencies = [ 734 | "linked-hash-map 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 735 | ] 736 | 737 | [[package]] 738 | name = "matches" 739 | version = "0.1.8" 740 | source = "registry+https://github.com/rust-lang/crates.io-index" 741 | 742 | [[package]] 743 | name = "memchr" 744 | version = "2.1.1" 745 | source = "registry+https://github.com/rust-lang/crates.io-index" 746 | dependencies = [ 747 | "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 748 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 749 | "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 750 | ] 751 | 752 | [[package]] 753 | name = "memoffset" 754 | version = "0.2.1" 755 | source = "registry+https://github.com/rust-lang/crates.io-index" 756 | 757 | [[package]] 758 | name = "mime" 759 | version = "0.3.12" 760 | source = "registry+https://github.com/rust-lang/crates.io-index" 761 | dependencies = [ 762 | "unicase 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 763 | ] 764 | 765 | [[package]] 766 | name = "mime_guess" 767 | version = "2.0.0-alpha.6" 768 | source = "registry+https://github.com/rust-lang/crates.io-index" 769 | dependencies = [ 770 | "mime 0.3.12 (registry+https://github.com/rust-lang/crates.io-index)", 771 | "phf 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)", 772 | "phf_codegen 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)", 773 | "unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 774 | ] 775 | 776 | [[package]] 777 | name = "miniz-sys" 778 | version = "0.1.11" 779 | source = "registry+https://github.com/rust-lang/crates.io-index" 780 | dependencies = [ 781 | "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)", 782 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 783 | ] 784 | 785 | [[package]] 786 | name = "miniz_oxide" 787 | version = "0.2.0" 788 | source = "registry+https://github.com/rust-lang/crates.io-index" 789 | dependencies = [ 790 | "adler32 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", 791 | ] 792 | 793 | [[package]] 794 | name = "miniz_oxide_c_api" 795 | version = "0.2.0" 796 | source = "registry+https://github.com/rust-lang/crates.io-index" 797 | dependencies = [ 798 | "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)", 799 | "crc 1.8.1 (registry+https://github.com/rust-lang/crates.io-index)", 800 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 801 | "miniz_oxide 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 802 | ] 803 | 804 | [[package]] 805 | name = "mio" 806 | version = "0.6.16" 807 | source = "registry+https://github.com/rust-lang/crates.io-index" 808 | dependencies = [ 809 | "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 810 | "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 811 | "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 812 | "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 813 | "lazycell 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 814 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 815 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 816 | "miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 817 | "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", 818 | "slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 819 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 820 | ] 821 | 822 | [[package]] 823 | name = "mio-uds" 824 | version = "0.6.7" 825 | source = "registry+https://github.com/rust-lang/crates.io-index" 826 | dependencies = [ 827 | "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 828 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 829 | "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", 830 | ] 831 | 832 | [[package]] 833 | name = "miow" 834 | version = "0.2.1" 835 | source = "registry+https://github.com/rust-lang/crates.io-index" 836 | dependencies = [ 837 | "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 838 | "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", 839 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 840 | "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 841 | ] 842 | 843 | [[package]] 844 | name = "net2" 845 | version = "0.2.33" 846 | source = "registry+https://github.com/rust-lang/crates.io-index" 847 | dependencies = [ 848 | "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 849 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 850 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 851 | ] 852 | 853 | [[package]] 854 | name = "nodrop" 855 | version = "0.1.13" 856 | source = "registry+https://github.com/rust-lang/crates.io-index" 857 | 858 | [[package]] 859 | name = "num-integer" 860 | version = "0.1.39" 861 | source = "registry+https://github.com/rust-lang/crates.io-index" 862 | dependencies = [ 863 | "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", 864 | ] 865 | 866 | [[package]] 867 | name = "num-traits" 868 | version = "0.2.6" 869 | source = "registry+https://github.com/rust-lang/crates.io-index" 870 | 871 | [[package]] 872 | name = "num_cpus" 873 | version = "1.9.0" 874 | source = "registry+https://github.com/rust-lang/crates.io-index" 875 | dependencies = [ 876 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 877 | ] 878 | 879 | [[package]] 880 | name = "opaque-debug" 881 | version = "0.1.1" 882 | source = "registry+https://github.com/rust-lang/crates.io-index" 883 | 884 | [[package]] 885 | name = "owning_ref" 886 | version = "0.4.0" 887 | source = "registry+https://github.com/rust-lang/crates.io-index" 888 | dependencies = [ 889 | "stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 890 | ] 891 | 892 | [[package]] 893 | name = "parking_lot" 894 | version = "0.6.4" 895 | source = "registry+https://github.com/rust-lang/crates.io-index" 896 | dependencies = [ 897 | "lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 898 | "parking_lot_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 899 | ] 900 | 901 | [[package]] 902 | name = "parking_lot" 903 | version = "0.7.0" 904 | source = "registry+https://github.com/rust-lang/crates.io-index" 905 | dependencies = [ 906 | "lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 907 | "parking_lot_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 908 | ] 909 | 910 | [[package]] 911 | name = "parking_lot_core" 912 | version = "0.3.1" 913 | source = "registry+https://github.com/rust-lang/crates.io-index" 914 | dependencies = [ 915 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 916 | "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", 917 | "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 918 | "smallvec 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", 919 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 920 | ] 921 | 922 | [[package]] 923 | name = "parking_lot_core" 924 | version = "0.4.0" 925 | source = "registry+https://github.com/rust-lang/crates.io-index" 926 | dependencies = [ 927 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 928 | "rand 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", 929 | "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 930 | "smallvec 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", 931 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 932 | ] 933 | 934 | [[package]] 935 | name = "percent-encoding" 936 | version = "1.0.1" 937 | source = "registry+https://github.com/rust-lang/crates.io-index" 938 | 939 | [[package]] 940 | name = "phf" 941 | version = "0.7.23" 942 | source = "registry+https://github.com/rust-lang/crates.io-index" 943 | dependencies = [ 944 | "phf_shared 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)", 945 | ] 946 | 947 | [[package]] 948 | name = "phf_codegen" 949 | version = "0.7.23" 950 | source = "registry+https://github.com/rust-lang/crates.io-index" 951 | dependencies = [ 952 | "phf_generator 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)", 953 | "phf_shared 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)", 954 | ] 955 | 956 | [[package]] 957 | name = "phf_generator" 958 | version = "0.7.23" 959 | source = "registry+https://github.com/rust-lang/crates.io-index" 960 | dependencies = [ 961 | "phf_shared 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)", 962 | "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", 963 | ] 964 | 965 | [[package]] 966 | name = "phf_shared" 967 | version = "0.7.23" 968 | source = "registry+https://github.com/rust-lang/crates.io-index" 969 | dependencies = [ 970 | "siphasher 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 971 | "unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 972 | ] 973 | 974 | [[package]] 975 | name = "pq-sys" 976 | version = "0.4.6" 977 | source = "registry+https://github.com/rust-lang/crates.io-index" 978 | dependencies = [ 979 | "vcpkg 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", 980 | ] 981 | 982 | [[package]] 983 | name = "proc-macro2" 984 | version = "0.3.8" 985 | source = "registry+https://github.com/rust-lang/crates.io-index" 986 | dependencies = [ 987 | "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 988 | ] 989 | 990 | [[package]] 991 | name = "proc-macro2" 992 | version = "0.4.24" 993 | source = "registry+https://github.com/rust-lang/crates.io-index" 994 | dependencies = [ 995 | "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 996 | ] 997 | 998 | [[package]] 999 | name = "quick-error" 1000 | version = "1.2.2" 1001 | source = "registry+https://github.com/rust-lang/crates.io-index" 1002 | 1003 | [[package]] 1004 | name = "quote" 1005 | version = "0.5.2" 1006 | source = "registry+https://github.com/rust-lang/crates.io-index" 1007 | dependencies = [ 1008 | "proc-macro2 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 1009 | ] 1010 | 1011 | [[package]] 1012 | name = "quote" 1013 | version = "0.6.10" 1014 | source = "registry+https://github.com/rust-lang/crates.io-index" 1015 | dependencies = [ 1016 | "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)", 1017 | ] 1018 | 1019 | [[package]] 1020 | name = "r2d2" 1021 | version = "0.8.3" 1022 | source = "registry+https://github.com/rust-lang/crates.io-index" 1023 | dependencies = [ 1024 | "antidote 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 1025 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 1026 | "scheduled-thread-pool 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 1027 | ] 1028 | 1029 | [[package]] 1030 | name = "rand" 1031 | version = "0.4.3" 1032 | source = "registry+https://github.com/rust-lang/crates.io-index" 1033 | dependencies = [ 1034 | "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 1035 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 1036 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 1037 | ] 1038 | 1039 | [[package]] 1040 | name = "rand" 1041 | version = "0.5.5" 1042 | source = "registry+https://github.com/rust-lang/crates.io-index" 1043 | dependencies = [ 1044 | "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", 1045 | "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 1046 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 1047 | "rand_core 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 1048 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 1049 | ] 1050 | 1051 | [[package]] 1052 | name = "rand" 1053 | version = "0.6.1" 1054 | source = "registry+https://github.com/rust-lang/crates.io-index" 1055 | dependencies = [ 1056 | "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", 1057 | "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 1058 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 1059 | "rand_chacha 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1060 | "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 1061 | "rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1062 | "rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1063 | "rand_pcg 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1064 | "rand_xorshift 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1065 | "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 1066 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 1067 | ] 1068 | 1069 | [[package]] 1070 | name = "rand_chacha" 1071 | version = "0.1.0" 1072 | source = "registry+https://github.com/rust-lang/crates.io-index" 1073 | dependencies = [ 1074 | "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 1075 | "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 1076 | ] 1077 | 1078 | [[package]] 1079 | name = "rand_core" 1080 | version = "0.2.2" 1081 | source = "registry+https://github.com/rust-lang/crates.io-index" 1082 | dependencies = [ 1083 | "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 1084 | ] 1085 | 1086 | [[package]] 1087 | name = "rand_core" 1088 | version = "0.3.0" 1089 | source = "registry+https://github.com/rust-lang/crates.io-index" 1090 | 1091 | [[package]] 1092 | name = "rand_hc" 1093 | version = "0.1.0" 1094 | source = "registry+https://github.com/rust-lang/crates.io-index" 1095 | dependencies = [ 1096 | "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 1097 | ] 1098 | 1099 | [[package]] 1100 | name = "rand_isaac" 1101 | version = "0.1.1" 1102 | source = "registry+https://github.com/rust-lang/crates.io-index" 1103 | dependencies = [ 1104 | "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 1105 | ] 1106 | 1107 | [[package]] 1108 | name = "rand_pcg" 1109 | version = "0.1.1" 1110 | source = "registry+https://github.com/rust-lang/crates.io-index" 1111 | dependencies = [ 1112 | "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 1113 | "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 1114 | ] 1115 | 1116 | [[package]] 1117 | name = "rand_xorshift" 1118 | version = "0.1.0" 1119 | source = "registry+https://github.com/rust-lang/crates.io-index" 1120 | dependencies = [ 1121 | "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 1122 | ] 1123 | 1124 | [[package]] 1125 | name = "redox_syscall" 1126 | version = "0.1.43" 1127 | source = "registry+https://github.com/rust-lang/crates.io-index" 1128 | 1129 | [[package]] 1130 | name = "redox_termios" 1131 | version = "0.1.1" 1132 | source = "registry+https://github.com/rust-lang/crates.io-index" 1133 | dependencies = [ 1134 | "redox_syscall 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)", 1135 | ] 1136 | 1137 | [[package]] 1138 | name = "regex" 1139 | version = "1.0.6" 1140 | source = "registry+https://github.com/rust-lang/crates.io-index" 1141 | dependencies = [ 1142 | "aho-corasick 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)", 1143 | "memchr 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1144 | "regex-syntax 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", 1145 | "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 1146 | "utf8-ranges 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 1147 | ] 1148 | 1149 | [[package]] 1150 | name = "regex-syntax" 1151 | version = "0.6.3" 1152 | source = "registry+https://github.com/rust-lang/crates.io-index" 1153 | dependencies = [ 1154 | "ucd-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 1155 | ] 1156 | 1157 | [[package]] 1158 | name = "resolv-conf" 1159 | version = "0.6.1" 1160 | source = "registry+https://github.com/rust-lang/crates.io-index" 1161 | dependencies = [ 1162 | "hostname 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1163 | "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 1164 | ] 1165 | 1166 | [[package]] 1167 | name = "ring" 1168 | version = "0.13.5" 1169 | source = "registry+https://github.com/rust-lang/crates.io-index" 1170 | dependencies = [ 1171 | "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)", 1172 | "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 1173 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 1174 | "untrusted 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", 1175 | ] 1176 | 1177 | [[package]] 1178 | name = "rust-backend" 1179 | version = "0.1.0" 1180 | dependencies = [ 1181 | "actix 0.7.9 (registry+https://github.com/rust-lang/crates.io-index)", 1182 | "actix-web 0.7.16 (registry+https://github.com/rust-lang/crates.io-index)", 1183 | "bcrypt 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 1184 | "chrono 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 1185 | "diesel 1.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 1186 | "dotenv 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)", 1187 | "env_logger 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", 1188 | "failure 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 1189 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1190 | "jsonwebtoken 5.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 1191 | "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 1192 | "listenfd 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 1193 | "num_cpus 1.9.0 (registry+https://github.com/rust-lang/crates.io-index)", 1194 | "r2d2 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)", 1195 | "serde 1.0.82 (registry+https://github.com/rust-lang/crates.io-index)", 1196 | "serde_derive 1.0.82 (registry+https://github.com/rust-lang/crates.io-index)", 1197 | "serde_json 1.0.33 (registry+https://github.com/rust-lang/crates.io-index)", 1198 | "uuid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", 1199 | ] 1200 | 1201 | [[package]] 1202 | name = "rustc-demangle" 1203 | version = "0.1.9" 1204 | source = "registry+https://github.com/rust-lang/crates.io-index" 1205 | 1206 | [[package]] 1207 | name = "rustc_version" 1208 | version = "0.2.3" 1209 | source = "registry+https://github.com/rust-lang/crates.io-index" 1210 | dependencies = [ 1211 | "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", 1212 | ] 1213 | 1214 | [[package]] 1215 | name = "ryu" 1216 | version = "0.2.7" 1217 | source = "registry+https://github.com/rust-lang/crates.io-index" 1218 | 1219 | [[package]] 1220 | name = "safemem" 1221 | version = "0.3.0" 1222 | source = "registry+https://github.com/rust-lang/crates.io-index" 1223 | 1224 | [[package]] 1225 | name = "scheduled-thread-pool" 1226 | version = "0.2.0" 1227 | source = "registry+https://github.com/rust-lang/crates.io-index" 1228 | dependencies = [ 1229 | "antidote 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 1230 | ] 1231 | 1232 | [[package]] 1233 | name = "scopeguard" 1234 | version = "0.3.3" 1235 | source = "registry+https://github.com/rust-lang/crates.io-index" 1236 | 1237 | [[package]] 1238 | name = "semver" 1239 | version = "0.9.0" 1240 | source = "registry+https://github.com/rust-lang/crates.io-index" 1241 | dependencies = [ 1242 | "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", 1243 | ] 1244 | 1245 | [[package]] 1246 | name = "semver-parser" 1247 | version = "0.7.0" 1248 | source = "registry+https://github.com/rust-lang/crates.io-index" 1249 | 1250 | [[package]] 1251 | name = "serde" 1252 | version = "1.0.82" 1253 | source = "registry+https://github.com/rust-lang/crates.io-index" 1254 | 1255 | [[package]] 1256 | name = "serde_derive" 1257 | version = "1.0.82" 1258 | source = "registry+https://github.com/rust-lang/crates.io-index" 1259 | dependencies = [ 1260 | "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)", 1261 | "quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)", 1262 | "syn 0.15.22 (registry+https://github.com/rust-lang/crates.io-index)", 1263 | ] 1264 | 1265 | [[package]] 1266 | name = "serde_json" 1267 | version = "1.0.33" 1268 | source = "registry+https://github.com/rust-lang/crates.io-index" 1269 | dependencies = [ 1270 | "itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", 1271 | "ryu 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", 1272 | "serde 1.0.82 (registry+https://github.com/rust-lang/crates.io-index)", 1273 | ] 1274 | 1275 | [[package]] 1276 | name = "serde_urlencoded" 1277 | version = "0.5.4" 1278 | source = "registry+https://github.com/rust-lang/crates.io-index" 1279 | dependencies = [ 1280 | "dtoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", 1281 | "itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", 1282 | "serde 1.0.82 (registry+https://github.com/rust-lang/crates.io-index)", 1283 | "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", 1284 | ] 1285 | 1286 | [[package]] 1287 | name = "sha1" 1288 | version = "0.6.0" 1289 | source = "registry+https://github.com/rust-lang/crates.io-index" 1290 | 1291 | [[package]] 1292 | name = "signal-hook" 1293 | version = "0.1.6" 1294 | source = "registry+https://github.com/rust-lang/crates.io-index" 1295 | dependencies = [ 1296 | "arc-swap 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 1297 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 1298 | ] 1299 | 1300 | [[package]] 1301 | name = "siphasher" 1302 | version = "0.2.3" 1303 | source = "registry+https://github.com/rust-lang/crates.io-index" 1304 | 1305 | [[package]] 1306 | name = "slab" 1307 | version = "0.4.1" 1308 | source = "registry+https://github.com/rust-lang/crates.io-index" 1309 | 1310 | [[package]] 1311 | name = "smallvec" 1312 | version = "0.6.6" 1313 | source = "registry+https://github.com/rust-lang/crates.io-index" 1314 | dependencies = [ 1315 | "unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 1316 | ] 1317 | 1318 | [[package]] 1319 | name = "socket2" 1320 | version = "0.3.8" 1321 | source = "registry+https://github.com/rust-lang/crates.io-index" 1322 | dependencies = [ 1323 | "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 1324 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 1325 | "redox_syscall 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)", 1326 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 1327 | ] 1328 | 1329 | [[package]] 1330 | name = "stable_deref_trait" 1331 | version = "1.1.1" 1332 | source = "registry+https://github.com/rust-lang/crates.io-index" 1333 | 1334 | [[package]] 1335 | name = "string" 1336 | version = "0.1.2" 1337 | source = "registry+https://github.com/rust-lang/crates.io-index" 1338 | 1339 | [[package]] 1340 | name = "syn" 1341 | version = "0.13.11" 1342 | source = "registry+https://github.com/rust-lang/crates.io-index" 1343 | dependencies = [ 1344 | "proc-macro2 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 1345 | "quote 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", 1346 | "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1347 | ] 1348 | 1349 | [[package]] 1350 | name = "syn" 1351 | version = "0.15.22" 1352 | source = "registry+https://github.com/rust-lang/crates.io-index" 1353 | dependencies = [ 1354 | "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)", 1355 | "quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)", 1356 | "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1357 | ] 1358 | 1359 | [[package]] 1360 | name = "synstructure" 1361 | version = "0.10.1" 1362 | source = "registry+https://github.com/rust-lang/crates.io-index" 1363 | dependencies = [ 1364 | "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)", 1365 | "quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)", 1366 | "syn 0.15.22 (registry+https://github.com/rust-lang/crates.io-index)", 1367 | "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1368 | ] 1369 | 1370 | [[package]] 1371 | name = "termcolor" 1372 | version = "1.0.4" 1373 | source = "registry+https://github.com/rust-lang/crates.io-index" 1374 | dependencies = [ 1375 | "wincolor 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 1376 | ] 1377 | 1378 | [[package]] 1379 | name = "termion" 1380 | version = "1.5.1" 1381 | source = "registry+https://github.com/rust-lang/crates.io-index" 1382 | dependencies = [ 1383 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 1384 | "redox_syscall 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)", 1385 | "redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1386 | ] 1387 | 1388 | [[package]] 1389 | name = "thread_local" 1390 | version = "0.3.6" 1391 | source = "registry+https://github.com/rust-lang/crates.io-index" 1392 | dependencies = [ 1393 | "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 1394 | ] 1395 | 1396 | [[package]] 1397 | name = "time" 1398 | version = "0.1.40" 1399 | source = "registry+https://github.com/rust-lang/crates.io-index" 1400 | dependencies = [ 1401 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 1402 | "redox_syscall 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)", 1403 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 1404 | ] 1405 | 1406 | [[package]] 1407 | name = "tokio" 1408 | version = "0.1.13" 1409 | source = "registry+https://github.com/rust-lang/crates.io-index" 1410 | dependencies = [ 1411 | "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", 1412 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1413 | "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", 1414 | "num_cpus 1.9.0 (registry+https://github.com/rust-lang/crates.io-index)", 1415 | "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1416 | "tokio-current-thread 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 1417 | "tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1418 | "tokio-fs 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 1419 | "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 1420 | "tokio-reactor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 1421 | "tokio-tcp 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 1422 | "tokio-threadpool 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 1423 | "tokio-timer 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 1424 | "tokio-udp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 1425 | "tokio-uds 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", 1426 | ] 1427 | 1428 | [[package]] 1429 | name = "tokio-codec" 1430 | version = "0.1.1" 1431 | source = "registry+https://github.com/rust-lang/crates.io-index" 1432 | dependencies = [ 1433 | "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", 1434 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1435 | "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 1436 | ] 1437 | 1438 | [[package]] 1439 | name = "tokio-current-thread" 1440 | version = "0.1.4" 1441 | source = "registry+https://github.com/rust-lang/crates.io-index" 1442 | dependencies = [ 1443 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1444 | "tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1445 | ] 1446 | 1447 | [[package]] 1448 | name = "tokio-executor" 1449 | version = "0.1.5" 1450 | source = "registry+https://github.com/rust-lang/crates.io-index" 1451 | dependencies = [ 1452 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1453 | ] 1454 | 1455 | [[package]] 1456 | name = "tokio-fs" 1457 | version = "0.1.4" 1458 | source = "registry+https://github.com/rust-lang/crates.io-index" 1459 | dependencies = [ 1460 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1461 | "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 1462 | "tokio-threadpool 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 1463 | ] 1464 | 1465 | [[package]] 1466 | name = "tokio-io" 1467 | version = "0.1.10" 1468 | source = "registry+https://github.com/rust-lang/crates.io-index" 1469 | dependencies = [ 1470 | "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", 1471 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1472 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 1473 | ] 1474 | 1475 | [[package]] 1476 | name = "tokio-reactor" 1477 | version = "0.1.7" 1478 | source = "registry+https://github.com/rust-lang/crates.io-index" 1479 | dependencies = [ 1480 | "crossbeam-utils 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", 1481 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1482 | "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 1483 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 1484 | "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", 1485 | "num_cpus 1.9.0 (registry+https://github.com/rust-lang/crates.io-index)", 1486 | "parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", 1487 | "slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 1488 | "tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1489 | "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 1490 | ] 1491 | 1492 | [[package]] 1493 | name = "tokio-signal" 1494 | version = "0.2.7" 1495 | source = "registry+https://github.com/rust-lang/crates.io-index" 1496 | dependencies = [ 1497 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1498 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 1499 | "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", 1500 | "mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)", 1501 | "signal-hook 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 1502 | "tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1503 | "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 1504 | "tokio-reactor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 1505 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 1506 | ] 1507 | 1508 | [[package]] 1509 | name = "tokio-tcp" 1510 | version = "0.1.2" 1511 | source = "registry+https://github.com/rust-lang/crates.io-index" 1512 | dependencies = [ 1513 | "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", 1514 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1515 | "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 1516 | "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", 1517 | "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 1518 | "tokio-reactor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 1519 | ] 1520 | 1521 | [[package]] 1522 | name = "tokio-threadpool" 1523 | version = "0.1.9" 1524 | source = "registry+https://github.com/rust-lang/crates.io-index" 1525 | dependencies = [ 1526 | "crossbeam-deque 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", 1527 | "crossbeam-utils 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", 1528 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1529 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 1530 | "num_cpus 1.9.0 (registry+https://github.com/rust-lang/crates.io-index)", 1531 | "rand 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", 1532 | "tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1533 | ] 1534 | 1535 | [[package]] 1536 | name = "tokio-timer" 1537 | version = "0.2.8" 1538 | source = "registry+https://github.com/rust-lang/crates.io-index" 1539 | dependencies = [ 1540 | "crossbeam-utils 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", 1541 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1542 | "slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 1543 | "tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1544 | ] 1545 | 1546 | [[package]] 1547 | name = "tokio-udp" 1548 | version = "0.1.3" 1549 | source = "registry+https://github.com/rust-lang/crates.io-index" 1550 | dependencies = [ 1551 | "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", 1552 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1553 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 1554 | "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", 1555 | "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1556 | "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 1557 | "tokio-reactor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 1558 | ] 1559 | 1560 | [[package]] 1561 | name = "tokio-uds" 1562 | version = "0.2.4" 1563 | source = "registry+https://github.com/rust-lang/crates.io-index" 1564 | dependencies = [ 1565 | "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", 1566 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1567 | "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 1568 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 1569 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 1570 | "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", 1571 | "mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)", 1572 | "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1573 | "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 1574 | "tokio-reactor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 1575 | ] 1576 | 1577 | [[package]] 1578 | name = "tower-service" 1579 | version = "0.1.0" 1580 | source = "registry+https://github.com/rust-lang/crates.io-index" 1581 | dependencies = [ 1582 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1583 | ] 1584 | 1585 | [[package]] 1586 | name = "trust-dns-proto" 1587 | version = "0.5.0" 1588 | source = "registry+https://github.com/rust-lang/crates.io-index" 1589 | dependencies = [ 1590 | "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", 1591 | "failure 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 1592 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1593 | "idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1594 | "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 1595 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 1596 | "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", 1597 | "smallvec 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", 1598 | "socket2 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 1599 | "tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1600 | "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 1601 | "tokio-reactor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 1602 | "tokio-tcp 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 1603 | "tokio-timer 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 1604 | "tokio-udp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 1605 | "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", 1606 | ] 1607 | 1608 | [[package]] 1609 | name = "trust-dns-resolver" 1610 | version = "0.10.0" 1611 | source = "registry+https://github.com/rust-lang/crates.io-index" 1612 | dependencies = [ 1613 | "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 1614 | "failure 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 1615 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1616 | "ipconfig 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 1617 | "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 1618 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 1619 | "lru-cache 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1620 | "resolv-conf 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", 1621 | "smallvec 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", 1622 | "tokio 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", 1623 | "trust-dns-proto 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", 1624 | ] 1625 | 1626 | [[package]] 1627 | name = "typenum" 1628 | version = "1.10.0" 1629 | source = "registry+https://github.com/rust-lang/crates.io-index" 1630 | 1631 | [[package]] 1632 | name = "ucd-util" 1633 | version = "0.1.3" 1634 | source = "registry+https://github.com/rust-lang/crates.io-index" 1635 | 1636 | [[package]] 1637 | name = "unicase" 1638 | version = "1.4.2" 1639 | source = "registry+https://github.com/rust-lang/crates.io-index" 1640 | dependencies = [ 1641 | "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1642 | ] 1643 | 1644 | [[package]] 1645 | name = "unicase" 1646 | version = "2.2.0" 1647 | source = "registry+https://github.com/rust-lang/crates.io-index" 1648 | dependencies = [ 1649 | "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1650 | ] 1651 | 1652 | [[package]] 1653 | name = "unicode-bidi" 1654 | version = "0.3.4" 1655 | source = "registry+https://github.com/rust-lang/crates.io-index" 1656 | dependencies = [ 1657 | "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 1658 | ] 1659 | 1660 | [[package]] 1661 | name = "unicode-normalization" 1662 | version = "0.1.7" 1663 | source = "registry+https://github.com/rust-lang/crates.io-index" 1664 | 1665 | [[package]] 1666 | name = "unicode-xid" 1667 | version = "0.1.0" 1668 | source = "registry+https://github.com/rust-lang/crates.io-index" 1669 | 1670 | [[package]] 1671 | name = "unreachable" 1672 | version = "1.0.0" 1673 | source = "registry+https://github.com/rust-lang/crates.io-index" 1674 | dependencies = [ 1675 | "void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 1676 | ] 1677 | 1678 | [[package]] 1679 | name = "untrusted" 1680 | version = "0.6.2" 1681 | source = "registry+https://github.com/rust-lang/crates.io-index" 1682 | 1683 | [[package]] 1684 | name = "url" 1685 | version = "1.7.2" 1686 | source = "registry+https://github.com/rust-lang/crates.io-index" 1687 | dependencies = [ 1688 | "encoding 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", 1689 | "idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1690 | "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 1691 | "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 1692 | ] 1693 | 1694 | [[package]] 1695 | name = "utf8-ranges" 1696 | version = "1.0.2" 1697 | source = "registry+https://github.com/rust-lang/crates.io-index" 1698 | 1699 | [[package]] 1700 | name = "uuid" 1701 | version = "0.6.5" 1702 | source = "registry+https://github.com/rust-lang/crates.io-index" 1703 | dependencies = [ 1704 | "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 1705 | "rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", 1706 | "serde 1.0.82 (registry+https://github.com/rust-lang/crates.io-index)", 1707 | ] 1708 | 1709 | [[package]] 1710 | name = "uuid" 1711 | version = "0.7.1" 1712 | source = "registry+https://github.com/rust-lang/crates.io-index" 1713 | dependencies = [ 1714 | "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", 1715 | ] 1716 | 1717 | [[package]] 1718 | name = "vcpkg" 1719 | version = "0.2.6" 1720 | source = "registry+https://github.com/rust-lang/crates.io-index" 1721 | 1722 | [[package]] 1723 | name = "version_check" 1724 | version = "0.1.5" 1725 | source = "registry+https://github.com/rust-lang/crates.io-index" 1726 | 1727 | [[package]] 1728 | name = "void" 1729 | version = "1.0.2" 1730 | source = "registry+https://github.com/rust-lang/crates.io-index" 1731 | 1732 | [[package]] 1733 | name = "widestring" 1734 | version = "0.2.2" 1735 | source = "registry+https://github.com/rust-lang/crates.io-index" 1736 | 1737 | [[package]] 1738 | name = "winapi" 1739 | version = "0.2.8" 1740 | source = "registry+https://github.com/rust-lang/crates.io-index" 1741 | 1742 | [[package]] 1743 | name = "winapi" 1744 | version = "0.3.6" 1745 | source = "registry+https://github.com/rust-lang/crates.io-index" 1746 | dependencies = [ 1747 | "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1748 | "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1749 | ] 1750 | 1751 | [[package]] 1752 | name = "winapi-build" 1753 | version = "0.1.1" 1754 | source = "registry+https://github.com/rust-lang/crates.io-index" 1755 | 1756 | [[package]] 1757 | name = "winapi-i686-pc-windows-gnu" 1758 | version = "0.4.0" 1759 | source = "registry+https://github.com/rust-lang/crates.io-index" 1760 | 1761 | [[package]] 1762 | name = "winapi-util" 1763 | version = "0.1.1" 1764 | source = "registry+https://github.com/rust-lang/crates.io-index" 1765 | dependencies = [ 1766 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 1767 | ] 1768 | 1769 | [[package]] 1770 | name = "winapi-x86_64-pc-windows-gnu" 1771 | version = "0.4.0" 1772 | source = "registry+https://github.com/rust-lang/crates.io-index" 1773 | 1774 | [[package]] 1775 | name = "wincolor" 1776 | version = "1.0.1" 1777 | source = "registry+https://github.com/rust-lang/crates.io-index" 1778 | dependencies = [ 1779 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 1780 | "winapi-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1781 | ] 1782 | 1783 | [[package]] 1784 | name = "winreg" 1785 | version = "0.5.1" 1786 | source = "registry+https://github.com/rust-lang/crates.io-index" 1787 | dependencies = [ 1788 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 1789 | ] 1790 | 1791 | [[package]] 1792 | name = "winutil" 1793 | version = "0.1.1" 1794 | source = "registry+https://github.com/rust-lang/crates.io-index" 1795 | dependencies = [ 1796 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 1797 | ] 1798 | 1799 | [[package]] 1800 | name = "ws2_32-sys" 1801 | version = "0.2.1" 1802 | source = "registry+https://github.com/rust-lang/crates.io-index" 1803 | dependencies = [ 1804 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 1805 | "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1806 | ] 1807 | 1808 | [metadata] 1809 | "checksum actix 0.7.9 (registry+https://github.com/rust-lang/crates.io-index)" = "6c616db5fa4b0c40702fb75201c2af7f8aa8f3a2e2c1dda3b0655772aa949666" 1810 | "checksum actix-net 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "c1afd4a2973f2ece17100874183be416ec73ca529be846639930ec2cd9c8b8b9" 1811 | "checksum actix-web 0.7.16 (registry+https://github.com/rust-lang/crates.io-index)" = "9c1ae55616ff06c1d011c4e7f16f443b825df72aaf1c75e97cdc43a4ab83a602" 1812 | "checksum actix_derive 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4300e9431455322ae393d43a2ba1ef96b8080573c0fc23b196219efedfb6ba69" 1813 | "checksum adler32 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7e522997b529f05601e05166c07ed17789691f562762c7f3b987263d2dedee5c" 1814 | "checksum aho-corasick 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)" = "1e9a933f4e58658d7b12defcf96dc5c720f20832deebe3e0a19efd3b6aaeeb9e" 1815 | "checksum antidote 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "34fde25430d87a9388dadbe6e34d7f72a462c8b43ac8d309b42b0a8505d7e2a5" 1816 | "checksum arc-swap 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "5c5ed110e2537bdd3f5b9091707a8a5556a72ac49bbd7302ae0b28fdccb3246c" 1817 | "checksum arrayvec 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "f405cc4c21cd8b784f6c8fc2adf9bc00f59558f0049b5ec21517f875963040cc" 1818 | "checksum askama_escape 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "719b48039ffac1564f67d70162109ba9341125cee0096a540e478355b3c724a7" 1819 | "checksum atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "9a7d5b8723950951411ee34d271d99dddcc2035a16ab25310ea2c8cfd4369652" 1820 | "checksum backtrace 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "89a47830402e9981c5c41223151efcced65a0510c13097c769cede7efb34782a" 1821 | "checksum backtrace-sys 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)" = "c66d56ac8dabd07f6aacdaf633f4b8262f5b3601a810a0dcddffd5c22c69daa0" 1822 | "checksum base64 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "621fc7ecb8008f86d7fb9b95356cd692ce9514b80a86d85b397f32a22da7b9e2" 1823 | "checksum base64 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)" = "489d6c0ed21b11d038c31b6ceccca973e65d73ba3bd8ecb9a2babf5546164643" 1824 | "checksum bcrypt 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9ed2ad250bf378af5c54614c5e2f9ed1a465d73ac198905cc555492ad899a37c" 1825 | "checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12" 1826 | "checksum block-cipher-trait 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "370424437b9459f3dfd68428ed9376ddfe03d8b70ede29cc533b3557df186ab4" 1827 | "checksum blowfish 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "95ede07672d9f4144c578439aa352604ec5c67a80c940fe8d382ddbeeeb3c6d8" 1828 | "checksum brotli-sys 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4445dea95f4c2b41cde57cc9fee236ae4dbae88d8fcbdb4750fc1bb5d86aaecd" 1829 | "checksum brotli2 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0cb036c3eade309815c15ddbacec5b22c4d1f3983a774ab2eac2e3e9ea85568e" 1830 | "checksum build_const 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "39092a32794787acd8525ee150305ff051b0aa6cc2abaf193924f5ab05425f39" 1831 | "checksum byte-tools 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "560c32574a12a89ecd91f5e742165893f86e3ab98d21f8ea548658eb9eef5f40" 1832 | "checksum byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "94f88df23a25417badc922ab0f5716cc1330e87f71ddd9203b3a3ccd9cedf75d" 1833 | "checksum bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)" = "40ade3d27603c2cb345eb0912aec461a6dec7e06a4ae48589904e808335c7afa" 1834 | "checksum cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)" = "f159dfd43363c4d08055a07703eb7a3406b0dac4d0584d96965a3262db3c9d16" 1835 | "checksum cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "082bb9b28e00d3c9d39cc03e64ce4cea0f1bb9b3fde493f0cbc008472d22bdf4" 1836 | "checksum chrono 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "45912881121cb26fad7c38c17ba7daa18764771836b34fab7d3fbd93ed633878" 1837 | "checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" 1838 | "checksum cookie 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1465f8134efa296b4c19db34d909637cb2bf0f7aaf21299e23e18fa29ac557cf" 1839 | "checksum crc 1.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d663548de7f5cca343f1e0a48d14dcfb0e9eb4e079ec58883b7251539fa10aeb" 1840 | "checksum crossbeam-channel 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8b7d034925ce9668a9a19539a82a2ae75660fa65c1a3a5ddbfce333aafcceb55" 1841 | "checksum crossbeam-deque 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4fe1b6f945f824c7a25afe44f62e25d714c0cc523f8e99d8db5cd1026e1269d3" 1842 | "checksum crossbeam-epoch 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2449aaa4ec7ef96e5fb24db16024b935df718e9ae1cec0a1e68feeca2efca7b8" 1843 | "checksum crossbeam-utils 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c55913cc2799171a550e307918c0a360e8c16004820291bf3b638969b4a01816" 1844 | "checksum diesel 1.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "164080ac16a4d1d80a50f0a623e4ddef41cb2779eee85bcc76907d340dfc98cc" 1845 | "checksum diesel_derives 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "03bcaf77491f53e400d5ee3bdd57142ea4e1c47fe9217b3361ff9a76ca0e3d37" 1846 | "checksum dotenv 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c0d0a1279c96732bc6800ce6337b6a614697b0e74ae058dc03c62ebeb78b4d86" 1847 | "checksum dtoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6d301140eb411af13d3115f9a562c85cc6b541ade9dfa314132244aaee7489dd" 1848 | "checksum encoding 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "6b0d943856b990d12d3b55b359144ff341533e516d94098b1d3fc1ac666d36ec" 1849 | "checksum encoding-index-japanese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "04e8b2ff42e9a05335dbf8b5c6f7567e5591d0d916ccef4e0b1710d32a0d0c91" 1850 | "checksum encoding-index-korean 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "4dc33fb8e6bcba213fe2f14275f0963fd16f0a02c878e3095ecfdf5bee529d81" 1851 | "checksum encoding-index-simpchinese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "d87a7194909b9118fc707194baa434a4e3b0fb6a5a757c73c3adb07aa25031f7" 1852 | "checksum encoding-index-singlebyte 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "3351d5acffb224af9ca265f435b859c7c01537c0849754d3db3fdf2bfe2ae84a" 1853 | "checksum encoding-index-tradchinese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "fd0e20d5688ce3cab59eb3ef3a2083a5c77bf496cb798dc6fcdb75f323890c18" 1854 | "checksum encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "a246d82be1c9d791c5dfde9a2bd045fc3cbba3fa2b11ad558f27d01712f00569" 1855 | "checksum env_logger 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "afb070faf94c85d17d50ca44f6ad076bce18ae92f0037d350947240a36e9d42e" 1856 | "checksum error-chain 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6930e04918388a9a2e41d518c25cf679ccafe26733fb4127dbf21993f2575d46" 1857 | "checksum failure 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6dd377bcc1b1b7ce911967e3ec24fa19c3224394ec05b54aa7b083d498341ac7" 1858 | "checksum failure_derive 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "64c2d913fe8ed3b6c6518eedf4538255b989945c14c2a7d5cbff62a5e2120596" 1859 | "checksum flate2 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "96971e4fc2737f211ec8236fe16ac67695838ca3e25567c07b4f837d1f8f829c" 1860 | "checksum flate2-crc 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8a792245eaed7747984647ce20582507985d69ccfacdddcb60bd5f451f21cbc5" 1861 | "checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" 1862 | "checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" 1863 | "checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" 1864 | "checksum futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)" = "49e7653e374fe0d0c12de4250f0bdb60680b8c80eed558c5c7538eec9c89e21b" 1865 | "checksum futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "ab90cde24b3319636588d0c35fe03b1333857621051837ed769faefb4c2162e4" 1866 | "checksum generic-array 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ef25c5683767570c2bbd7deba372926a55eaae9982d7726ee2a1050239d45b9d" 1867 | "checksum h2 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "7dd33bafe2e6370e6c8eb0cf1b8c5f93390b90acde7e9b03723f166b28b648ed" 1868 | "checksum hostname 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "21ceb46a83a85e824ef93669c8b390009623863b5c195d1ba747292c0c72f94e" 1869 | "checksum http 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "02096a6d2c55e63f7fcb800690e4f889a25f6ec342e3adb4594e293b625215ab" 1870 | "checksum httparse 1.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e8734b0cfd3bc3e101ec59100e101c2eecd19282202e87808b3037b442777a83" 1871 | "checksum humantime 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3ca7e5f2e110db35f93b837c81797f3714500b81d517bf20c431b16d3ca4f114" 1872 | "checksum idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" 1873 | "checksum indexmap 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7e81a7c05f79578dbc15793d8b619db9ba32b4577003ef3af1a91c416798c58d" 1874 | "checksum iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dbe6e417e7d0975db6512b90796e8ce223145ac4e33c377e4a42882a0e88bb08" 1875 | "checksum ipconfig 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "08f7eadeaf4b52700de180d147c4805f199854600b36faa963d91114827b2ffc" 1876 | "checksum itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1306f3464951f30e30d12373d31c79fbd52d236e5e896fd92f96ec7babbbe60b" 1877 | "checksum jsonwebtoken 5.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8d438ea707d465c230305963b67f8357a1d56fcfad9434797d7cb1c46c2e41df" 1878 | "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" 1879 | "checksum language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a91d884b6667cd606bb5a69aa0c99ba811a115fc68915e7056ec08a46e93199a" 1880 | "checksum lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a374c89b9db55895453a74c1e38861d9deec0b01b405a82516e9d5de4820dea1" 1881 | "checksum lazycell 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ddba4c30a78328befecec92fc94970e53b3ae385827d28620f0f5bb2493081e0" 1882 | "checksum libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)" = "10923947f84a519a45c8fefb7dd1b3e8c08747993381adee176d7a82b4195311" 1883 | "checksum linked-hash-map 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7860ec297f7008ff7a1e3382d7f7e1dcd69efc94751a2284bafc3d013c2aa939" 1884 | "checksum listenfd 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "492158e732f2e2de81c592f0a2427e57e12cd3d59877378fe7af624b6bbe0ca1" 1885 | "checksum lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "62ebf1391f6acad60e5c8b43706dde4582df75c06698ab44511d15016bc2442c" 1886 | "checksum log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c84ec4b527950aa83a329754b01dbe3f58361d1c5efacd1f6d68c494d08a17c6" 1887 | "checksum lru-cache 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4d06ff7ff06f729ce5f4e227876cb88d10bc59cd4ae1e09fbb2bde15c850dc21" 1888 | "checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" 1889 | "checksum memchr 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0a3eb002f0535929f1199681417029ebea04aadc0c7a4224b46be99c7f5d6a16" 1890 | "checksum memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0f9dc261e2b62d7a622bf416ea3c5245cdd5d9a7fcc428c0d06804dfce1775b3" 1891 | "checksum mime 0.3.12 (registry+https://github.com/rust-lang/crates.io-index)" = "0a907b83e7b9e987032439a387e187119cddafc92d5c2aaeb1d92580a793f630" 1892 | "checksum mime_guess 2.0.0-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)" = "30de2e4613efcba1ec63d8133f344076952090c122992a903359be5a4f99c3ed" 1893 | "checksum miniz-sys 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "0300eafb20369952951699b68243ab4334f4b10a88f411c221d444b36c40e649" 1894 | "checksum miniz_oxide 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5ad30a47319c16cde58d0314f5d98202a80c9083b5f61178457403dfb14e509c" 1895 | "checksum miniz_oxide_c_api 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "28edaef377517fd9fe3e085c37d892ce7acd1fbeab9239c5a36eec352d8a8b7e" 1896 | "checksum mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)" = "71646331f2619b1026cc302f87a2b8b648d5c6dd6937846a16cc8ce0f347f432" 1897 | "checksum mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)" = "966257a94e196b11bb43aca423754d87429960a768de9414f3691d6957abf125" 1898 | "checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" 1899 | "checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" 1900 | "checksum nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "2f9667ddcc6cc8a43afc9b7917599d7216aa09c463919ea32c59ed6cac8bc945" 1901 | "checksum num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "e83d528d2677f0518c570baf2b7abdcf0cd2d248860b68507bdcb3e91d4c0cea" 1902 | "checksum num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0b3a5d7cc97d6d30d8b9bc8fa19bf45349ffe46241e8816f50f62f6d6aaabee1" 1903 | "checksum num_cpus 1.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5a69d464bdc213aaaff628444e99578ede64e9c854025aa43b9796530afa9238" 1904 | "checksum opaque-debug 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d620c9c26834b34f039489ac0dfdb12c7ac15ccaf818350a64c9b5334a452ad7" 1905 | "checksum owning_ref 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "49a4b8ea2179e6a2e27411d3bca09ca6dd630821cf6894c6c7c8467a8ee7ef13" 1906 | "checksum parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "f0802bff09003b291ba756dc7e79313e51cc31667e94afbe847def490424cde5" 1907 | "checksum parking_lot 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9723236a9525c757d9725b993511e3fc941e33f27751942232f0058298297edf" 1908 | "checksum parking_lot_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ad7f7e6ebdc79edff6fdcb87a55b620174f7a989e3eb31b65231f4af57f00b8c" 1909 | "checksum parking_lot_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "94c8c7923936b28d546dfd14d4472eaf34c99b14e1c973a32b3e6d4eb04298c9" 1910 | "checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" 1911 | "checksum phf 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)" = "cec29da322b242f4c3098852c77a0ca261c9c01b806cae85a5572a1eb94db9a6" 1912 | "checksum phf_codegen 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)" = "7d187f00cd98d5afbcd8898f6cf181743a449162aeb329dcd2f3849009e605ad" 1913 | "checksum phf_generator 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)" = "03dc191feb9b08b0dc1330d6549b795b9d81aec19efe6b4a45aec8d4caee0c4b" 1914 | "checksum phf_shared 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)" = "b539898d22d4273ded07f64a05737649dc69095d92cb87c7097ec68e3f150b93" 1915 | "checksum pq-sys 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "6ac25eee5a0582f45a67e837e350d784e7003bd29a5f460796772061ca49ffda" 1916 | "checksum proc-macro2 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "1b06e2f335f48d24442b35a19df506a835fb3547bc3c06ef27340da9acf5cae7" 1917 | "checksum proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)" = "77619697826f31a02ae974457af0b29b723e5619e113e9397b8b82c6bd253f09" 1918 | "checksum quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9274b940887ce9addde99c4eee6b5c44cc494b182b97e73dc8ffdcb3397fd3f0" 1919 | "checksum quote 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9949cfe66888ffe1d53e6ec9d9f3b70714083854be20fd5e271b232a017401e8" 1920 | "checksum quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)" = "53fa22a1994bd0f9372d7a816207d8a2677ad0325b073f5c5332760f0fb62b5c" 1921 | "checksum r2d2 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)" = "5d746fc8a0dab19ccea7ff73ad535854e90ddb3b4b8cdce953dd5cd0b2e7bd22" 1922 | "checksum rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8356f47b32624fef5b3301c1be97e5944ecdd595409cc5da11d05f211db6cfbd" 1923 | "checksum rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "e464cd887e869cddcae8792a4ee31d23c7edd516700695608f5b98c67ee0131c" 1924 | "checksum rand 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ae9d223d52ae411a33cf7e54ec6034ec165df296ccd23533d671a28252b6f66a" 1925 | "checksum rand_chacha 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "771b009e3a508cb67e8823dda454aaa5368c7bc1c16829fb77d3e980440dd34a" 1926 | "checksum rand_core 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1961a422c4d189dfb50ffa9320bf1f2a9bd54ecb92792fb9477f99a1045f3372" 1927 | "checksum rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0905b6b7079ec73b314d4c748701f6931eb79fd97c668caa3f1899b22b32c6db" 1928 | "checksum rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" 1929 | "checksum rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" 1930 | "checksum rand_pcg 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "086bd09a33c7044e56bb44d5bdde5a60e7f119a9e95b0775f545de759a32fe05" 1931 | "checksum rand_xorshift 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "effa3fcaa47e18db002bdde6060944b6d2f9cfd8db471c30e873448ad9187be3" 1932 | "checksum redox_syscall 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)" = "679da7508e9a6390aeaf7fbd02a800fdc64b73fe2204dd2c8ae66d22d9d5ad5d" 1933 | "checksum redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7e891cfe48e9100a70a3b6eb652fef28920c117d366339687bd5576160db0f76" 1934 | "checksum regex 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "ee84f70c8c08744ea9641a731c7fadb475bf2ecc52d7f627feb833e0b3990467" 1935 | "checksum regex-syntax 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "fbc557aac2b708fe84121caf261346cc2eed71978024337e42eb46b8a252ac6e" 1936 | "checksum resolv-conf 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c62bd95a41841efdf7fca2ae9951e64a8d8eae7e5da196d8ce489a2241491a92" 1937 | "checksum ring 0.13.5 (registry+https://github.com/rust-lang/crates.io-index)" = "2c4db68a2e35f3497146b7e4563df7d4773a2433230c5e4b448328e31740458a" 1938 | "checksum rustc-demangle 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "bcfe5b13211b4d78e5c2cadfebd7769197d95c639c35a50057eb4c05de811395" 1939 | "checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" 1940 | "checksum ryu 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "eb9e9b8cde282a9fe6a42dd4681319bfb63f121b8a8ee9439c6f4107e58a46f7" 1941 | "checksum safemem 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8dca453248a96cb0749e36ccdfe2b0b4e54a61bfef89fb97ec621eb8e0a93dd9" 1942 | "checksum scheduled-thread-pool 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1a2ff3fc5223829be817806c6441279c676e454cc7da608faf03b0ccc09d3889" 1943 | "checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" 1944 | "checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" 1945 | "checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" 1946 | "checksum serde 1.0.82 (registry+https://github.com/rust-lang/crates.io-index)" = "6fa52f19aee12441d5ad11c9a00459122bd8f98707cadf9778c540674f1935b6" 1947 | "checksum serde_derive 1.0.82 (registry+https://github.com/rust-lang/crates.io-index)" = "96a7f9496ac65a2db5929afa087b54f8fc5008dcfbe48a8874ed20049b0d6154" 1948 | "checksum serde_json 1.0.33 (registry+https://github.com/rust-lang/crates.io-index)" = "c37ccd6be3ed1fdf419ee848f7c758eb31b054d7cd3ae3600e3bae0adf569811" 1949 | "checksum serde_urlencoded 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)" = "d48f9f99cd749a2de71d29da5f948de7f2764cc5a9d7f3c97e3514d4ee6eabf2" 1950 | "checksum sha1 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d" 1951 | "checksum signal-hook 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "8941ae94fa73d0f73b422774b3a40a7195cecd88d1c090f4b37ade7dc795ab66" 1952 | "checksum siphasher 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "0b8de496cf83d4ed58b6be86c3a275b8602f6ffe98d3024a869e124147a9a3ac" 1953 | "checksum slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5f9776d6b986f77b35c6cf846c11ad986ff128fe0b2b63a3628e3755e8d3102d" 1954 | "checksum smallvec 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "622df2d454c29a4d89b30dc3b27b42d7d90d6b9e587dbf8f67652eb7514da484" 1955 | "checksum socket2 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "c4d11a52082057d87cb5caa31ad812f4504b97ab44732cd8359df2e9ff9f48e7" 1956 | "checksum stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8" 1957 | "checksum string 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "98998cced76115b1da46f63388b909d118a37ae0be0f82ad35773d4a4bc9d18d" 1958 | "checksum syn 0.13.11 (registry+https://github.com/rust-lang/crates.io-index)" = "14f9bf6292f3a61d2c716723fdb789a41bbe104168e6f496dc6497e531ea1b9b" 1959 | "checksum syn 0.15.22 (registry+https://github.com/rust-lang/crates.io-index)" = "ae8b29eb5210bc5cf63ed6149cbf9adfc82ac0be023d8735c176ee74a2db4da7" 1960 | "checksum synstructure 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "73687139bf99285483c96ac0add482c3776528beac1d97d444f6e91f203a2015" 1961 | "checksum termcolor 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "4096add70612622289f2fdcdbd5086dc81c1e2675e6ae58d6c4f62a16c6d7f2f" 1962 | "checksum termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "689a3bdfaab439fd92bc87df5c4c78417d3cbe537487274e9b0b2dce76e92096" 1963 | "checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b" 1964 | "checksum time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "d825be0eb33fda1a7e68012d51e9c7f451dc1a69391e7fdc197060bb8c56667b" 1965 | "checksum tokio 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "a7817d4c98cc5be21360b3b37d6036fe9b7aefa5b7a201b7b16ff33423822f7d" 1966 | "checksum tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5c501eceaf96f0e1793cf26beb63da3d11c738c4a943fdf3746d81d64684c39f" 1967 | "checksum tokio-current-thread 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "331c8acc267855ec06eb0c94618dcbbfea45bed2d20b77252940095273fb58f6" 1968 | "checksum tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "c117b6cf86bb730aab4834f10df96e4dd586eff2c3c27d3781348da49e255bde" 1969 | "checksum tokio-fs 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "60ae25f6b17d25116d2cba342083abe5255d3c2c79cb21ea11aa049c53bf7c75" 1970 | "checksum tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "7392fe0a70d5ce0c882c4778116c519bd5dbaa8a7c3ae3d04578b3afafdcda21" 1971 | "checksum tokio-reactor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "502b625acb4ee13cbb3b90b8ca80e0addd263ddacf6931666ef751e610b07fb5" 1972 | "checksum tokio-signal 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "dd6dc5276ea05ce379a16de90083ec80836440d5ef8a6a39545a3207373b8296" 1973 | "checksum tokio-tcp 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7ad235e9dadd126b2d47f6736f65aa1fdcd6420e66ca63f44177bc78df89f912" 1974 | "checksum tokio-threadpool 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "56c5556262383032878afad66943926a1d1f0967f17e94bd7764ceceb3b70e7f" 1975 | "checksum tokio-timer 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "4f37f0111d76cc5da132fe9bc0590b9b9cfd079bc7e75ac3846278430a299ff8" 1976 | "checksum tokio-udp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "66268575b80f4a4a710ef83d087fdfeeabdce9b74c797535fbac18a2cb906e92" 1977 | "checksum tokio-uds 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "99ce87382f6c1a24b513a72c048b2c8efe66cb5161c9061d00bee510f08dc168" 1978 | "checksum tower-service 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b32f72af77f1bfe3d3d4da8516a238ebe7039b51dd8637a09841ac7f16d2c987" 1979 | "checksum trust-dns-proto 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0838272e89f1c693b4df38dc353412e389cf548ceed6f9fd1af5a8d6e0e7cf74" 1980 | "checksum trust-dns-resolver 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4e913a5df94658858e548cc95a3212797ee524e487ede091c32f27ca26e11620" 1981 | "checksum typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "612d636f949607bdf9b123b4a6f6d966dedf3ff669f7f045890d3a4a73948169" 1982 | "checksum ucd-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "535c204ee4d8434478593480b8f86ab45ec9aae0e83c568ca81abf0fd0e88f86" 1983 | "checksum unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7f4765f83163b74f957c797ad9253caf97f103fb064d3999aea9568d09fc8a33" 1984 | "checksum unicase 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9d3218ea14b4edcaccfa0df0a64a3792a2c32cc706f1b336e48867f9d3147f90" 1985 | "checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" 1986 | "checksum unicode-normalization 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "6a0180bc61fc5a987082bfa111f4cc95c4caff7f9799f3e46df09163a937aa25" 1987 | "checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" 1988 | "checksum unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56" 1989 | "checksum untrusted 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "55cd1f4b4e96b46aeb8d4855db4a7a9bd96eeeb5c6a1ab54593328761642ce2f" 1990 | "checksum url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a" 1991 | "checksum utf8-ranges 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "796f7e48bef87609f7ade7e06495a87d5cd06c7866e6a5cbfceffc558a243737" 1992 | "checksum uuid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "e1436e58182935dcd9ce0add9ea0b558e8a87befe01c1a301e6020aeb0876363" 1993 | "checksum uuid 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dab5c5526c5caa3d106653401a267fed923e7046f35895ffcb5ca42db64942e6" 1994 | "checksum vcpkg 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "def296d3eb3b12371b2c7d0e83bfe1403e4db2d7a0bba324a12b21c4ee13143d" 1995 | "checksum version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" 1996 | "checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" 1997 | "checksum widestring 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7157704c2e12e3d2189c507b7482c52820a16dfa4465ba91add92f266667cadb" 1998 | "checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" 1999 | "checksum winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "92c1eb33641e276cfa214a0522acad57be5c56b10cb348b3c5117db75f3ac4b0" 2000 | "checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" 2001 | "checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 2002 | "checksum winapi-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "afc5508759c5bf4285e61feb862b6083c8480aec864fa17a81fdec6f69b461ab" 2003 | "checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 2004 | "checksum wincolor 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "561ed901ae465d6185fa7864d63fbd5720d0ef718366c9a4dc83cf6170d7e9ba" 2005 | "checksum winreg 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a27a759395c1195c4cc5cda607ef6f8f6498f64e78f7900f5de0a127a424704a" 2006 | "checksum winutil 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7daf138b6b14196e3830a588acf1e86966c694d3e8fb026fb105b8b5dca07e6e" 2007 | "checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" 2008 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "rust-backend" 3 | version = "0.1.0" 4 | authors = ["thebearingedge "] 5 | edition = "2018" 6 | 7 | [dependencies] 8 | actix = "0.7.9" 9 | actix-web = "0.7.16" 10 | bcrypt = "0.2.1" 11 | chrono = { version = "0.4.6", features = ["serde"] } 12 | diesel = { version = "1.3.3", features = ["postgres", "uuid", "r2d2", "chrono"] } 13 | dotenv = "0.13.0" 14 | env_logger = "0.6.0" 15 | failure = "0.1.3" 16 | futures = "0.1.25" 17 | jsonwebtoken = "5.0.1" 18 | lazy_static = "1.2.0" 19 | listenfd = "0.3.3" 20 | num_cpus = "1.9.0" 21 | r2d2 = "0.8.3" 22 | serde = "1.0.82" 23 | serde_derive = "1.0.82" 24 | serde_json = "1.0.33" 25 | uuid = { version = "0.6.5", features = ["serde", "v4"] } 26 | -------------------------------------------------------------------------------- /Diesel.toml: -------------------------------------------------------------------------------- 1 | # For documentation on how to configure this file, 2 | # see diesel.rs/guides/configuring-diesel-cli 3 | 4 | [print_schema] 5 | file = "src/schema.rs" 6 | -------------------------------------------------------------------------------- /Makefile.toml: -------------------------------------------------------------------------------- 1 | [tasks.watch] 2 | script = [ 3 | "source .env; systemfd --no-pid -s http::${PORT} -- cargo watch -x run" 4 | ] 5 | 6 | [tasks.db-start] 7 | script = [ 8 | "docker-compose up -d" 9 | ] 10 | 11 | [tasks.db-stop] 12 | script = [ 13 | "docker-compose down" 14 | ] 15 | 16 | [tasks.db-make] 17 | script = [ 18 | "diesel migration generate ${@}" 19 | ] 20 | 21 | [tasks.db-up] 22 | script = [ 23 | "diesel migration run" 24 | ] 25 | 26 | [tasks.db-down] 27 | script = [ 28 | "diesel migration revert" 29 | ] 30 | 31 | [tasks.db-redo] 32 | script = [ 33 | "diesel migration redo" 34 | ] 35 | 36 | [tasks.db-reset] 37 | script = [ 38 | "diesel database reset" 39 | ] 40 | 41 | [tasks.db-shell] 42 | script = [ 43 | "source .env; psql $DATABASE_URL" 44 | ] 45 | -------------------------------------------------------------------------------- /Rustfmt.toml: -------------------------------------------------------------------------------- 1 | edition = "2018" 2 | max_width = 80 3 | type_punctuation_density = "Compressed" 4 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3.7' 2 | 3 | services: 4 | postgres: 5 | image: postgres:11.1-alpine 6 | env_file: 7 | - .env 8 | ports: 9 | - 5432:5432 10 | -------------------------------------------------------------------------------- /migrations/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/multijump/rust-backend-1/da84948dcc02a6b318cf5811c2d8a10980d2db4e/migrations/.gitkeep -------------------------------------------------------------------------------- /migrations/00000000000000_diesel_initial_setup/down.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/multijump/rust-backend-1/da84948dcc02a6b318cf5811c2d8a10980d2db4e/migrations/00000000000000_diesel_initial_setup/down.sql -------------------------------------------------------------------------------- /migrations/00000000000000_diesel_initial_setup/up.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/multijump/rust-backend-1/da84948dcc02a6b318cf5811c2d8a10980d2db4e/migrations/00000000000000_diesel_initial_setup/up.sql -------------------------------------------------------------------------------- /migrations/2018-11-27-203159_create_extension_uuid_ossp/down.sql: -------------------------------------------------------------------------------- 1 | drop extension "uuid-ossp"; 2 | -------------------------------------------------------------------------------- /migrations/2018-11-27-203159_create_extension_uuid_ossp/up.sql: -------------------------------------------------------------------------------- 1 | create extension "uuid-ossp"; 2 | -------------------------------------------------------------------------------- /migrations/2018-11-27-203418_create_domain_email/down.sql: -------------------------------------------------------------------------------- 1 | drop domain email; 2 | -------------------------------------------------------------------------------- /migrations/2018-11-27-203418_create_domain_email/up.sql: -------------------------------------------------------------------------------- 1 | create domain email as text 2 | constraint is_email 3 | check (value ~ '^[a-zA-Z0-9.!#$%&''*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$'); 4 | -------------------------------------------------------------------------------- /migrations/2018-11-27-203432_create_domain_nonempty-text/down.sql: -------------------------------------------------------------------------------- 1 | drop domain nonempty_text; 2 | -------------------------------------------------------------------------------- /migrations/2018-11-27-203432_create_domain_nonempty-text/up.sql: -------------------------------------------------------------------------------- 1 | create domain nonempty_text as text 2 | constraint is_not_empty 3 | check (value !~ '^$|^\s+$'); 4 | -------------------------------------------------------------------------------- /migrations/2018-11-27-205316_create_schema_util/down.sql: -------------------------------------------------------------------------------- 1 | drop schema util; 2 | -------------------------------------------------------------------------------- /migrations/2018-11-27-205316_create_schema_util/up.sql: -------------------------------------------------------------------------------- 1 | create schema util; 2 | -------------------------------------------------------------------------------- /migrations/2018-11-27-205332_create_function_set_created_at/down.sql: -------------------------------------------------------------------------------- 1 | drop function util.set_created_at(); 2 | -------------------------------------------------------------------------------- /migrations/2018-11-27-205332_create_function_set_created_at/up.sql: -------------------------------------------------------------------------------- 1 | create function util.set_created_at() returns trigger as $$ 2 | begin 3 | new.created_at = now(); 4 | return new; 5 | end; 6 | $$ language plpgsql; 7 | -------------------------------------------------------------------------------- /migrations/2018-11-27-205347_create_function_set_updated_at/down.sql: -------------------------------------------------------------------------------- 1 | drop function util.set_updated_at(); 2 | -------------------------------------------------------------------------------- /migrations/2018-11-27-205347_create_function_set_updated_at/up.sql: -------------------------------------------------------------------------------- 1 | create function util.set_updated_at() returns trigger as $$ 2 | begin 3 | new.updated_at = now(); 4 | return new; 5 | end; 6 | $$ language plpgsql; 7 | -------------------------------------------------------------------------------- /migrations/2018-11-27-205354_create_function_keep_created_at/down.sql: -------------------------------------------------------------------------------- 1 | drop function util.keep_created_at(); 2 | -------------------------------------------------------------------------------- /migrations/2018-11-27-205354_create_function_keep_created_at/up.sql: -------------------------------------------------------------------------------- 1 | create function util.keep_created_at() returns trigger as $$ 2 | begin 3 | new.created_at = old.created_at; 4 | return new; 5 | end; 6 | $$ language plpgsql; 7 | -------------------------------------------------------------------------------- /migrations/2018-11-27-205422_create_function_add_timestamps/down.sql: -------------------------------------------------------------------------------- 1 | drop function util.add_timestamps(table_name regclass); 2 | -------------------------------------------------------------------------------- /migrations/2018-11-27-205422_create_function_add_timestamps/up.sql: -------------------------------------------------------------------------------- 1 | create function util.add_timestamps(table_name regclass) returns void as $$ 2 | begin 3 | execute format(' 4 | alter table %I 5 | add column 6 | created_at timestamptz(6) not null, 7 | add column 8 | updated_at timestamptz(6) not null 9 | ', table_name); 10 | execute format(' 11 | create trigger set_created_at_insert 12 | before insert 13 | on %I 14 | for each row 15 | execute procedure util.set_created_at() 16 | ', table_name); 17 | execute format(' 18 | create trigger set_updated_at_insert 19 | before insert 20 | on %I 21 | for each row 22 | execute procedure util.set_updated_at() 23 | ', table_name); 24 | execute format(' 25 | create trigger keep_created_at_update 26 | before update 27 | on %I 28 | for each row 29 | execute procedure util.keep_created_at() 30 | ', table_name); 31 | execute format(' 32 | create trigger set_updated_at_update 33 | before update 34 | on %I 35 | for each row 36 | when (new *<> old and new.updated_at = old.updated_at) 37 | execute procedure util.set_updated_at() 38 | ', table_name); 39 | end; 40 | $$ language plpgsql; 41 | -------------------------------------------------------------------------------- /migrations/2018-11-27-205538_create_function_set_updated_by/down.sql: -------------------------------------------------------------------------------- 1 | drop function util.set_updated_by(); 2 | -------------------------------------------------------------------------------- /migrations/2018-11-27-205538_create_function_set_updated_by/up.sql: -------------------------------------------------------------------------------- 1 | create function util.set_updated_by() returns trigger as $$ 2 | begin 3 | new.updated_by = new.created_by; 4 | return new; 5 | end; 6 | $$ language plpgsql; 7 | -------------------------------------------------------------------------------- /migrations/2018-11-27-205548_create_function_keep_created_by/down.sql: -------------------------------------------------------------------------------- 1 | drop function util.keep_created_by(); 2 | -------------------------------------------------------------------------------- /migrations/2018-11-27-205548_create_function_keep_created_by/up.sql: -------------------------------------------------------------------------------- 1 | create function util.keep_created_by() returns trigger as $$ 2 | begin 3 | new.created_by = old.created_by; 4 | return new; 5 | end; 6 | $$ language plpgsql; 7 | -------------------------------------------------------------------------------- /migrations/2018-11-27-205610_create_function_add_audits/down.sql: -------------------------------------------------------------------------------- 1 | drop function util.add_audits(table_name regclass); 2 | -------------------------------------------------------------------------------- /migrations/2018-11-27-205610_create_function_add_audits/up.sql: -------------------------------------------------------------------------------- 1 | create function util.add_audits(table_name regclass) returns void as $$ 2 | begin 3 | execute format(' 4 | alter table %I 5 | add column 6 | created_by uuid not null 7 | references users (user_id), 8 | add column 9 | updated_by uuid not null 10 | references users (user_id) 11 | ', table_name); 12 | execute format(' 13 | create trigger set_updated_by_insert 14 | before insert 15 | on %I 16 | for each row 17 | execute procedure util.set_updated_by() 18 | ', table_name); 19 | execute format(' 20 | create trigger keep_created_by_update 21 | before update 22 | on %I 23 | for each row 24 | execute procedure util.keep_created_by() 25 | ', table_name); 26 | end; 27 | $$ language plpgsql; 28 | -------------------------------------------------------------------------------- /migrations/2018-11-27-212202_create_table_users/down.sql: -------------------------------------------------------------------------------- 1 | drop table users; 2 | -------------------------------------------------------------------------------- /migrations/2018-11-27-212202_create_table_users/up.sql: -------------------------------------------------------------------------------- 1 | create table users ( 2 | user_id uuid not null default uuid_generate_v4(), 3 | email email not null, 4 | name nonempty_text not null, 5 | password nonempty_text, 6 | primary key (user_id), 7 | unique (email) 8 | ); 9 | 10 | select util.add_timestamps('users'); 11 | -------------------------------------------------------------------------------- /src/app.rs: -------------------------------------------------------------------------------- 1 | use crate::{auth, db::DbActor, error}; 2 | use actix_web::{ 3 | self, actix::Addr, middleware::Logger, App, HttpRequest, Result, 4 | }; 5 | 6 | pub struct State { 7 | pub db: Addr, 8 | } 9 | 10 | fn not_found_handler(req: &HttpRequest) -> Result<&'static str> { 11 | let message = format!("Cannot {} {}", req.method(), req.path()); 12 | Err(error::not_found(message)) 13 | } 14 | 15 | pub fn create(state: State) -> App { 16 | App::with_state(state) 17 | .middleware(error::ErrorHandler) 18 | .middleware(Logger::default()) 19 | .scope("/auth", |scope| { 20 | scope 21 | .resource("/sign-up", |r| r.post().with(auth::sign_up)) 22 | .resource("/sign-in", |r| r.post().with(auth::sign_in)) 23 | }) 24 | .default_resource(|r| r.f(not_found_handler)) 25 | } 26 | -------------------------------------------------------------------------------- /src/auth/handlers.rs: -------------------------------------------------------------------------------- 1 | use super::users; 2 | use crate::{db::DbActor, error}; 3 | use actix_web::{ 4 | actix::{Handler, Message}, 5 | error::Result, 6 | }; 7 | 8 | impl Message for users::SignUp { 9 | type Result = Result; 10 | } 11 | 12 | impl Handler for DbActor { 13 | type Result = Result; 14 | 15 | fn handle( 16 | &mut self, 17 | payload: users::SignUp, 18 | _: &mut Self::Context, 19 | ) -> Self::Result { 20 | self.conn 21 | .get() 22 | .map_err(error::service_unavailable) 23 | .and_then(|conn| users::create(&conn, payload)) 24 | } 25 | } 26 | 27 | impl Message for users::SignIn { 28 | type Result = Result; 29 | } 30 | 31 | impl Handler for DbActor { 32 | type Result = Result; 33 | 34 | fn handle( 35 | &mut self, 36 | payload: users::SignIn, 37 | _: &mut Self::Context, 38 | ) -> Self::Result { 39 | self.conn 40 | .get() 41 | .map_err(error::service_unavailable) 42 | .and_then(|conn| users::authenticate(&conn, payload)) 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/auth/mod.rs: -------------------------------------------------------------------------------- 1 | use crate::app; 2 | use crate::error; 3 | use actix_web::{ 4 | error::Result, AsyncResponder, FutureResponse, HttpResponse, Json, State, 5 | }; 6 | use futures::future::Future; 7 | use jsonwebtoken as jwt; 8 | use std::env; 9 | 10 | mod handlers; 11 | mod users; 12 | 13 | pub fn sign_up( 14 | state: State, 15 | Json(payload): Json, 16 | ) -> FutureResponse { 17 | state 18 | .db 19 | .send(payload) 20 | .and_then(|res| match res { 21 | Ok(user) => Ok(HttpResponse::Created().json(user)), 22 | Err(err) => Ok(err.into()), 23 | }) 24 | .from_err() 25 | .responder() 26 | } 27 | 28 | #[derive(Serialize)] 29 | struct Token { 30 | pub token: String, 31 | } 32 | 33 | lazy_static! { 34 | static ref token_secret: String = 35 | env::var("TOKEN_SECRET").expect("TOKEN_SECRET not set"); 36 | } 37 | 38 | fn create_token(claims: users::Claims) -> Result { 39 | let token = 40 | jwt::encode(&jwt::Header::default(), &claims, &token_secret.as_ref()) 41 | .map_err(error::internal_server_error)?; 42 | 43 | Ok(Token { token }) 44 | } 45 | 46 | pub fn sign_in( 47 | state: State, 48 | Json(payload): Json, 49 | ) -> FutureResponse { 50 | state 51 | .db 52 | .send(payload) 53 | .and_then(|res| match res.and_then(create_token) { 54 | Ok(token) => Ok(HttpResponse::Created().json(token)), 55 | Err(err) => Ok(err.into()), 56 | }) 57 | .from_err() 58 | .responder() 59 | } 60 | -------------------------------------------------------------------------------- /src/auth/users.rs: -------------------------------------------------------------------------------- 1 | use crate::{error, schema::users}; 2 | use actix_web::error::Result; 3 | use bcrypt; 4 | use chrono::{offset::Utc, DateTime}; 5 | use diesel::{pg::PgConnection, prelude::*}; 6 | use uuid::Uuid; 7 | 8 | #[derive(Serialize, Queryable)] 9 | #[serde(rename_all = "camelCase")] 10 | pub struct CreatedUser { 11 | pub user_id: Uuid, 12 | pub name: String, 13 | pub email: String, 14 | pub created_at: DateTime, 15 | pub updated_at: DateTime, 16 | } 17 | 18 | #[derive(Insertable)] 19 | #[table_name = "users"] 20 | pub struct NewUser { 21 | pub name: String, 22 | pub email: String, 23 | pub password: String, 24 | } 25 | 26 | #[derive(Queryable)] 27 | pub struct FoundUser { 28 | pub user_id: Uuid, 29 | pub email: String, 30 | pub password: Option, 31 | } 32 | 33 | #[derive(Serialize)] 34 | #[serde(rename_all = "camelCase")] 35 | pub struct Claims { 36 | pub user_id: Uuid, 37 | pub email: String, 38 | } 39 | 40 | #[derive(Deserialize)] 41 | pub struct SignIn { 42 | pub email: String, 43 | pub password: String, 44 | } 45 | 46 | #[derive(Deserialize)] 47 | pub struct SignUp { 48 | pub name: String, 49 | pub email: String, 50 | pub password: String, 51 | } 52 | 53 | pub fn create(conn: &PgConnection, payload: SignUp) -> Result { 54 | use crate::db::functions::*; 55 | use crate::schema::users::dsl::*; 56 | 57 | let found = users 58 | .select((user_id, email, password)) 59 | .filter(lower(email).eq(&payload.email.to_lowercase())) 60 | .first::(conn) 61 | .optional() 62 | .map_err(error::internal_server_error)?; 63 | 64 | if found.is_some() { 65 | return Err(error::bad_request(format!( 66 | "Email '{}' is already in use.", 67 | payload.email 68 | ))); 69 | } 70 | 71 | let hashed_password = bcrypt::hash(&payload.password, bcrypt::DEFAULT_COST) 72 | .map_err(error::internal_server_error)?; 73 | let new_user = NewUser { 74 | name: payload.name, 75 | email: payload.email, 76 | password: hashed_password, 77 | }; 78 | 79 | diesel::insert_into(users) 80 | .values(&new_user) 81 | .returning((user_id, name, email, created_at, updated_at)) 82 | .get_result::(conn) 83 | .map_err(error::internal_server_error) 84 | } 85 | 86 | pub fn authenticate(conn: &PgConnection, payload: SignIn) -> Result { 87 | use crate::db::functions::*; 88 | use crate::schema::users::dsl::*; 89 | 90 | let found = users 91 | .select((user_id, email, password)) 92 | .filter(lower(email).eq(&payload.email.to_lowercase())) 93 | .filter(password.is_not_null()) 94 | .first::(conn) 95 | .optional() 96 | .map_err(error::internal_server_error)?; 97 | 98 | if found.is_none() { 99 | return Err(error::unauthorized("Invalid login.".into())); 100 | } 101 | 102 | let user = found.unwrap(); 103 | let unhashed = &payload.password; 104 | let hashed = &user.password.unwrap(); 105 | let is_valid = bcrypt::verify(unhashed, hashed) 106 | .map_err(error::internal_server_error)?; 107 | 108 | if !is_valid { 109 | return Err(error::unauthorized("Invalid login.".into())); 110 | } 111 | 112 | Ok(Claims { 113 | user_id: user.user_id, 114 | email: user.email, 115 | }) 116 | } 117 | -------------------------------------------------------------------------------- /src/db.rs: -------------------------------------------------------------------------------- 1 | use actix_web::actix::{Actor, Addr, SyncArbiter, SyncContext}; 2 | use diesel::{ 3 | pg::PgConnection, 4 | r2d2::{ConnectionManager, Pool}, 5 | }; 6 | use std::env; 7 | 8 | pub struct DbActor { 9 | pub conn: Pool>, 10 | } 11 | 12 | impl Actor for DbActor { 13 | type Context = SyncContext; 14 | } 15 | 16 | lazy_static! { 17 | static ref db_url: String = 18 | env::var("DATABASE_URL").expect("DATABASE_URL not set"); 19 | } 20 | 21 | pub fn get_addr() -> Addr { 22 | let db_pool = Pool::builder() 23 | .build(ConnectionManager::::new(db_url.clone())) 24 | .expect("Failed to create database connection pool."); 25 | 26 | SyncArbiter::start(num_cpus::get(), move || DbActor { 27 | conn: db_pool.clone(), 28 | }) 29 | } 30 | 31 | pub mod functions { 32 | use diesel::sql_types::Text; 33 | 34 | sql_function!(fn lower(x: Text) -> Text); 35 | } 36 | -------------------------------------------------------------------------------- /src/error.rs: -------------------------------------------------------------------------------- 1 | use actix_web::{ 2 | error::{Error, InternalError, Result}, 3 | http::StatusCode, 4 | middleware::{Middleware, Response}, 5 | HttpRequest, HttpResponse, 6 | }; 7 | use failure; 8 | 9 | #[derive(Serialize)] 10 | pub struct ErrorBody<'a> { 11 | status: u16, 12 | error: &'a str, 13 | message: &'a str, 14 | } 15 | 16 | impl<'a> ErrorBody<'a> { 17 | fn response(status: StatusCode, message: &str) -> HttpResponse { 18 | HttpResponse::build(status).json(ErrorBody { 19 | message, 20 | status: status.as_u16(), 21 | error: status.canonical_reason().unwrap(), 22 | }) 23 | } 24 | } 25 | 26 | pub fn bad_request(message: String) -> Error { 27 | let status = StatusCode::BAD_REQUEST; 28 | let response = ErrorBody::response(status, &message); 29 | 30 | InternalError::from_response(format!("{} - {}", status, message), response) 31 | .into() 32 | } 33 | 34 | pub fn unauthorized(message: String) -> Error { 35 | let status = StatusCode::UNAUTHORIZED; 36 | let response = ErrorBody::response(status, &message); 37 | 38 | InternalError::from_response(format!("{} - {}", status, message), response) 39 | .into() 40 | } 41 | 42 | pub fn internal_server_error>(err: E) -> Error { 43 | let status = StatusCode::INTERNAL_SERVER_ERROR; 44 | 45 | InternalError::new(err.into(), status).into() 46 | } 47 | 48 | pub fn service_unavailable>(err: E) -> Error { 49 | let status = StatusCode::SERVICE_UNAVAILABLE; 50 | let response = ErrorBody::response( 51 | status, 52 | "The server is currently unable to handle the request.", 53 | ); 54 | 55 | InternalError::from_response( 56 | format!("{} - {}", status, err.into()), 57 | response, 58 | ) 59 | .into() 60 | } 61 | 62 | pub fn not_found(message: String) -> Error { 63 | let status = StatusCode::NOT_FOUND; 64 | let response = ErrorBody::response(status, &message); 65 | 66 | InternalError::from_response(format!("{} - {}", status, message), response) 67 | .into() 68 | } 69 | 70 | fn bad_implementation(res: HttpResponse) -> HttpResponse { 71 | let status = res.status(); 72 | 73 | res.into_builder().json(ErrorBody { 74 | status: status.as_u16(), 75 | error: status.canonical_reason().unwrap().into(), 76 | message: "An unexpected error occurred.", 77 | }) 78 | } 79 | 80 | pub struct ErrorHandler; 81 | 82 | impl Middleware for ErrorHandler { 83 | fn response( 84 | &self, 85 | _req: &HttpRequest, 86 | res: HttpResponse, 87 | ) -> Result { 88 | match res.status() { 89 | StatusCode::INTERNAL_SERVER_ERROR => { 90 | Ok(Response::Done(bad_implementation(res))) 91 | } 92 | _ => Ok(Response::Done(res)), 93 | } 94 | } 95 | } 96 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | #![allow(proc_macro_derive_resolution_fallback)] 2 | #[macro_use] 3 | extern crate diesel; 4 | #[macro_use] 5 | extern crate lazy_static; 6 | #[macro_use] 7 | extern crate serde_derive; 8 | 9 | use actix_web::{actix::System, server::HttpServer}; 10 | use dotenv::dotenv; 11 | use env_logger; 12 | use listenfd::ListenFd; 13 | use std::env; 14 | 15 | mod app; 16 | mod auth; 17 | mod db; 18 | mod error; 19 | mod schema; 20 | 21 | lazy_static! { 22 | static ref port: String = env::var("PORT").expect("PORT not set"); 23 | } 24 | 25 | fn main() { 26 | dotenv().ok(); 27 | env_logger::init(); 28 | 29 | let system = System::new("rust-backend"); 30 | let db_addr = db::get_addr(); 31 | let server = HttpServer::new(move || { 32 | app::create(app::State { 33 | db: db_addr.clone(), 34 | }) 35 | }); 36 | 37 | match ListenFd::from_env().take_tcp_listener(0).unwrap() { 38 | Some(listener) => server.listen(listener).start(), 39 | _ => server.bind(format!("127.0.0.1:{}", *port)).unwrap().start(), 40 | }; 41 | 42 | println!("Listening on port {}", *port); 43 | 44 | system.run(); 45 | } 46 | -------------------------------------------------------------------------------- /src/schema.rs: -------------------------------------------------------------------------------- 1 | table! { 2 | users (user_id) { 3 | user_id -> Uuid, 4 | email -> Text, 5 | name -> Text, 6 | password -> Nullable, 7 | created_at -> Timestamptz, 8 | updated_at -> Timestamptz, 9 | } 10 | } 11 | --------------------------------------------------------------------------------