Compare commits
1420 Commits
Author | SHA1 | Date |
---|---|---|
Oscar Hinton | d7674f5c91 | |
Jake Fink | 9852f2ec22 | |
Micaiah Martin | fec6838f90 | |
Patrick H. Lauke | 55a9403ee3 | |
Oscar Hinton | 817856bc82 | |
Micaiah Martin | 508292ae39 | |
Micaiah Martin | 00fd2ec03f | |
Oscar Hinton | 9a954710d9 | |
Oscar Hinton | a81c3c95a4 | |
Kyle Spearrin | 75470dc169 | |
Oscar Hinton | 18b5e4adfd | |
Patrick H. Lauke | 0396d682b1 | |
Thomas Rittson | ef60112855 | |
Thomas Rittson | b467206448 | |
Nils Fahldieck | 55b301c267 | |
github-actions[bot] | a5ebb9fb52 | |
github-actions[bot] | 2764c9610b | |
Oscar Hinton | 241e08b7ff | |
Oscar Hinton | 865e92c94c | |
Patrick H. Lauke | c3d0a529fb | |
Oscar Hinton | 1315b3c6cd | |
Dave Nicolson | 9f77dd9d09 | |
Thomas Rittson | 5082c7708a | |
dwbit | 10d35d863b | |
Kyle Spearrin | caafbc2b73 | |
Thomas Rittson | a4ca9bf64c | |
Joseph Flinn | 3862a19571 | |
Oscar Hinton | 8be88a731c | |
Oscar Hinton | 2b0d7ac72c | |
Matt Gibson | e0d7d2b43a | |
Oscar Hinton | 70db11e659 | |
Oscar Hinton | 2e3c89269d | |
github-actions[bot] | 31523bdf0e | |
Oscar Hinton | 6b6666cd0d | |
Oscar Hinton | be1ab221f4 | |
Oscar Hinton | 78986023e7 | |
Addison Beck | 14b9decf21 | |
github-actions[bot] | 0e9465601a | |
Oscar Hinton | 52bb77fb66 | |
Kyle Spearrin | b4cec5b46f | |
Robyn MacCallum | 72405ebe87 | |
Patrick H. Lauke | 4379274154 | |
Kyle Spearrin | 9e0cc45704 | |
Francesco De Feo | bc21703a2b | |
Patrick H. Lauke | 4ddeff2eee | |
Patrick H. Lauke | 75af5b94d4 | |
Oscar Hinton | cbadcccc85 | |
Kyle Spearrin | 21167301f1 | |
github-actions[bot] | ad6308eb48 | |
Oscar Hinton | fec023866e | |
Jake Fink | d2a7012d3f | |
Jake Fink | 6555312034 | |
github-actions[bot] | e2fe0c8b09 | |
Oscar Hinton | 3b2427e913 | |
Oscar Hinton | 37e9523f00 | |
github-actions[bot] | 09d7376f39 | |
Thomas Rittson | be0b6113e4 | |
github-actions[bot] | 75f11cdbf1 | |
github-actions[bot] | e5feda0fa6 | |
Micaiah Martin | 5ebed777c2 | |
Vince Grassia | e49d317d19 | |
Chad Scharf | 114d7455b8 | |
Vince Grassia | d1146acb1e | |
Micaiah Martin | 703d390566 | |
Thomas Rittson | c0170563f2 | |
Thomas Rittson | f46405a508 | |
Micaiah Martin | 6d429465fb | |
Matt Gibson | 81457f6c05 | |
github-actions[bot] | aee27f9570 | |
Joseph Flinn | f845bcf6c1 | |
Micaiah Martin | b134eba27b | |
Vincent Salucci | e84be59075 | |
github-actions[bot] | edc5245173 | |
Addison Beck | 7bad97dd82 | |
Oscar Hinton | 3071bec03f | |
Thomas Rittson | 80415f8cd5 | |
Daniel James Smith | 03c279865f | |
Addison Beck | 54025f269a | |
Thomas Rittson | 4ce5e5fbdc | |
Addison Beck | c738366eef | |
Micaiah Martin | 0114d96e18 | |
Micaiah Martin | 1eac8f0c0f | |
Daniel James Smith | 8880e9700e | |
github-actions[bot] | 2f289ebd1f | |
Oscar Hinton | 3aa52a5537 | |
Robyn MacCallum | 233f876bbb | |
Thomas Rittson | d7276850a2 | |
Jake Fink | e570551a5a | |
Vincent Salucci | 7401204b70 | |
github-actions[bot] | 685ffbcac5 | |
Chad Scharf | f9e6d13708 | |
Micaiah Martin | f798995764 | |
github-actions[bot] | f6298b2684 | |
Thomas Rittson | 3881223a73 | |
Matt Gibson | d2df8dacad | |
Addison Beck | 10ffdce5b9 | |
github-actions[bot] | d6d74e178c | |
Addison Beck | 2e09265d3a | |
Thomas Rittson | 659c9ea78d | |
Addison Beck | 884615c23a | |
Oscar Hinton | 2470d8ce25 | |
github-actions[bot] | 6b6468e061 | |
github-actions[bot] | 45b144361c | |
Addison Beck | 881bb3cb49 | |
Addison Beck | fd4c41b043 | |
Oscar Hinton | 7a8a78b4df | |
Oscar Hinton | f82e2fbb03 | |
Matt Gibson | e9a3c586f8 | |
Thomas Rittson | f54a614d6b | |
Thomas Rittson | 95b5d68566 | |
Thomas Rittson | 3ffb658db6 | |
github-actions[bot] | 530f25c88a | |
Joseph Flinn | 97d367dab8 | |
Micaiah Martin | 0a545c88b2 | |
github-actions[bot] | 0f6ee08dd5 | |
Addison Beck | b227ae13f6 | |
Addison Beck | 79f6a33596 | |
Addison Beck | 1e80c4335f | |
Vincent Salucci | c51b8523b7 | |
Joseph Flinn | bd2ed43498 | |
Oscar Hinton | 243afc9da0 | |
Thomas Rittson | 762e3f8198 | |
Thomas Rittson | 4e75a25492 | |
Addison Beck | 143a262743 | |
Addison Beck | c1a3178538 | |
Oscar Hinton | 166c459da4 | |
Daniel James Smith | 94b561382d | |
Daniel James Smith | 2b58861296 | |
Vincent Salucci | 3e8705d548 | |
Oscar Hinton | 1e877f6cf8 | |
Joseph Flinn | 9151fc0164 | |
Addison Beck | 03eed41d86 | |
Addison Beck | cad6e9481f | |
Daniel James Smith | 270411dff7 | |
Vincent Salucci | 7c68e3802e | |
Addison Beck | 48ff9f61ae | |
Addison Beck | 2b22a39d45 | |
Addison Beck | c1ba54f646 | |
Daniel James Smith | bb597e96a7 | |
github-actions[bot] | 6aa9e7611a | |
Oscar Hinton | 3c99920435 | |
Oscar Hinton | a7c5f1ad45 | |
Vincent Salucci | ec3c95d736 | |
Addison Beck | 058be7e895 | |
Addison Beck | ff7dd4ad8f | |
Addison Beck | 9271ec37b9 | |
Addison Beck | d80fdc8a78 | |
Addison Beck | 555ee1c230 | |
Addison Beck | c458b4d8a9 | |
Oscar Hinton | 7d46e5c145 | |
Addison Beck | ca41cdf8b5 | |
Addison Beck | d211b3fcd2 | |
Addison Beck | ef48ba1ae2 | |
Robyn MacCallum | 33704b016f | |
Oscar Hinton | a64273f829 | |
Daniel James Smith | cb4e6debf3 | |
github-actions[bot] | 2e7f8a127d | |
Thomas Rittson | c6eaf3a31e | |
Daniel James Smith | 37b03b09a1 | |
Oscar Hinton | d1c01a2bb0 | |
Oscar Hinton | 0edee78da1 | |
Addison Beck | 80c9196e44 | |
Addison Beck | 032d2be990 | |
Daniel James Smith | a684c102d7 | |
Daniel James Smith | 12bb8b060c | |
Addison Beck | b796fe094f | |
Daniel James Smith | 8b521aa35e | |
Oscar Hinton | 3cacf8a8c4 | |
Vince Grassia | dad1a95fb0 | |
github-actions[bot] | 5b6e5fc4fa | |
Oscar Hinton | 4644d03b28 | |
Daniel James Smith | abede3e5af | |
Daniel James Smith | 7818ffc2fb | |
Oscar Hinton | b6117d6801 | |
Addison Beck | 653ff8f45f | |
Daniel James Smith | 71c2fee574 | |
Daniel James Smith | d885e3296b | |
Addison Beck | f32b917a9f | |
Daniel James Smith | 2b64ec5375 | |
Oscar Hinton | f6f0bd2bfb | |
Oscar Hinton | 23a7072341 | |
Daniel James Smith | d64b00977c | |
github-actions[bot] | 695e8389d8 | |
Daniel James Smith | dd73a45f64 | |
Daniel James Smith | a1bbbcf4bf | |
Oscar Hinton | 27b1ee2ab3 | |
github-actions[bot] | f01856d34f | |
Robyn MacCallum | ef5e8e1e2a | |
Addison Beck | ed78a79042 | |
github-actions[bot] | 017a3bffd6 | |
Micaiah Martin | ad965e54e4 | |
Oscar Hinton | 6e69b61128 | |
Daniel James Smith | 406f4bf62c | |
Linus Aarnio | 83c3635932 | |
Micaiah Martin | 3c2094bb04 | |
Oscar Hinton | f7ae94199f | |
Oscar Hinton | 521feae535 | |
Oscar Hinton | b4df834b16 | |
Vince Grassia | b33d37e610 | |
Daniel James Smith | 3ad71103dd | |
github-actions[bot] | da296559c0 | |
Addison Beck | 0b306ca1a7 | |
Daniel James Smith | 5865f08b37 | |
github-actions[bot] | 74c9c1972f | |
Oscar Hinton | a10259ecab | |
github-actions[bot] | 9feb147654 | |
Vince Grassia | 822c791cf9 | |
Oscar Hinton | b70d2fb3c3 | |
Oscar Hinton | 5fd1da0c58 | |
github-actions[bot] | 2822d748f1 | |
Oscar Hinton | 04cfdb246d | |
Micaiah Martin | 00d57d0310 | |
Thomas Rittson | b6db41c26c | |
Thomas Rittson | b83058ecab | |
Oscar Hinton | b607a4ed08 | |
Oscar Hinton | 25b915cf26 | |
github-actions[bot] | 30d3192344 | |
Thomas Rittson | 9e3528df44 | |
Oscar Hinton | b57cba8632 | |
Joseph Flinn | 52d9244f7f | |
Joseph Flinn | dde7afb3df | |
Thomas Rittson | 3d8fd3cbce | |
Thomas Rittson | ca700e4feb | |
Alistair Francis | dd602024d8 | |
github-actions[bot] | 3010b3e1ac | |
Thomas Rittson | 9b68468710 | |
Oscar Hinton | fa98ef37ec | |
Daniel James Smith | 9124314ef9 | |
Thomas Rittson | afb30d5e0b | |
Joseph Flinn | aa73bde593 | |
Joseph Flinn | d6c100afeb | |
Joseph Flinn | 4f77f12552 | |
Vince Grassia | 086e09c7dc | |
Thomas Rittson | f2a5fe4429 | |
Vince Grassia | 6cea5e053d | |
Vince Grassia | ecfbf2ba15 | |
Joseph Flinn | 3ebfc14cbf | |
Vince Grassia | 9edd154a0e | |
Oscar Hinton | 05470b489c | |
Joseph Flinn | 59bed9b12e | |
Joseph Flinn | 4fa9325330 | |
github-actions[bot] | 5a179ec530 | |
Thomas Rittson | 22546932a2 | |
Thomas Rittson | 52a30f4d8a | |
Joseph Flinn | a61ef74895 | |
Oscar Hinton | 6f69486c36 | |
Vince Grassia | 66d560aab5 | |
Kyle Spearrin | bee11204b2 | |
github-actions[bot] | 7046f8cfd3 | |
Thomas Rittson | 77ab177d2c | |
Vince Grassia | 7327ab75c9 | |
Vince Grassia | b66d32b57e | |
Oscar Hinton | 42fd0dd2a6 | |
Vincent Salucci | b5fd993bad | |
Thomas Rittson | d02ebea219 | |
Thomas Rittson | 15e8e5fec9 | |
Oscar Hinton | 2639d13e42 | |
Oscar Hinton | e985018862 | |
Oscar Hinton | facedab33c | |
Vincent Salucci | df382a3611 | |
Joseph Flinn | bab33c3a64 | |
github-actions[bot] | 004f18e04d | |
Thomas Rittson | c385efdbd2 | |
Oscar Hinton | 0297ea57da | |
Vincent Salucci | 762c026b6f | |
Joseph Flinn | c5461f82c1 | |
Joseph Flinn | c99a543030 | |
Vincent Salucci | eac84128ed | |
Oscar Hinton | aa19e678f7 | |
Oscar Hinton | da4af743f3 | |
Joseph Flinn | e8da01bafb | |
Thomas Rittson | ebaf27b7c9 | |
Oscar Hinton | cdac1a4508 | |
Thomas Rittson | b552222132 | |
baylorrandolph | 4287f617f0 | |
Oscar Hinton | 6b59df2f39 | |
Vincent Salucci | c62144424f | |
Matt Alexander | dfd00bdaee | |
Vince Grassia | fcadedd458 | |
Thomas Rittson | 6bfd4ebafd | |
Thomas Rittson | 9494eb4b2d | |
Vincent Salucci | 39ac46aaa7 | |
Joseph Flinn | 9dbd692e2d | |
Oscar Hinton | 2ba8925b81 | |
Joseph Flinn | 5b4931e260 | |
Joseph Flinn | 1a6f283771 | |
Joseph Flinn | 2d68fe37a1 | |
Oscar Hinton | 29b33b14e5 | |
Oscar Hinton | 9ae439b52f | |
Daniel James Smith | a325ca2363 | |
Vince Grassia | 741fc69343 | |
github-actions[bot] | 026ee20250 | |
Daniel James Smith | 72b688e241 | |
Matt Gibson | 3100f55d51 | |
Oscar Hinton | 3cbb336416 | |
Joseph Flinn | 99b8be81f6 | |
Joseph Flinn | 99b9a0951a | |
Matt Gibson | a76f8749ca | |
Vincent Salucci | d82378a7a0 | |
Thomas Rittson | 816249a48a | |
Daniel James Smith | 157d9478d4 | |
Oscar Hinton | 20561fff87 | |
Matt Gibson | c863d68057 | |
Addison Beck | d7287e7aa3 | |
Addison Beck | 0682269e34 | |
Kyle Spearrin | 9201730fe1 | |
Trey Greer | 6990056c04 | |
Joseph Flinn | d5e9de2b8b | |
Kyle Spearrin | ccdd45b09e | |
Chad Scharf | d70de84fb7 | |
Shashank S | 359daffd9e | |
Trey Greer | cf56b68ba5 | |
Thomas Rittson | 3aa171a664 | |
Joseph Flinn | 6d8fbf1e43 | |
Oscar Hinton | c89ca36f51 | |
Kyle Spearrin | 8a01dcb87d | |
Vincent Salucci | 4f781be542 | |
Addison Beck | f862fc3691 | |
Oscar Hinton | d748e0007e | |
Matt Gibson | 56a1cfe277 | |
Oscar Hinton | 9c4ea9b491 | |
Vincent Salucci | e0d1923237 | |
Matt Gibson | bd0fb024c1 | |
Matt Gibson | 3b4142bd0d | |
Matt Gibson | db688d208d | |
Matt Gibson | 1fc8c02579 | |
Matt Gibson | 1b96afe283 | |
Matt Gibson | fc015bd4cb | |
Matt Gibson | e751d24b35 | |
Matt Gibson | ecd22e4d45 | |
Matt Gibson | 05e9419d65 | |
Matt Gibson | 29d538c3e6 | |
Matt Gibson | 1867949754 | |
Matt Gibson | 3888a9cdbb | |
Oscar Hinton | 296340a5be | |
Vince Grassia | 5ae7490478 | |
Thomas Rittson | f0716c62d2 | |
Chad Scharf | 2cf4da8886 | |
tgreer-bw | c84ac6407a | |
Oscar Hinton | ea3316742c | |
Thomas Rittson | 6edd600006 | |
Vince Grassia | 163351c3e7 | |
Thomas Rittson | 98f614aeda | |
Joseph Flinn | 60f3d5d33e | |
Joseph Flinn | adb16783cf | |
Tom Rittson | b00df0112e | |
Thomas Rittson | 7f5a5a5fbb | |
Thomas Rittson | c225210a44 | |
Oscar Hinton | c7345197f7 | |
Oscar Hinton | c89da7f12b | |
Thomas Rittson | 78f9dd50ad | |
Thomas Rittson | a109259812 | |
Oscar Hinton | 42d280ac09 | |
Thomas Rittson | b16f8bc253 | |
Thomas Rittson | f5175564b3 | |
Thomas Rittson | f5042bc07b | |
Thomas Rittson | 5bd7444e53 | |
Chad Scharf | 42091ac6d3 | |
Daniel James Smith | 9a2b2069b5 | |
Vince Grassia | 28ebbccbf1 | |
Chad Scharf | 0156f7ba2d | |
Vince Grassia | c9ae2ed933 | |
Vince Grassia | 6f6de60509 | |
Chad Scharf | 4a0be96b79 | |
Daniel James Smith | cae76cd74a | |
Chad Scharf | 012aa71054 | |
Trey Greer | cc165420f7 | |
tgreer-bw | a24618be32 | |
Chad Scharf | 969a62de9e | |
Kyle Spearrin | 0d5d8b671d | |
Thomas Rittson | 55b0118240 | |
Thomas Rittson | 2a471867aa | |
Thomas Rittson | 68096c1f12 | |
Daniel James Smith | 731e44fd06 | |
Chad Scharf | ee1f31d300 | |
Chad Scharf | dd683e8dad | |
Chad Scharf | 2bf9f34472 | |
Oscar Hinton | 8f7ab9f8db | |
Chad Scharf | 7d53ff788f | |
Joseph Flinn | 80ea232eb6 | |
Joseph Flinn | 72c26ae999 | |
Joseph Flinn | 3eb691fbd8 | |
Joseph Flinn | 7d959ffffb | |
Joseph Flinn | e2e41b7366 | |
Joseph Flinn | d50bb7bf3a | |
Vince Grassia | 64492d95cf | |
Joseph Flinn | d05cd38e70 | |
Joseph Flinn | 95c1876178 | |
Joseph Flinn | cac06e473e | |
Chad Scharf | 590a67d38d | |
Joseph Flinn | 525f0e8a66 | |
Joseph Flinn | 564d170d7a | |
Daniel James Smith | 00781806f5 | |
Chad Scharf | 33d2c63798 | |
Kyle Spearrin | 23e20ae0a3 | |
Kyle Spearrin | 608505f9e6 | |
Kyle Spearrin | dc3c33abad | |
Kyle Spearrin | 2d022773ad | |
Kyle Spearrin | 69f4782e46 | |
Kyle Spearrin | c9b9bd6ea5 | |
Kyle Spearrin | 045e7b7001 | |
Kyle Spearrin | 728b4e06f5 | |
Kyle Spearrin | c9af991027 | |
Kyle Spearrin | 4301f5d881 | |
Kyle Spearrin | 8b6d0a8a07 | |
Kyle Spearrin | 5581ec6aa1 | |
Kyle Spearrin | b143010486 | |
Kyle Spearrin | 3a907bf3fa | |
Kyle Spearrin | 79187c5782 | |
Kyle Spearrin | 6a89651588 | |
Kyle Spearrin | 08a9a81992 | |
Kyle Spearrin | 9701fa9736 | |
Kyle Spearrin | 765ef26340 | |
Kyle Spearrin | 3c83c14bb8 | |
Kyle Spearrin | 0ca036b968 | |
Kyle Spearrin | 157dfabaae | |
Kyle Spearrin | f82d900cc2 | |
Kyle Spearrin | 444511152c | |
Kyle Spearrin | 9b294bf4dd | |
Kyle Spearrin | 035d6ee5b3 | |
Kyle Spearrin | f024b33e02 | |
Kyle Spearrin | d3bb87ccb7 | |
Kyle Spearrin | 57f8176aac | |
Kyle Spearrin | fb4cb327ab | |
Kyle Spearrin | 64cee80521 | |
Kyle Spearrin | cb73582038 | |
Kyle Spearrin | 203c44bace | |
Kyle Spearrin | 19e09243fb | |
Kyle Spearrin | e8e888698d | |
Kyle Spearrin | 6b1c15519d | |
Kyle Spearrin | 2402a6f4c6 | |
Kyle Spearrin | 6f92b55f40 | |
Kyle Spearrin | 2992a31b61 | |
Kyle Spearrin | 061996bf55 | |
Kyle Spearrin | 0a288899e7 | |
Kyle Spearrin | da8697ea94 | |
Kyle Spearrin | d5e5dfc1d5 | |
Kyle Spearrin | 21a3c4357a | |
Kyle Spearrin | 5db26cbcc6 | |
Oscar Hinton | af5898a001 | |
Oscar Hinton | a712917f47 | |
Oscar Hinton | 266f089b3e | |
Oscar Hinton | 2bdd7413aa | |
Chad Scharf | 3a342be095 | |
Oscar Hinton | 42564285d9 | |
Chad Griffis | 49748ee05a | |
Chad Griffis | 0c12367721 | |
Oscar Hinton | 20b8a83dd8 | |
Thomas Rittson | 163fa2aa41 | |
Chad Griffis | 7bed3b0b59 | |
Oscar Hinton | 418625682a | |
Chad Scharf | 2f2a76d186 | |
Daniel James Smith | 422180fed1 | |
Oscar Hinton | ea90aebaba | |
Chad Scharf | 7e52657de6 | |
Thomas Rittson | eb1c5f809a | |
Chad Griffis | 113937b3d3 | |
Oscar Hinton | e6e79917f7 | |
Tom Rittson | cf29c35e07 | |
Oscar Hinton | 6dc82a8707 | |
Vincent Salucci | 227a1eaff9 | |
Chad Griffis | 06f2364733 | |
Matt Gibson | 7f49c8cb98 | |
Matt Gibson | 84b60a1a08 | |
Matt Gibson | 42636d3d2e | |
Thomas Rittson | f7d2ab7d97 | |
Thomas Rittson | 99fe9cf693 | |
Thomas Rittson | d7e1fda17d | |
Thomas Rittson | 62ccf420a2 | |
Matt Gibson | cdc8191f39 | |
Matt Gibson | cdd3aa6cdf | |
Matt Gibson | 8b0d554316 | |
Matt Gibson | 60af6b3d49 | |
Thomas Rittson | 0724041daf | |
Oscar Hinton | 6acfba4b40 | |
Matt Gibson | 6897b8562c | |
Matt Gibson | b0b17e660d | |
Chad Scharf | 5f986c19fc | |
Chad Scharf | 2dd88d4eed | |
Kyle Spearrin | 62baff5d39 | |
Kyle Spearrin | 00f54ee34a | |
Kyle Spearrin | 23c15cee48 | |
Matt Gibson | a9a5c7ed65 | |
Snyk bot | dd8409475a | |
Snyk bot | 3e90da6a32 | |
Snyk bot | 3d63057b12 | |
Snyk bot | 767fa7beac | |
Thomas Rittson | 70aef37f77 | |
Thomas Rittson | 30793a0d9b | |
Thomas Rittson | 737360b720 | |
Oscar Hinton | eebd4fc9d9 | |
Thomas Rittson | 05183149ad | |
Thomas Rittson | bc543de307 | |
Matt Gibson | 9ff6b4242c | |
Chad Scharf | 7a4eb35a09 | |
Matt Gibson | dff1fce8ae | |
Laurent Tréguier | 2aa9162b03 | |
Thomas Rittson | bb0d449a09 | |
Thomas Rittson | 43f511a711 | |
Matt Gibson | fdb02c376f | |
Matt Gibson | bab4ef82c7 | |
Laurent Tréguier | ceee03bf50 | |
Matt Gibson | 7e7f66416d | |
Matt Gibson | 5701275c22 | |
Matt Gibson | 99f8fdb4e9 | |
Thomas Rittson | 0fabda65e7 | |
addison | 500f6264a6 | |
Thomas Rittson | eb993e0a9e | |
Oscar Hinton | b5492e9546 | |
Chad Scharf | fa8b368b99 | |
Daniel James Smith | 858995c20e | |
Daniel James Smith | 8da44ef995 | |
Thomas Rittson | f3ae6ed1e2 | |
Matt Gibson | b5f89ee1a5 | |
Matt Gibson | 2a0ab87be0 | |
Oscar Hinton | 9154b483c0 | |
Oscar Hinton | 64da326be3 | |
Oscar Hinton | 85f29e1222 | |
Oscar Hinton | 316de9109d | |
Oscar Hinton | 29c10073fe | |
Oscar Hinton | 619cf4067a | |
Oscar Hinton | fc7a968b0c | |
Hinton | c2e8e07002 | |
Chad Scharf | 7b9156c041 | |
nitro | 5be6475c83 | |
nitro | 2d3c9809bc | |
Chad Scharf | aefd292898 | |
Oscar Hinton | a3e7bab76a | |
nitro | 38788b67dc | |
Oscar Hinton | 3ac40e534e | |
Chad Scharf | a0903a0932 | |
Oscar Hinton | 04d0c12b90 | |
Oscar Hinton | 1150e8222a | |
Chad Scharf | 6873a6ea39 | |
Hinton | 033bf0b1ca | |
aimuz | 444a06d6f7 | |
Oscar Hinton | b3af355818 | |
Joseph Flinn | b11e0e292f | |
Oscar Hinton | fe832d02c4 | |
Hinton | 0786d74ef5 | |
Hinton | edc531e105 | |
Kyle Spearrin | 0e1dab40cc | |
Kyle Spearrin | 368ac0ba93 | |
Chad Scharf | a5a5ecd678 | |
Kyle Spearrin | cc29fa2af3 | |
Kyle Spearrin | 92377be73c | |
Kyle Spearrin | 8927df54c4 | |
Kyle Spearrin | 8a2a1efef7 | |
Kyle Spearrin | f860263ff2 | |
Kyle Spearrin | dd57259beb | |
Kyle Spearrin | 1420c9f58f | |
Kyle Spearrin | d5a0b30108 | |
Kyle Spearrin | a2bd951371 | |
Kyle Spearrin | ec3d8659b8 | |
Kyle Spearrin | 418bc35d84 | |
Kyle Spearrin | c9b10a5f8f | |
Kyle Spearrin | a7355871b9 | |
Kyle Spearrin | 468dde79ac | |
Kyle Spearrin | d6a6ce6368 | |
Kyle Spearrin | 0313ca7acc | |
Kyle Spearrin | 0995da1fd3 | |
Kyle Spearrin | a08b6d4b5e | |
Kyle Spearrin | 3e422536b8 | |
Kyle Spearrin | 34af94bd5d | |
Kyle Spearrin | 53944c58bd | |
Kyle Spearrin | 3ff3ffe452 | |
Chad Scharf | 1c2c444518 | |
Chad Scharf | 04e7c8926a | |
Chad Scharf | ab24604d18 | |
Chad Scharf | 96e8d712ce | |
Thomas Rittson | bdc2f288ec | |
Addison Beck | b445bec719 | |
addison | 9aaa9a0fdb | |
Kyle Spearrin | 9310f7d202 | |
Kyle Spearrin | 8deedbfe20 | |
aimuz | 0a56bcb5c9 | |
Addison Beck | acfbce6237 | |
addison | 5724875328 | |
Hinton | 862f9a5a63 | |
Thomas Rittson | 79d0fa842f | |
Thomas Rittson | 8d05013f75 | |
Joseph Flinn | 1c39c294e0 | |
Thomas Rittson | 7f04d8e952 | |
Hinton | 907fabdd8e | |
Hinton | b7889b15ff | |
Joseph Flinn | a467881a76 | |
Joseph Flinn | 3d425e5b8c | |
Joseph Flinn | 8facd15772 | |
Matt Gibson | 87b6ba5cbf | |
Matt Gibson | 704ceef5f9 | |
Addison Beck | fd36237f85 | |
addison | 701f20ed63 | |
Addison Beck | b8de7d2619 | |
addison | c620c419d7 | |
addison | ac4afc6ef1 | |
addison | f429996d5c | |
Chad Scharf | d570e68c01 | |
Daniel James Smith | 90ffddd25e | |
Chad Scharf | 6a5d24be5e | |
Daniel James Smith | 8207d86df5 | |
Addison Beck | 3406734eed | |
addison | fe097e883e | |
addison | 077b4b8de5 | |
Addison Beck | bddbe186fc | |
addison | 696fddc970 | |
addison | f6fb4fee29 | |
addison | 7227b0c089 | |
addison | 7e03d282df | |
Chad Scharf | 1524f378db | |
Limon Monte | f922e0ede3 | |
addison | 07e78d75d5 | |
addison | 689f2c3535 | |
addison | 0918ad1425 | |
addison | ac807b6d54 | |
Addison Beck | 4a8cf62495 | |
addison | 68044f7170 | |
addison | ec162f8fbf | |
addison | 73bc46ae4a | |
addison | 1290ff2c40 | |
Addison Beck | 82cb6fd020 | |
addison | 12532f3cc4 | |
Addison Beck | 0b7621141c | |
Addison Beck | 544ecbecdc | |
addison | 30a7db2f20 | |
Chad Scharf | 66b984122c | |
Matt Gibson | a0e80fc486 | |
Matt Gibson | 113c035152 | |
Matt Gibson | ba173f9da5 | |
Chad Scharf | fa68ea249c | |
Chad Scharf | ab9b87acf3 | |
Nathan Higley | 9da60f8c0d | |
Addison Beck | e066077542 | |
addison | f537a8a601 | |
addison | ec933025f3 | |
Matt Gibson | 2dca45b677 | |
addison | 3e6f85c206 | |
addison | 5a71d5fdc8 | |
addison | 631d053ef1 | |
addison | d8e61d49c0 | |
addison | 8479e57fa5 | |
addison | 2b9bae6807 | |
addison | de162cd34f | |
addison | 6e49c481f0 | |
Matt Gibson | e76e56d824 | |
Kyle Spearrin | 62a43e536c | |
proletarius101 | 6dc81a6e01 | |
Joseph Flinn | 3b4d8dc867 | |
Joseph Flinn | 2dbeba0c97 | |
Chad Scharf | b93792332e | |
Joseph Flinn | e545ecd165 | |
Oscar Hinton | 5d953fd2fc | |
Joseph Flinn | f37461d742 | |
Joseph Flinn | e9dabbc5c0 | |
Joseph Flinn | 3c738c9b4e | |
Joseph Flinn | eb36b25c8b | |
Joseph Flinn | 9df2b42cdf | |
Joseph Flinn | d6c3716d4b | |
Joseph Flinn | 1e577eb43c | |
Joseph Flinn | b73f01d529 | |
Joseph Flinn | 3f77e75c18 | |
Oscar Hinton | c09ba7051f | |
Kyle Spearrin | 644e58463b | |
Oscar Hinton | e09697cd61 | |
Hinton | 89c47277e8 | |
Joseph Flinn | 33a2243f26 | |
Joseph Flinn | 23aafaa719 | |
Kyle Spearrin | 44c8f83eed | |
Kyle Spearrin | de904a21b5 | |
Oscar Hinton | d1011870f0 | |
Joseph Flinn | 7126aeb0b2 | |
Joseph Flinn | 1d27ed540d | |
Zhiyuan Zheng | 2e1588ebdc | |
Zhiyuan Zheng | 4c206e338f | |
Kyle Spearrin | 4e05ed68cc | |
Kyle Spearrin | db1f7aeba1 | |
Addison Beck | 1602b30169 | |
addison | 1d2295b733 | |
addison | 56d8240aff | |
Chad Scharf | e8c1866b23 | |
Kyle Spearrin | 6fff7274b3 | |
Oscar Hinton | a71bdb1e29 | |
Kyle Spearrin | 38d78e9222 | |
Kyle Spearrin | 8f58cdaa20 | |
Joseph Flinn | 654feca1d0 | |
Oscar Hinton | 15583748fe | |
Hinton | 1613aaee4d | |
Joseph Flinn | 67a300dc1f | |
Joseph Flinn | 2a408b4b22 | |
Joseph Flinn | cd22439760 | |
Joseph Flinn | 4c6282ddac | |
Joseph Flinn | 2c4289918f | |
Joseph Flinn | ee1ea1a887 | |
Joseph Flinn | 9b52781715 | |
Joseph Flinn | 03ad79aca5 | |
Joseph Flinn | 3b51f14a02 | |
Joseph Flinn | 18d48f27b2 | |
Joseph Flinn | 8af4d76984 | |
Joseph Flinn | 49808cc3f1 | |
Joseph Flinn | b1fa166dc2 | |
Joseph Flinn | 835b807d8e | |
Joseph Flinn | de333ef82c | |
Joseph Flinn | 01c236c86e | |
Joseph Flinn | 2220c00702 | |
Joseph Flinn | 03343bfd91 | |
Joseph Flinn | 3678c2c783 | |
Joseph Flinn | a8ee338ae3 | |
Joseph Flinn | 2384bbf758 | |
Chad Scharf | 2cbccecc3e | |
Kyle Spearrin | 31f0ad108e | |
Kyle Spearrin | 7e3b420f91 | |
Kyle Spearrin | 44343fa2f0 | |
Kyle Spearrin | 08cd9266af | |
Kyle Spearrin | 88d4d25ff9 | |
Kyle Spearrin | bcf2d1f1ba | |
Kyle Spearrin | 46f1d16ea4 | |
Kyle Spearrin | 54de923fdf | |
Kyle Spearrin | f3929d539a | |
Kyle Spearrin | 5bdd76ef24 | |
Kyle Spearrin | a4e1570c4f | |
Kyle Spearrin | 426474a7ae | |
Kyle Spearrin | 9bf0bdeade | |
Kyle Spearrin | 4370a9bd87 | |
Kyle Spearrin | 528215daf6 | |
Kyle Spearrin | ceaff1e2d6 | |
Kyle Spearrin | d04b17917f | |
Kyle Spearrin | 7edf8c080e | |
Kyle Spearrin | 3e281d4232 | |
Kyle Spearrin | fa5938f7aa | |
Kyle Spearrin | 5b1c919513 | |
Kyle Spearrin | 87e1d785e8 | |
Joseph Flinn | b906f9e231 | |
Joseph Flinn | 1fb9e41bcf | |
Joseph Flinn | 6b0c4114f7 | |
Joseph Flinn | a1559faefb | |
Joseph Flinn | 56bf4d66ba | |
Joseph Flinn | 68babd6243 | |
Joseph Flinn | dbb7ca4336 | |
Joseph Flinn | 13c9148e24 | |
Joseph Flinn | 6909a09a34 | |
Joseph Flinn | 9c4a6bfbb6 | |
Joseph Flinn | ef7b1d9a19 | |
Joseph Flinn | de7ba57a10 | |
Joseph Flinn | 58a830fc83 | |
Joseph Flinn | f908b1a7b2 | |
Joseph Flinn | 8b56129dcd | |
Joseph Flinn | c4b5f8a88b | |
Joseph Flinn | 20d2801ef7 | |
Joseph Flinn | e44fe9e801 | |
Joseph Flinn | 2efcf8386f | |
Joseph Flinn | 6a2eb5f001 | |
Chad Scharf | d7ae324acc | |
Kyle Spearrin | bed2b0cf5c | |
Kyle Spearrin | 91063ee11f | |
Kyle Spearrin | 04a809a3c0 | |
Kyle Spearrin | 0694a1d270 | |
Kyle Spearrin | d19a900df5 | |
Kyle Spearrin | 333d9b8c59 | |
Kyle Spearrin | 4fb6c1cc8c | |
Kyle Spearrin | 957498db5b | |
Kyle Spearrin | dc07e366dc | |
Kyle Spearrin | becefc0f85 | |
Kyle Spearrin | 414773a25d | |
Kyle Spearrin | beb600d29c | |
Kyle Spearrin | fa2a16fded | |
Kyle Spearrin | ebe00ed87f | |
Kyle Spearrin | b7df0d7c8e | |
Kyle Spearrin | ee75571866 | |
Kyle Spearrin | 2363a5ca3e | |
Kyle Spearrin | 8576e9e83e | |
Kyle Spearrin | 8796297bba | |
Kyle Spearrin | 1453cbe6d4 | |
Kyle Spearrin | 8c903942ae | |
Kyle Spearrin | d11ed21499 | |
Kyle Spearrin | 30a52bbed9 | |
Kyle Spearrin | 4d369c138e | |
Kyle Spearrin | 39f4f45704 | |
Kyle Spearrin | 5304069f98 | |
Kyle Spearrin | 92a287896f | |
Kyle Spearrin | 62f08f579e | |
Kyle Spearrin | bda04035eb | |
Kyle Spearrin | 45217f9846 | |
Kyle Spearrin | 77542d7d3d | |
Kyle Spearrin | bd16c406c5 | |
Kyle Spearrin | e9aa37a8b8 | |
Kyle Spearrin | 88bc4fdffd | |
Kyle Spearrin | aea5b4f20c | |
Kyle Spearrin | 0715fee2a8 | |
Kyle Spearrin | 7042935d5a | |
Kyle Spearrin | 3e3d43d60a | |
Kyle Spearrin | 4f52847f6d | |
Kyle Spearrin | 66bcb7a623 | |
Kyle Spearrin | e4f266de87 | |
Kyle Spearrin | 0764c92cae | |
Kyle Spearrin | 42a4181711 | |
Kyle Spearrin | fc903b7490 | |
Chad Scharf | 497cef19c4 | |
Joseph Flinn | 46d70441f9 | |
Chad Scharf | 504d3c311a | |
Joseph Flinn | c600901722 | |
Joseph Flinn | 9fef65dfb8 | |
Joseph Flinn | ebdf160378 | |
Joseph Flinn | e3da2013f2 | |
Joseph Flinn | 1a3cfb5201 | |
Joseph Flinn | 686b6931dc | |
Joseph Flinn | c414121413 | |
Joseph Flinn | 1e545973fc | |
Joseph Flinn | 0d42b7e8b4 | |
Joseph Flinn | 9e59dd6d63 | |
Joseph Flinn | 94b2e53c3f | |
Joseph Flinn | 713d7d05a0 | |
Joseph Flinn | fd6032f121 | |
Joseph Flinn | 36b9295f1b | |
Joseph Flinn | af254a1f52 | |
Joseph Flinn | 7e0616f39e | |
Joseph Flinn | 292d87588f | |
Joseph Flinn | effe1cd504 | |
Joseph Flinn | 6758847e5e | |
Joseph Flinn | f76a247fa4 | |
Joseph Flinn | 0a68a6a36e | |
Joseph Flinn | 4897abce7d | |
Joseph Flinn | 7410f99d83 | |
Joseph Flinn | 8ddc538159 | |
Joseph Flinn | 429b0abf42 | |
Joseph Flinn | b4a36dbfd2 | |
Joseph Flinn | 404e4130da | |
Oscar Hinton | f9fbb03fe3 | |
Joseph Flinn | 81a5c77b5e | |
Hinton | 8084b28013 | |
Joseph Flinn | 67367bb71b | |
Joseph Flinn | 081dfaaa04 | |
Joseph Flinn | 1d7aa701bf | |
Joseph Flinn | 6cb2a82ac1 | |
Joseph Flinn | e1c83d324f | |
Joseph Flinn | 50b5d2a422 | |
Joseph Flinn | 7534618cf1 | |
Matt Gibson | 326b6b3aaf | |
Matt Gibson | fa6a8bee2e | |
Joseph Flinn | 509ebe6e91 | |
Joseph Flinn | 899acaa92a | |
Joseph Flinn | 54ed6cd2b0 | |
Joseph Flinn | 92d4afb28d | |
Joseph Flinn | 190fb423da | |
Joseph Flinn | b1e4bd4bdb | |
Joseph Flinn | 5eb10afe85 | |
Joseph Flinn | 33029c1684 | |
Joseph Flinn | 88bf9be15f | |
Joseph Flinn | c508c7cd05 | |
Joseph Flinn | 048f3fed6f | |
Joseph Flinn | 7a2aa34619 | |
Joseph Flinn | 65a13d997a | |
Joseph Flinn | fc28a65e18 | |
Joseph Flinn | e1d2aa4b4a | |
Joseph Flinn | ba7007c307 | |
Vincent Salucci | 0fee18bedb | |
Joseph Flinn | 7df3ded62a | |
Joseph Flinn | 902040ec64 | |
Joseph Flinn | 078862e41b | |
Joseph Flinn | a1a5405722 | |
Joseph Flinn | e31c8c0e79 | |
Joseph Flinn | fd89704c1d | |
Joseph Flinn | fc0e8052b0 | |
Joseph Flinn | 38f357c165 | |
Joseph Flinn | 0cd63fa400 | |
Joseph Flinn | bcc972e60b | |
Joseph Flinn | cf738a2667 | |
Chad Scharf | 81f3cec707 | |
Chad Scharf | fd18bd8db6 | |
Joseph Flinn | 59efc3e091 | |
Joseph Flinn | c6ed8fe1d3 | |
Joseph Flinn | 65c5dc1f3b | |
Joseph Flinn | 47b335be4b | |
Joseph Flinn | 7712f3e8c3 | |
Joseph Flinn | 43348c542c | |
Joseph Flinn | 74ba229b21 | |
Joseph Flinn | 2a1f75d2bf | |
Joseph Flinn | 8fd56c87c2 | |
Joseph Flinn | 7ba93f845d | |
Joseph Flinn | 55809f5226 | |
Joseph Flinn | 6de9d3912f | |
Joseph Flinn | f47660fcc3 | |
Joseph Flinn | 5f63020eb3 | |
Joseph Flinn | 9a39f67efc | |
Joseph Flinn | 020629fd3c | |
Joseph Flinn | 7f217a261f | |
Matt Gibson | d6e981e2b6 | |
Matt Gibson | 55246686fd | |
Joseph Flinn | a1d950e33e | |
Joseph Flinn | de4966b3e4 | |
Joseph Flinn | 64e8099fb3 | |
Joseph Flinn | 0efb677009 | |
Joseph Flinn | b0878fd660 | |
Joseph Flinn | 6a1783b2df | |
Joseph Flinn | fa49fb0585 | |
Joseph Flinn | 5f53f0a988 | |
Joseph Flinn | f1e52b022b | |
Joseph Flinn | 033cee57b8 | |
Joseph Flinn | 539e906936 | |
Joseph Flinn | 4fa8342a00 | |
Joseph Flinn | 89e55da798 | |
Joseph Flinn | 68d302bfe3 | |
Joseph Flinn | 3550c2cb1e | |
Joseph Flinn | d998ec9146 | |
Chad Scharf | 6088f6246f | |
Hinton | 8d9698101d | |
Joseph Flinn | 345188ed99 | |
Joseph Flinn | 6f932f37ad | |
Joseph Flinn | 711cea8c4b | |
Joseph Flinn | b6d706a62b | |
Joseph Flinn | 3172c7b87d | |
Joseph Flinn | 455c287e20 | |
Joseph Flinn | 9873ad48ed | |
Joseph Flinn | 2817f78b98 | |
Joseph Flinn | d52713ea4d | |
Joseph Flinn | 23e2e08425 | |
Joseph Flinn | 2d2c1d632e | |
Joseph Flinn | 4a3f1ee5e6 | |
Joseph Flinn | 2ae72a66bc | |
Joseph Flinn | a08783eb9b | |
Joseph Flinn | 0978956c30 | |
Joseph Flinn | 1f0e5d711e | |
Joseph Flinn | 4b9e6ff894 | |
Joseph Flinn | f41014f0f2 | |
Joseph Flinn | 9581af66a1 | |
Joseph Flinn | d4f6c07fc0 | |
Joseph Flinn | 725ce08e86 | |
Vincent Salucci | 40c8fab6c8 | |
Joseph Flinn | 94a363c4ca | |
Joseph Flinn | 1465d3e4cc | |
Joseph Flinn | a21127e187 | |
Joseph Flinn | 672be07f40 | |
Joseph Flinn | 84ea397391 | |
Joseph Flinn | b01d9f9993 | |
Joseph Flinn | 668914286a | |
Joseph Flinn | f486077cf6 | |
Joseph Flinn | 6a0154cad0 | |
Joseph Flinn | 627c3eaec5 | |
Joseph Flinn | b6a298579c | |
Joseph Flinn | af41a59a60 | |
Joseph Flinn | 58ed7f5f6a | |
Joseph Flinn | 3f39d1ccb3 | |
Joseph Flinn | bc21106448 | |
Joseph Flinn | fae96d7ad8 | |
Joseph Flinn | 93d6b610b4 | |
Joseph Flinn | da9a5414bb | |
Joseph Flinn | ce31913e91 | |
Joseph Flinn | db5c04e7de | |
Joseph Flinn | 11b31fb97d | |
Joseph Flinn | 0eb3fdd533 | |
Joseph Flinn | 6ec84bdb6c | |
Joseph Flinn | 623b325074 | |
Joseph Flinn | b720106666 | |
Chad Scharf | 4b365003c6 | |
Joseph Flinn | fffba26e21 | |
Hinton | ef785eab81 | |
Hinton | 2c93385fce | |
Joseph Flinn | 7bf2f36565 | |
Joseph Flinn | 417f312153 | |
Joseph Flinn | 2ca363c139 | |
Joseph Flinn | 89c4ff913d | |
Joseph Flinn | 02bab2d493 | |
Joseph Flinn | 2e1dace25f | |
Joseph Flinn | 820491bbf8 | |
Joseph Flinn | dbce594727 | |
Joseph Flinn | 165d497b1f | |
Joseph Flinn | 7d297e85bb | |
Joseph Flinn | 707cd9f148 | |
Joseph Flinn | 1be12e357e | |
Joseph Flinn | 4585c98efa | |
Joseph Flinn | 7209b544a7 | |
Joseph Flinn | ec252719d3 | |
Joseph Flinn | 9b2b860cdf | |
Joseph Flinn | b11455b611 | |
Joseph Flinn | 4d5fab869e | |
Joseph Flinn | a17bbf2143 | |
Joseph Flinn | ec3ed240d7 | |
Joseph Flinn | e020e985a4 | |
Joseph Flinn | 5c5ba2e234 | |
Joseph Flinn | 1d68f9c6d4 | |
Joseph Flinn | 5aee4d8294 | |
Kyle Spearrin | d5249f3acd | |
Chad Scharf | a96c70437a | |
Hinton | d1d83af661 | |
Chad Scharf | a0241b3338 | |
Hinton | d0a5326bd7 | |
Chad Scharf | 76c040aff9 | |
Hinton | dfe4e0876f | |
Hinton | 87d399a3f9 | |
Hinton | 1ce84b7f8f | |
Joseph Flinn | 9224f7365d | |
Chad Scharf | 92db523a0f | |
Hinton | 535ca260d6 | |
Chad Scharf | aced23574b | |
Matt Gibson | e26f443089 | |
Matt Gibson | bd94ddb896 | |
Hinton | e639fa6674 | |
Matt Gibson | 8f704d20e5 | |
Joseph Flinn | 8319ddbb49 | |
Joseph Flinn | d5c99a1f7d | |
Joseph Flinn | 893eef9d0f | |
Joseph Flinn | 42be4d44a1 | |
Joseph Flinn | 2fce9e6696 | |
Joseph Flinn | d05562f359 | |
Joseph Flinn | f0897eb371 | |
Joseph Flinn | f349317cbd | |
Joseph Flinn | 5ae39d8fc3 | |
Joseph Flinn | b551b839d0 | |
Joseph Flinn | 6a228ee571 | |
Joseph Flinn | 42314451ac | |
Joseph Flinn | f46b0319b8 | |
Joseph Flinn | dd4347fb2a | |
Joseph Flinn | c8fa0aae8b | |
Joseph Flinn | 18e55133ba | |
Joseph Flinn | 53f15dc788 | |
Joseph Flinn | e0cc09f656 | |
Chad Scharf | 28c0fdd3f5 | |
Hinton | 02a3fbde99 | |
Joseph Flinn | 047db49e25 | |
Joseph Flinn | f294e43262 | |
Joseph Flinn | 94b924b21c | |
Joseph Flinn | 3099238762 | |
Joseph Flinn | 9ead2f2bb8 | |
Joseph Flinn | b52f107810 | |
Joseph Flinn | 16bad9ed98 | |
Joseph Flinn | 378454ce03 | |
Chad Scharf | 1be1b8bc37 | |
Chad Scharf | d83650e266 | |
Hinton | d20aaeb0e5 | |
Hinton | c13d6f810e | |
Hinton | 5d1057b3fa | |
Hinton | 22ddd8db60 | |
Kyle Spearrin | aa32b77286 | |
Chad Scharf | ac870ef31a | |
Chad Scharf | aecc6b8466 | |
Hinton | 41e72b22b8 | |
Joseph Flinn | 462b49daa3 | |
Joseph Flinn | 030eab7290 | |
Joseph Flinn | 41f263d378 | |
Joseph Flinn | 2a6add76db | |
Joseph Flinn | 026392d4a1 | |
Joseph Flinn | d68c62ab91 | |
Joseph Flinn | c641d2641d | |
Joseph Flinn | 857c9515da | |
Joseph Flinn | 761a93a4bd | |
Hinton | c5edb3e04e | |
Joseph Flinn | cdf16541e1 | |
Joseph Flinn | 33d4b22e52 | |
Joseph Flinn | f78df842b6 | |
Joseph Flinn | 65e72b41a3 | |
Joseph Flinn | 1251ddaf5f | |
Joseph Flinn | ba2e3f5a11 | |
Joseph Flinn | 7fbce68530 | |
Joseph Flinn | 493ba4e488 | |
Joseph Flinn | 99e2b83d62 | |
Joseph Flinn | 926d221e6a | |
Joseph Flinn | ae80649466 | |
Matt Gibson | ce5a3f0f35 | |
Joseph Flinn | 9bad72db67 | |
Joseph Flinn | 7deda0a117 | |
Joseph Flinn | 5924e108cf | |
Joseph Flinn | 792c6a3139 | |
Joseph Flinn | 4fea0cdb0f | |
Joseph Flinn | 6ebbe16070 | |
Matt Gibson | dce4c83cfe | |
Matt Gibson | de45dc77a0 | |
Matt Gibson | e7d4886a4f | |
Chad Scharf | 538d27b6e9 | |
Hinton | a938b842af | |
Hinton | d86225d551 | |
Vincent Salucci | 82ca93db91 | |
Kyle Spearrin | 2bfba0be5c | |
Chad Scharf | ee1baf7fe3 | |
Chad Scharf | d981b80c0f | |
Chad Scharf | fcbd43a9f8 | |
Chad Scharf | e9b58ee9fe | |
Chad Scharf | 7e97d513b8 | |
Kyle Spearrin | 181c36d2e9 | |
Hinton | 28943f4bc1 | |
Hinton | ed0acdead2 | |
Hinton | 91b186ae5d | |
Hinton | 0cd196f56c | |
Hinton | 75d26de581 | |
Hinton | f512df309d | |
Hinton | 7da03dc91c | |
Hinton | e41023aa09 | |
Hinton | f1d5e43ca2 | |
Hinton | a05677ab7f | |
Hinton | 03a52d4d63 | |
Hinton | d94f441422 | |
Chad Scharf | 4678291e95 | |
Chad Scharf | d86a929f00 | |
Chad Scharf | d90dc6ccab | |
Hinton | b1bd19f4dc | |
Hinton | efb7cc98ae | |
Hinton | f926f80d8c | |
Hinton | 2cbe7f3d0a | |
Hinton | ae5a5082db | |
Hinton | 14181dc34d | |
Hinton | 002dd2752b | |
Hinton | 4f466fba43 | |
Hinton | 77715443d9 | |
Matt Gibson | ac05ec4afc | |
Matt Gibson | f7b5968298 | |
Kyle Spearrin | a18a35fa0b | |
Kyle Spearrin | 0670970d2e | |
Addison Beck | 7faf75a69a | |
Hinton | 04c8b119e3 | |
Kyle Spearrin | e3c4d4f80d | |
Kyle Spearrin | de12fafd03 | |
Chad Scharf | 56ef051e09 | |
eliykat | 4051e8cfd0 | |
Chad Scharf | c0ba74b2e1 | |
Chad Scharf | eebec21afe | |
Chad Scharf | d83fb51dc3 | |
Chad Scharf | 97e982bf01 | |
Chad Scharf | c9c6a11390 | |
Chad Scharf | fe031ac6b8 | |
Chad Scharf | c001a00f82 | |
Kyle Spearrin | 1a918436ca | |
Vincent Salucci | bcc8bc0c80 | |
Chad Scharf | 4a18a4eb93 | |
Chad Scharf | 5ff545e541 | |
Cedric Wille | 9914ac6610 | |
Chad Scharf | d8d1ee3022 | |
Tom Rittson | 0dc2da052f | |
Hinton | 0c0beb7446 | |
Hinton | da0cd3d588 | |
Hinton | 470df8f589 | |
Hinton | 77fc0ce55b | |
Hinton | 9ff0f204d8 | |
Hinton | a6563e7de2 | |
Hinton | 2ac6148821 | |
Hinton | 54c53e432b | |
Hinton | 1bb81270d9 | |
Hinton | 74b51c9a6c | |
Vincent Salucci | be95ee9328 | |
Hinton | d83e2bc117 | |
Hinton | 5b0b07f812 | |
Hinton | 51b749b1dc | |
Hinton | 44cd222626 | |
Hinton | c80b538674 | |
Hinton | 45302e5bd5 | |
Hinton | 19edc24b0b | |
Hinton | cb9c0b318e | |
Hinton | 830c4a45ee | |
Hinton | 24ef7e1ef6 | |
Hinton | f09a788103 | |
Kyle Spearrin | 38ecc3b74b | |
Kyle Spearrin | dc192b75a1 | |
Kyle Spearrin | 9db307555b | |
Kyle Spearrin | b3086fe713 | |
Kyle Spearrin | 7395fde989 | |
Kyle Spearrin | d03491bb3d | |
Kyle Spearrin | d90674227e | |
Kyle Spearrin | 72beaa7ed8 | |
Kyle Spearrin | 9f357cb2ac | |
Kyle Spearrin | 694237536b | |
Kyle Spearrin | 989c135c4a | |
Kyle Spearrin | 3b3dbd65bc | |
Kyle Spearrin | cb123ce59a | |
Kyle Spearrin | bbc12a9a9f | |
Kyle Spearrin | b3f42543d4 | |
Kyle Spearrin | 6433178175 | |
Kyle Spearrin | afd501b985 | |
Kyle Spearrin | 59cda84d07 | |
Matt Portune | 0bcb4c100a | |
Kyle Spearrin | 36075de436 | |
Kyle Spearrin | 4ee72fc94d | |
Kyle Spearrin | 51a0e2d028 | |
Kyle Spearrin | 84d356992a | |
Kyle Spearrin | d09228ceb9 | |
Kyle Spearrin | fb9e0ec739 | |
Kyle Spearrin | ef3822228a | |
Kyle Spearrin | 30e898b697 | |
Matt Portune | 56539d4690 | |
Kyle Spearrin | 696856a3c9 | |
Kyle Spearrin | 7e1c6e0ee2 | |
Kyle Spearrin | 874e8056f8 | |
Kyle Spearrin | 532a8d7a37 | |
Kyle Spearrin | e2da97ec78 | |
Kyle Spearrin | 6572c28347 | |
Kyle Spearrin | 88859c87d4 | |
Kyle Spearrin | 2eb60e95ae | |
Kyle Spearrin | a26c760c82 | |
Kyle Spearrin | 04c37b2d81 | |
Kyle Spearrin | 6eff8835dd | |
Kyle Spearrin | 6e8e9778d0 | |
Kyle Spearrin | 8501640fbd | |
Kyle Spearrin | 109cab2fb7 | |
Kyle Spearrin | 1009b3b055 | |
Kyle Spearrin | a565925b8f | |
Kyle Spearrin | c5250adf53 | |
Kyle Spearrin | 0dbe4bc66e | |
Kyle Spearrin | 0a310b5a00 | |
Kyle Spearrin | 7667dfca51 | |
Kyle Spearrin | 7d5daa8894 | |
Kyle Spearrin | 0e6824d3f4 | |
Kyle Spearrin | 9dfabf8eb8 | |
Kyle Spearrin | 17d8aef5db | |
Kyle Spearrin | 961dc87f05 | |
Chad Scharf | 3f3ba96ca7 | |
Chad Scharf | 103141ed97 | |
Chad Scharf | e6a61605a3 | |
Chad Scharf | 09f48e59b9 | |
Chad Scharf | f3726a08b6 | |
Kyle Spearrin | b374030549 | |
Kyle Spearrin | 46b7f77e5c | |
Kyle Spearrin | 7b6da22722 | |
Kyle Spearrin | 44c4fd2e80 | |
Chad Scharf | ce0568992a | |
Kyle Spearrin | e2a24d78ce | |
Kyle Spearrin | e182a41687 | |
Kyle Spearrin | 617c6805db | |
Chad Scharf | f5c02d16b9 | |
Vincent Salucci | 0576d2b119 | |
Vincent Salucci | 0190dd497a | |
Vincent Salucci | bbd50b2459 | |
Kyle Spearrin | 0ba2589461 | |
Vincent Salucci | 83901e1e7c | |
Kyle Spearrin | 3f75413552 | |
Oscar Hinton | 7499d7de25 | |
Oscar Hinton | 540df4270c | |
Kyle Spearrin | c31de46b9e | |
Kyle Spearrin | 0d3f66ab45 | |
Chad Scharf | 3fa50caa04 | |
Chad Scharf | 0b50b0db3d | |
Chad Scharf | 870bbcba70 | |
Chad Scharf | cec3e1ca12 | |
Chad Scharf | 98ca23427f | |
Kyle Spearrin | b7ee60edb3 | |
Kyle Spearrin | 883d0aeda0 | |
Kyle Spearrin | 6a801a3e4b | |
Kyle Spearrin | 975addb30b | |
K. Sasa | 7eee81f977 | |
Kyle Spearrin | 3ae073f458 | |
Kyle Spearrin | be9a23a1f6 | |
Kyle Spearrin | 97feed232a | |
Kyle Spearrin | 48aaf4b920 | |
Kyle Spearrin | 60030f0354 | |
Oscar Hinton | 26b023a3cb | |
Kyle Spearrin | 560b58f9de | |
Matt Smith | 33eef540a7 | |
Matt Smith | 624290f31d | |
Matt Smith | b767cb9188 | |
Matt Smith | 05ee1b6a06 | |
Anthony Garera | 464708c507 | |
Kyle Spearrin | bd975bf85d | |
Kyle Spearrin | dcc1953854 | |
Kyle Spearrin | 3485e742a0 | |
Kyle Spearrin | 0564347aa8 | |
Chad Scharf | 86967da913 | |
Chad Scharf | 0055b1df0e | |
Chad Scharf | 31f4fc158e | |
Chad Scharf | 582814b148 | |
Chad Scharf | 12c4649941 | |
Chad Scharf | 5ea459a347 | |
Hinton | 26c05d5909 | |
hinton | 876b45d82e | |
hinton | 982d35a404 | |
Kyle Spearrin | 160c161782 | |
Kyle Spearrin | 24b1349dc8 | |
Kyle Spearrin | 136b63acc4 | |
Vincent Salucci | aa3a6044a2 | |
Trey Greer | dfccb9bc79 | |
hinton | 66de9e93fa | |
Kyle Spearrin | be320fbea1 | |
Kyle Spearrin | 91884e9205 | |
Kyle Spearrin | 51822fa3ac | |
Kyle Spearrin | ecdd97a499 | |
Srdjan Milic | 8af28ada18 | |
Chad Scharf | 2a38350b99 | |
Chad Scharf | 151964f6b8 | |
Kyle Spearrin | d9f5f2eef0 | |
Kyle Spearrin | 8c905f8746 | |
Saeed Baig | 4fd3eecef2 | |
Vincent Salucci | 9a040644bf | |
Ghislain Antony Vaillant | 8c29425935 | |
Chad Scharf | 2f165bcc2a | |
Kyle Spearrin | 848dff7863 | |
Elias Papavasileiou | a84af15c93 | |
Kyle Spearrin | 0faa987f41 | |
Chad Scharf | 19a212f263 | |
Chad Scharf | e607414384 | |
Chad Scharf | 129ecc1ca8 | |
Chad Scharf | c2eafba442 | |
Vincent Salucci | 93e7e9d261 | |
Vincent Salucci | c1113852a4 | |
Kyle Spearrin | 62ff3ac086 | |
Kyle Spearrin | d840e7caf6 | |
Kyle Spearrin | c5d4dbd8f2 | |
Kyle Spearrin | d38a1656e5 | |
Kyle Spearrin | 6d2da25263 | |
Kyle Spearrin | 89accfb9c8 | |
Kyle Spearrin | 0dca6cba8c | |
Kyle Spearrin | fedc03dbae | |
Kyle Spearrin | 3c6b15821c | |
Kyle Spearrin | 4e530b4712 | |
Kyle Spearrin | b6cb373749 | |
Kyle Spearrin | 910ba20b14 | |
Kyle Spearrin | 3acaeae955 | |
Kyle Spearrin | 58aeaf772d | |
Vincent Salucci | c0add18db2 | |
Vincent Salucci | 68bc1ebbff | |
Kyle Spearrin | 4c61937626 | |
Vincent Salucci | 31d023194d | |
Kyle Spearrin | a483996301 | |
Kyle Spearrin | 265ffe1b89 | |
mtgto | d10a8a5b61 | |
mtgto | 354f8decc0 | |
Kyle Spearrin | 0b05a8f44e | |
Kyle Spearrin | e8c03e30ba | |
Kyle Spearrin | 39178bd05d | |
Kyle Spearrin | fd7d3c39e4 | |
Kyle Spearrin | e72bd78ef0 | |
Kyle Spearrin | d390758104 | |
Kyle Spearrin | 98a03d4cef | |
Kyle Spearrin | 67a181eb69 | |
Kyle Spearrin | bb3a7f6821 | |
Kyle Spearrin | b7e6fe6c33 | |
Clayton | dc30baebb9 | |
Kyle Spearrin | d4384dc079 | |
Kyle Spearrin | 6d1f2c30c2 | |
Kyle Spearrin | 8bfd935339 | |
Kyle Spearrin | b7d11a1703 | |
Kyle Spearrin | 6d6a5fed06 | |
Kyle Spearrin | b745851d0d | |
Kyle Spearrin | 4bdc0a8a88 | |
Kyle Spearrin | ee167571a6 | |
Vincent Salucci | e90405a453 | |
Vincent Salucci | 828d5ea911 | |
Vincent Salucci | 5098e784b3 | |
MartB | 4e2ee15456 | |
Kyle Spearrin | 663a84a3c4 | |
MartB | 84af4ee48f | |
Vincent Salucci | b2c67f789e | |
Vincent Salucci | 5254c5ae59 | |
Kyle Spearrin | 11f39fe781 | |
Kyle Spearrin | c5c7f8a623 | |
Elias Papavasileiou | f7037dd1f5 | |
Vincent Salucci | d10e562e40 | |
Vincent Salucci | f8fe684b6b | |
Vincent Salucci | 4de15f7d79 | |
Vincent Salucci | 337f4ad987 | |
Kyle Spearrin | e79e126fba | |
Kyle Spearrin | db7c71bcd3 | |
Kyle Spearrin | d1c043e145 | |
Kyle Spearrin | 5a8998cfb8 | |
Kyle Spearrin | c344c5c13d | |
Kyle Spearrin | f975323175 | |
Kyle Spearrin | 54772df873 | |
Kyle Spearrin | df8b87d132 | |
Kyle Spearrin | 5da78c1d57 | |
Kyle Spearrin | 0472cfc443 | |
Joe | 467a185235 | |
Marcelo Dominguez | f7bfe40b71 | |
Kyle Spearrin | 594e463e02 | |
Kyle Spearrin | db52e27210 | |
libertylocked | 9ec2fbad2e | |
Kyle Spearrin | a7d5d063ae | |
Kyle Spearrin | ef49001418 | |
Kyle Spearrin | 4e9759cd62 | |
Alberto Franco | f8a378b26d | |
Veit-Hendrik Schlenker | 86360dd3cb | |
Kyle Spearrin | 7f3b0ea2cb | |
Kyle Spearrin | cfb82ce6f5 | |
Veit-Hendrik Schlenker | 55e0749687 | |
Kyle Spearrin | 097636d095 | |
Kyle Spearrin | ee7fa795a9 | |
Kyle Spearrin | eba9927016 | |
Kyle Spearrin | 713bc403c0 | |
Kyle Spearrin | c09d1c2e78 | |
Kyle Spearrin | 1f0dc97573 | |
Kyle Spearrin | 4372381146 | |
Kyle Spearrin | a02726aad7 | |
Kyle Spearrin | d60cbe5be4 | |
Kyle Spearrin | 659764289b | |
Kyle Spearrin | 38ae30d480 | |
Kyle Spearrin | d952ce27bc | |
Kyle Spearrin | 9c7a5b3c1a | |
Kyle Spearrin | e52f593d8b | |
Kyle Spearrin | 1c39ff5957 | |
Kyle Spearrin | 9c298a99f7 | |
Kyle Spearrin | c13bb698ba | |
Kyle Spearrin | 03c3c56eec | |
Kyle Spearrin | 034e0c20f0 | |
Kyle Spearrin | e318e78444 | |
Kyle Spearrin | 72bd3bc46f | |
Máté Farkas | a891bd71f8 | |
Kyle Spearrin | 92c2c48d5e | |
Kyle Spearrin | fba8463d96 | |
Kyle Spearrin | ad6021580f | |
Kyle Spearrin | c87499e406 | |
Kyle Spearrin | 427c9def58 | |
Kyle Spearrin | 53fe65ddbe | |
Kyle Spearrin | 473757be89 | |
Kyle Spearrin | 61d6e41654 | |
Kyle Spearrin | 99443e1b6c | |
Kyle Spearrin | fa0fc9d8c7 | |
Kyle Spearrin | 2c6229a936 | |
Kyle Spearrin | 216e9dc0ba | |
Kyle Spearrin | f9eed4a683 | |
Kyle Spearrin | cfe9f57572 | |
Kyle Spearrin | 2e8c156e6a | |
Kyle Spearrin | ddc0819434 | |
Kyle Spearrin | e886a9d6aa | |
Kyle Spearrin | 5268b1be0b | |
Kyle Spearrin | fc2761cfca | |
Kyle Spearrin | a4f9c15524 | |
Kyle Spearrin | 8dbadacb4b | |
Kyle Spearrin | bba905b701 | |
Kyle Spearrin | 343f502bae | |
Kyle Spearrin | f3674aa7b2 | |
Kyle Spearrin | 67c89e4114 | |
Kyle Spearrin | 14eaf3d72f | |
Kyle Spearrin | c499c3d081 | |
Kyle Spearrin | 0a2d16a883 | |
Kyle Spearrin | 9bb26cb0fa | |
Kyle Spearrin | dff1bb8144 | |
Kyle Spearrin | 7e01fcba2b | |
Wyatt Childers | 3a2509b589 | |
Wyatt Childers | ece47dff6a |
|
@ -12,4 +12,4 @@ insert_final_newline = true
|
|||
[*.{js,ts,scss,html}]
|
||||
charset = utf-8
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
indent_size = 2
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
dist
|
||||
build
|
||||
jslib
|
||||
webpack.main.js
|
||||
webpack.renderer.js
|
||||
src/scripts/duo.js
|
||||
desktop_native
|
||||
|
||||
**/node_modules
|
|
@ -0,0 +1,32 @@
|
|||
{
|
||||
"root": true,
|
||||
"env": {
|
||||
"browser": true,
|
||||
"node": true
|
||||
},
|
||||
"extends": ["./jslib/shared/eslintrc.json"],
|
||||
"rules": {
|
||||
"import/order": [
|
||||
"error",
|
||||
{
|
||||
"alphabetize": {
|
||||
"order": "asc"
|
||||
},
|
||||
"newlines-between": "always",
|
||||
"pathGroups": [
|
||||
{
|
||||
"pattern": "jslib-*/**",
|
||||
"group": "external",
|
||||
"position": "after"
|
||||
},
|
||||
{
|
||||
"pattern": "src/**/*",
|
||||
"group": "parent",
|
||||
"position": "before"
|
||||
}
|
||||
],
|
||||
"pathGroupsExcludedImportTypes": ["builtin"]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
|
@ -0,0 +1,2 @@
|
|||
# Apply Prettier https://github.com/bitwarden/desktop/pull/1202
|
||||
521feae535d83166e620c3c28dfc3e7b0314a00e
|
|
@ -0,0 +1 @@
|
|||
* text=auto eol=lf
|
|
@ -0,0 +1,85 @@
|
|||
name: Bug Report
|
||||
description: File a bug report
|
||||
labels: [bug]
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Thanks for taking the time to fill out this bug report!
|
||||
|
||||
Please do not submit feature requests. The [Community Forums](https://community.bitwarden.com) has a section for submitting, voting for, and discussing product feature requests.
|
||||
- type: textarea
|
||||
id: reproduce
|
||||
attributes:
|
||||
label: Steps To Reproduce
|
||||
description: How can we reproduce the behavior.
|
||||
value: |
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
3. Scroll down to '....'
|
||||
4. Click on '...'
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: expected
|
||||
attributes:
|
||||
label: Expected Result
|
||||
description: A clear and concise description of what you expected to happen.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: actual
|
||||
attributes:
|
||||
label: Actual Result
|
||||
description: A clear and concise description of what is happening.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: screenshots
|
||||
attributes:
|
||||
label: Screenshots or Videos
|
||||
description: If applicable, add screenshots and/or a short video to help explain your problem.
|
||||
- type: textarea
|
||||
id: additional-context
|
||||
attributes:
|
||||
label: Additional Context
|
||||
description: Add any other context about the problem here.
|
||||
- type: dropdown
|
||||
id: os
|
||||
attributes:
|
||||
label: Operating System
|
||||
description: What operating system are you seeing the problem on?
|
||||
multiple: true
|
||||
options:
|
||||
- Windows
|
||||
- macOS
|
||||
- Linux
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
id: os-version
|
||||
attributes:
|
||||
label: Operating System Version
|
||||
description: What version of the operating system(s) are you seeing the problem on?
|
||||
- type: dropdown
|
||||
id: install-method
|
||||
attributes:
|
||||
label: Installation method
|
||||
multiple: true
|
||||
options:
|
||||
- Direct Download (from bitwarden.com)
|
||||
- Mac App Store
|
||||
- Microsoft Store
|
||||
- Homebrew
|
||||
- Chocolatey
|
||||
- Snap
|
||||
- Other
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
id: version
|
||||
attributes:
|
||||
label: Build Version
|
||||
description: What version of our software are you running? (go to "Help" → "About Bitwarden" in the app)
|
||||
validations:
|
||||
required: true
|
|
@ -0,0 +1,14 @@
|
|||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: Feature Requests
|
||||
url: https://community.bitwarden.com/c/feature-requests/
|
||||
about: Request new features using the Community Forums. Please search existing feature requests before making a new one.
|
||||
- name: Bitwarden Community Forums
|
||||
url: https://community.bitwarden.com
|
||||
about: Please visit the community forums for general community discussion, support and the development roadmap.
|
||||
- name: Customer Support
|
||||
url: https://bitwarden.com/contact/
|
||||
about: Please contact our customer support for account issues and general customer support.
|
||||
- name: Security Issues
|
||||
url: https://hackerone.com/bitwarden
|
||||
about: We use HackerOne to manage security disclosures.
|
|
@ -0,0 +1,32 @@
|
|||
## Type of change
|
||||
|
||||
- [ ] Bug fix
|
||||
- [ ] New feature development
|
||||
- [ ] Tech debt (refactoring, code cleanup, dependency upgrades, etc)
|
||||
- [ ] Build/deploy pipeline (DevOps)
|
||||
- [ ] Other
|
||||
|
||||
## Objective
|
||||
|
||||
<!--Describe what the purpose of this PR is. For example: what bug you're fixing or what new feature you're adding-->
|
||||
|
||||
## Code changes
|
||||
|
||||
<!--Explain the changes you've made to each file or major component. This should help the reviewer understand your changes-->
|
||||
<!--Also refer to any related changes or PRs in other repositories-->
|
||||
|
||||
- **file.ext:** Description of what was changed and why
|
||||
|
||||
## Screenshots
|
||||
|
||||
<!--Required for any UI changes. Delete if not applicable-->
|
||||
|
||||
## Testing requirements
|
||||
|
||||
<!--What functionality requires testing by QA? This includes testing new behavior and regression testing-->
|
||||
|
||||
## Before you submit
|
||||
|
||||
- [ ] I have checked for **linting** errors (`npm run lint`) (required)
|
||||
- [ ] This change requires a **documentation update** (notify the documentation team)
|
||||
- [ ] This change has particular **deployment requirements** (notify the DevOps team)
|
|
@ -0,0 +1,49 @@
|
|||
---
|
||||
name: Crowdin Sync
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs: {}
|
||||
schedule:
|
||||
- cron: "0 0 * * 5"
|
||||
|
||||
jobs:
|
||||
crowdin-sync:
|
||||
name: Autosync
|
||||
runs-on: ubuntu-20.04
|
||||
env:
|
||||
_CROWDIN_PROJECT_ID: "299360"
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f # v2.3.4
|
||||
|
||||
- name: Login to Azure
|
||||
uses: Azure/login@77f1b2e3fb80c0e8645114159d17008b8a2e475a
|
||||
with:
|
||||
creds: ${{ secrets.AZURE_PROD_KV_CREDENTIALS }}
|
||||
|
||||
- name: Retrieve secrets
|
||||
id: retrieve-secrets
|
||||
uses: Azure/get-keyvault-secrets@80ccd3fafe5662407cc2e55f202ee34bfff8c403
|
||||
with:
|
||||
keyvault: "bitwarden-prod-kv"
|
||||
secrets: "crowdin-api-token"
|
||||
|
||||
- name: Download translations
|
||||
uses: crowdin/github-action@e39093fd75daae7859c68eded4b43d42ec78d8ea
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
CROWDIN_API_TOKEN: ${{ steps.retrieve-secrets.outputs.crowdin-api-token }}
|
||||
with:
|
||||
config: crowdin.yml
|
||||
crowdin_branch_name: master
|
||||
upload_sources: false
|
||||
upload_translations: false
|
||||
download_translations: true
|
||||
github_user_name: "github-actions"
|
||||
github_user_email: "<>"
|
||||
commit_message: "Autosync the updated translations"
|
||||
localization_branch_name: crowdin-auto-sync
|
||||
create_pull_request: true
|
||||
pull_request_title: "Autosync Crowdin Translations"
|
||||
pull_request_body: "Autosync the updated translations"
|
|
@ -0,0 +1,16 @@
|
|||
---
|
||||
name: Enforce PR labels
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types: [labeled, unlabeled, opened, edited, synchronize]
|
||||
jobs:
|
||||
enforce-label:
|
||||
name: EnforceLabel
|
||||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- name: Enforce Label
|
||||
uses: yogevbd/enforce-label-action@8d1e1709b1011e6d90400a0e6cf7c0b77aa5efeb
|
||||
with:
|
||||
BANNED_LABELS: "hold"
|
||||
BANNED_LABELS_DESCRIPTION: "PRs on hold cannot be merged"
|
|
@ -0,0 +1,213 @@
|
|||
---
|
||||
name: Release
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
release_type:
|
||||
description: 'Release Options'
|
||||
required: true
|
||||
default: 'Initial Release'
|
||||
type: choice
|
||||
options:
|
||||
- Initial Release
|
||||
- Redeploy
|
||||
- Dry Run
|
||||
|
||||
jobs:
|
||||
setup:
|
||||
name: Setup
|
||||
runs-on: ubuntu-20.04
|
||||
outputs:
|
||||
package_version: ${{ steps.retrieve-version.outputs.package_version }}
|
||||
branch-name: ${{ steps.branch.outputs.branch-name }}
|
||||
steps:
|
||||
- name: Branch check
|
||||
if: ${{ github.event.inputs.release_type != 'Dry Run' }}
|
||||
run: |
|
||||
if [[ "$GITHUB_REF" != "refs/heads/rc" ]] && [[ "$GITHUB_REF" != "refs/heads/hotfix-rc" ]]; then
|
||||
echo "==================================="
|
||||
echo "[!] Can only release from the 'rc' or 'hotfix-rc' branches"
|
||||
echo "==================================="
|
||||
exit 1
|
||||
fi
|
||||
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f # v2.3.4
|
||||
|
||||
- name: Get Package Version
|
||||
id: retrieve-version
|
||||
run: |
|
||||
PKG_VERSION=$(jq -r .version src/package.json)
|
||||
echo "::set-output name=package_version::$PKG_VERSION"
|
||||
|
||||
- name: Check to make sure Desktop release version has been bumped
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
latest_ver=$(hub release -L 1 -f '%T')
|
||||
latest_ver=${latest_ver:1}
|
||||
echo "Latest version: $latest_ver"
|
||||
ver=${{ steps.retrieve-version.outputs.package_version }}
|
||||
echo "Version: $ver"
|
||||
if [ "$latest_ver" = "$ver" ] && \
|
||||
[ "${{ github.event.inputs.release_type }}" == "Initial Release" ]; then
|
||||
echo "Version has not been bumped!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
- name: Get branch name
|
||||
id: branch
|
||||
run: |
|
||||
BRANCH_NAME=$(basename ${{ github.ref }})
|
||||
echo "::set-output name=branch-name::$BRANCH_NAME"
|
||||
|
||||
- name: Login to Azure
|
||||
uses: Azure/login@ec3c14589bd3e9312b3cc8c41e6860e258df9010
|
||||
with:
|
||||
creds: ${{ secrets.AZURE_PROD_KV_CREDENTIALS }}
|
||||
|
||||
- name: Retrieve secrets
|
||||
id: retrieve-secrets
|
||||
uses: Azure/get-keyvault-secrets@b5c723b9ac7870c022b8c35befe620b7009b336f
|
||||
with:
|
||||
keyvault: "bitwarden-prod-kv"
|
||||
secrets: "aws-electron-access-id, aws-electron-access-key"
|
||||
|
||||
- name: Download all artifacts
|
||||
uses: bitwarden/gh-actions/download-artifacts@c1fa8e09871a860862d6bbe36184b06d2c7e35a8
|
||||
with:
|
||||
workflow: build.yml
|
||||
workflow_conclusion: success
|
||||
branch: ${{ steps.branch.outputs.branch-name }}
|
||||
path: ./artifacts
|
||||
|
||||
- name: Rename .pkg to .pkg.archive
|
||||
env:
|
||||
PKG_VERSION: ${{ steps.retrieve-version.outputs.package_version }}
|
||||
working-directory: ./artifacts
|
||||
run: mv Bitwarden-${{ env.PKG_VERSION }}-universal.pkg Bitwarden-${{ env.PKG_VERSION }}-universal.pkg.archive
|
||||
|
||||
- name: Publish artifacts to S3
|
||||
env:
|
||||
AWS_ACCESS_KEY_ID: ${{ steps.retrieve-secrets.outputs.aws-electron-access-id }}
|
||||
AWS_SECRET_ACCESS_KEY: ${{ steps.retrieve-secrets.outputs.aws-electron-access-key }}
|
||||
AWS_DEFAULT_REGION: 'us-west-2'
|
||||
run: |
|
||||
aws s3 cp ./artifacts s3://public-s3-electron-artifacts/desktop/ \
|
||||
--acl "public-read" \
|
||||
--recursive \
|
||||
--quiet
|
||||
|
||||
- name: Create release
|
||||
uses: ncipollo/release-action@95215a3cb6e6a1908b3c44e00b4fdb15548b1e09 # v2.8.5
|
||||
env:
|
||||
PKG_VERSION: ${{ steps.retrieve-version.outputs.package_version }}
|
||||
with:
|
||||
artifacts: "artifacts/Bitwarden-${{ env.PKG_VERSION }}-amd64.deb,
|
||||
artifacts/Bitwarden-${{ env.PKG_VERSION }}-x86_64.rpm,
|
||||
artifacts/Bitwarden-${{ env.PKG_VERSION }}-x64.freebsd,
|
||||
artifacts/bitwarden_${{ env.PKG_VERSION }}_amd64.snap,
|
||||
artifacts/Bitwarden-${{ env.PKG_VERSION }}-x86_64.AppImage,
|
||||
artifacts/Bitwarden-Portable-${{ env.PKG_VERSION }}.exe,
|
||||
artifacts/Bitwarden-Installer-${{ env.PKG_VERSION }}.exe,
|
||||
artifacts/Bitwarden-${{ env.PKG_VERSION }}-ia32-store.appx,
|
||||
artifacts/Bitwarden-${{ env.PKG_VERSION }}-ia32.appx,
|
||||
artifacts/Bitwarden-${{ env.PKG_VERSION }}-ia32.nsis.7z,
|
||||
artifacts/Bitwarden-${{ env.PKG_VERSION }}-x64-store.appx,
|
||||
artifacts/Bitwarden-${{ env.PKG_VERSION }}-x64.appx,
|
||||
artifacts/Bitwarden-${{ env.PKG_VERSION }}-x64.nsis.7z,
|
||||
artifacts/Bitwarden-${{ env.PKG_VERSION }}-arm64-store.appx,
|
||||
artifacts/Bitwarden-${{ env.PKG_VERSION }}-arm64.appx,
|
||||
artifacts/Bitwarden-${{ env.PKG_VERSION }}-arm64.nsis.7z,
|
||||
artifacts/bitwarden.${{ env.PKG_VERSION }}.nupkg,
|
||||
artifacts/Bitwarden-${{ env.PKG_VERSION }}-universal-mac.zip,
|
||||
artifacts/Bitwarden-${{ env.PKG_VERSION }}-universal.dmg,
|
||||
artifacts/Bitwarden-${{ env.PKG_VERSION }}-universal.dmg.blockmap,
|
||||
artifacts/Bitwarden-${{ env.PKG_VERSION }}-universal.pkg.archive"
|
||||
commit: ${{ github.sha }}
|
||||
tag: v${{ env.PKG_VERSION }}
|
||||
name: Version ${{ env.PKG_VERSION }}
|
||||
body: "<insert release notes here>"
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
draft: true
|
||||
|
||||
snap:
|
||||
name: Deploy Snap
|
||||
runs-on: ubuntu-20.04
|
||||
needs: setup
|
||||
env:
|
||||
_PKG_VERSION: ${{ needs.setup.outputs.package_version }}
|
||||
steps:
|
||||
- name: Checkout Repo
|
||||
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f # v2.3.4
|
||||
|
||||
- name: Login to Azure
|
||||
uses: Azure/login@77f1b2e3fb80c0e8645114159d17008b8a2e475a
|
||||
with:
|
||||
creds: ${{ secrets.AZURE_PROD_KV_CREDENTIALS }}
|
||||
|
||||
- name: Retrieve secrets
|
||||
id: retrieve-secrets
|
||||
uses: Azure/get-keyvault-secrets@80ccd3fafe5662407cc2e55f202ee34bfff8c403
|
||||
with:
|
||||
keyvault: "bitwarden-prod-kv"
|
||||
secrets: "snapcraft-store-token"
|
||||
|
||||
- name: Install Snap
|
||||
uses: samuelmeuli/action-snapcraft@10d7d0a84d9d86098b19f872257df314b0bd8e2d # v1.2.0
|
||||
with:
|
||||
snapcraft_token: ${{ steps.retrieve-secrets.outputs.snapcraft-store-token }}
|
||||
|
||||
- name: Setup
|
||||
run: mkdir dist
|
||||
|
||||
- name: Download Snap artifact
|
||||
uses: bitwarden/gh-actions/download-artifacts@c1fa8e09871a860862d6bbe36184b06d2c7e35a8
|
||||
with:
|
||||
workflow: build.yml
|
||||
workflow_conclusion: success
|
||||
branch: ${{ needs.setup.outputs.branch-name }}
|
||||
artifacts: bitwarden_${{ env._PKG_VERSION }}_amd64.snap
|
||||
path: ./dist
|
||||
|
||||
- name: Deploy to Snap Store
|
||||
if: ${{ github.event.inputs.release_type != 'Dry Run' }}
|
||||
run: |
|
||||
snapcraft upload dist/bitwarden_${{ env._PKG_VERSION }}_amd64.snap --release stable
|
||||
snapcraft logout
|
||||
|
||||
choco:
|
||||
name: Deploy Choco
|
||||
runs-on: windows-2019
|
||||
needs: setup
|
||||
env:
|
||||
_PKG_VERSION: ${{ needs.setup.outputs.package_version }}
|
||||
steps:
|
||||
- name: Checkout Repo
|
||||
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f # v2.3.4
|
||||
|
||||
- name: Setup Chocolatey
|
||||
run: choco apikey --key $env:CHOCO_API_KEY --source https://push.chocolatey.org/
|
||||
env:
|
||||
CHOCO_API_KEY: ${{ secrets.CHOCO_API_KEY }}
|
||||
|
||||
- name: Make dist dir
|
||||
shell: pwsh
|
||||
run: New-Item -ItemType directory -Path ./dist
|
||||
|
||||
- name: Download choco artifact
|
||||
uses: bitwarden/gh-actions/download-artifacts@c1fa8e09871a860862d6bbe36184b06d2c7e35a8
|
||||
with:
|
||||
workflow: build.yml
|
||||
workflow_conclusion: success
|
||||
branch: ${{ needs.setup.outputs.branch-name }}
|
||||
artifacts: bitwarden.${{ env._PKG_VERSION }}.nupkg
|
||||
path: ./dist
|
||||
|
||||
- name: Push to Chocolatey
|
||||
if: ${{ github.event.inputs.release_type != 'Dry Run' }}
|
||||
shell: pwsh
|
||||
run: |
|
||||
cd dist
|
||||
choco push
|
|
@ -0,0 +1,65 @@
|
|||
---
|
||||
name: Version Bump
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
version_number:
|
||||
description: "New Version"
|
||||
required: true
|
||||
|
||||
jobs:
|
||||
bump_version:
|
||||
name: "Create version_bump_${{ github.event.inputs.version_number }} branch"
|
||||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- name: Checkout Branch
|
||||
uses: actions/checkout@ec3a7ce113134d7a93b817d10a8272cb61118579
|
||||
|
||||
- name: Create Version Branch
|
||||
run: |
|
||||
git switch -c version_bump_${{ github.event.inputs.version_number }}
|
||||
git push -u origin version_bump_${{ github.event.inputs.version_number }}
|
||||
|
||||
- name: Checkout Version Branch
|
||||
uses: actions/checkout@ec3a7ce113134d7a93b817d10a8272cb61118579
|
||||
with:
|
||||
ref: version_bump_${{ github.event.inputs.version_number }}
|
||||
|
||||
- name: Bump Version - Package
|
||||
uses: bitwarden/gh-actions/version-bump@03ad9a873c39cdc95dd8d77dbbda67f84db43945
|
||||
with:
|
||||
version: ${{ github.event.inputs.version_number }}
|
||||
file_path: "./src/package.json"
|
||||
|
||||
- name: Commit files
|
||||
run: |
|
||||
git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
||||
git config --local user.name "github-actions[bot]"
|
||||
git commit -m "Bumped version to ${{ github.event.inputs.version_number }}" -a
|
||||
|
||||
- name: Push changes
|
||||
run: git push -u origin version_bump_${{ github.event.inputs.version_number }}
|
||||
|
||||
- name: Create Version PR
|
||||
env:
|
||||
PR_BRANCH: "version_bump_${{ github.event.inputs.version_number }}"
|
||||
GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
|
||||
BASE_BRANCH: master
|
||||
TITLE: "Bump version to ${{ github.event.inputs.version_number }}"
|
||||
run: |
|
||||
gh pr create --title "$TITLE" \
|
||||
--base "$BASE" \
|
||||
--head "$PR_BRANCH" \
|
||||
--label "version update" \
|
||||
--label "automated pr" \
|
||||
--body "
|
||||
## Type of change
|
||||
- [ ] Bug fix
|
||||
- [ ] New feature development
|
||||
- [ ] Tech debt (refactoring, code cleanup, dependency upgrades, etc)
|
||||
- [ ] Build/deploy pipeline (DevOps)
|
||||
- [X] Other
|
||||
|
||||
## Objective
|
||||
Automated version bump to ${{ github.event.inputs.version_number }}"
|
|
@ -0,0 +1,11 @@
|
|||
---
|
||||
name: Workflow Linter
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
paths:
|
||||
- .github/workflows/**
|
||||
|
||||
jobs:
|
||||
call-workflow:
|
||||
uses: bitwarden/gh-actions/.github/workflows/workflow-linter.yml@master
|
|
@ -4,6 +4,7 @@ node_modules
|
|||
npm-debug.log
|
||||
vwd.webinfo
|
||||
dist/
|
||||
dist-safari/
|
||||
css/
|
||||
*.crx
|
||||
*.pem
|
||||
|
@ -13,4 +14,5 @@ yarn-error.log
|
|||
*.nupkg
|
||||
*.provisionprofile
|
||||
*.env
|
||||
PlugIns/safari.appex/
|
||||
PlugIns/safari.appex/
|
||||
PlugIns/safari-legacy.appex/
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
_
|
|
@ -0,0 +1,4 @@
|
|||
#!/bin/sh
|
||||
. "$(dirname "$0")/_/husky.sh"
|
||||
|
||||
npx lint-staged
|
|
@ -0,0 +1,14 @@
|
|||
# Build directories
|
||||
build
|
||||
dist
|
||||
dist-safari
|
||||
desktop_native
|
||||
|
||||
jslib
|
||||
|
||||
# External libraries / auto synced locales
|
||||
src/locales
|
||||
src/scripts/duo.js
|
||||
|
||||
# Github Workflows
|
||||
.github/workflows
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"printWidth": 100
|
||||
}
|
10
.travis.yml
|
@ -1,10 +0,0 @@
|
|||
matrix:
|
||||
include:
|
||||
- os: osx
|
||||
osx_image: xcode9.2
|
||||
language: node_js
|
||||
node_js: 10
|
||||
install:
|
||||
- npm install
|
||||
script:
|
||||
- npm run build
|
|
@ -10,9 +10,7 @@
|
|||
"windows": {
|
||||
"runtimeExecutable": "${workspaceRoot}/node_modules/.bin/electron.cmd"
|
||||
},
|
||||
"args": [
|
||||
"."
|
||||
]
|
||||
"args": ["."]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -1,4 +1,27 @@
|
|||
Code contributions are welcome! Please commit any pull requests against the `master` branch.
|
||||
# How to Contribute
|
||||
|
||||
Contributions of all kinds are welcome!
|
||||
|
||||
Please visit our [Community Forums](https://community.bitwarden.com/) for general community discussion and the development roadmap.
|
||||
|
||||
Here is how you can get involved:
|
||||
|
||||
- **Request a new feature:** Go to the [Feature Requests category](https://community.bitwarden.com/c/feature-requests/) of the Community Forums. Please search existing feature requests before making a new one
|
||||
- **Write code for a new feature:** Make a new post in the [Github Contributions category](https://community.bitwarden.com/c/github-contributions/) of the Community Forums. Include a description of your proposed contribution, screeshots, and links to any relevant feature requests. This helps get feedback from the community and Bitwarden team members before you start writing code
|
||||
- **Report a bug or submit a bugfix:** Use Github issues and pull requests
|
||||
- **Write documentation:** Submit a pull request to the [Bitwarden help repository](https://github.com/bitwarden/help)
|
||||
- **Help other users:** Go to the [Ask the Bitwarden Community category](https://community.bitwarden.com/c/support/) on the Community Forums
|
||||
- **Translate:** See the localization (l10n) section below
|
||||
|
||||
## Contributor Agreement
|
||||
|
||||
Please sign the [Contributor Agreement](https://cla-assistant.io/bitwarden/desktop) if you intend on contributing to any Github repository. Pull requests cannot be accepted and merged unless the author has signed the Contributor Agreement.
|
||||
|
||||
## Pull Request Guidelines
|
||||
|
||||
- use `npm run lint` and fix any linting suggestions before submitting a pull request
|
||||
- commit any pull requests against the `master` branch
|
||||
- include a link to your Community Forums post
|
||||
|
||||
# Localization (l10n)
|
||||
|
||||
|
@ -8,6 +31,6 @@ We use a translation tool called [Crowdin](https://crowdin.com) to help manage o
|
|||
|
||||
If you are interested in helping translate the Bitwarden desktop app into another language (or make a translation correction), please register an account at Crowdin and join our project here: https://crowdin.com/project/bitwarden-desktop
|
||||
|
||||
If the language that you are interested in translating is not already listed, create a new account on Crowdin, join the project, and contact the project owner (https://crowdin.com/profile/kspearrin).
|
||||
If the language that you are interested in translating is not already listed, create a new account on Crowdin, join the project, and contact the project owner (https://crowdin.com/profile/dwbit).
|
||||
|
||||
You can read Crowdin's getting started guide for translators here: https://support.crowdin.com/crowdin-intro/
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
<!--
|
||||
Please do not submit feature requests. The [Community Forums][1] has a
|
||||
section for submitting, voting for, and discussing product feature requests.
|
||||
[1]: https://community.bitwarden.com
|
||||
-->
|
61
README.md
|
@ -1,32 +1,75 @@
|
|||
[![appveyor build](https://ci.appveyor.com/api/projects/status/github/bitwarden/desktop?branch=master&svg=true)](https://ci.appveyor.com/project/bitwarden/desktop)
|
||||
[![travis build](https://travis-ci.org/bitwarden/desktop.svg?branch=master)](https://travis-ci.org/bitwarden/desktop)
|
||||
[![Github Workflow build on master](https://github.com/bitwarden/desktop/actions/workflows/build.yml/badge.svg?branch=master)](https://github.com/bitwarden/desktop/actions/workflows/build.yml?query=branch:master)
|
||||
[![Crowdin](https://d322cqt584bo4o.cloudfront.net/bitwarden-desktop/localized.svg)](https://crowdin.com/project/bitwarden-desktop)
|
||||
[![Join the chat at https://gitter.im/bitwarden/Lobby](https://badges.gitter.im/bitwarden/Lobby.svg)](https://gitter.im/bitwarden/Lobby)
|
||||
|
||||
> **Archived**
|
||||
>
|
||||
> This repository is archived, please go to https://github.com/bitwarden/clients for future development.
|
||||
|
||||
# Bitwarden Desktop Application
|
||||
|
||||
[![Platforms](https://imgur.com/SLv9paA.png "Windows, macOS, and Linux")](https://bitwarden.com/#download)
|
||||
[![Platforms](https://imgur.com/SLv9paA.png "Windows, macOS, and Linux")](https://bitwarden.com/download/)
|
||||
|
||||
The Bitwarden desktop app is written using Electron and Angular. The application installs on Windows, macOS, and Linux distributions.
|
||||
|
||||
![Desktop Vault](https://raw.githubusercontent.com/bitwarden/brand/master/screenshots/desktop-macos-vault.png "My Vault")
|
||||
![Desktop Vault](https://github.com/bitwarden/brand/blob/f09f2fa594c8a020c315296074f18ce0a7b3f171/screenshots/desktop-macos-vault.png "My Vault")
|
||||
|
||||
# Build/Run
|
||||
|
||||
**Requirements**
|
||||
## Requirements
|
||||
|
||||
- [Node.js](https://nodejs.org/)
|
||||
- Windows users: To compile the native node modules used in the app you will need the Visual C++ toolset, available through the standard Visual Studio installer (recommended) or by installing [`windows-build-tools`](https://github.com/felixrieseberg/windows-build-tools) through `npm`. See more at [Compiling native Addon modules](https://github.com/Microsoft/nodejs-guidelines/blob/master/windows-environment.md#compiling-native-addon-modules).
|
||||
- [Node.js](https://nodejs.org) v16.13.1 (LTS) or greater
|
||||
- NPM v8
|
||||
- Windows:
|
||||
- To compile the native node modules used in the app you will need the _Visual C++ toolset_, available through the standard Visual Studio installer. You will also need to install the _Microsoft Build Tools 2015_ and _Windows 10 SDK 17134_ as additional dependencies in the Visual Studio installer.
|
||||
- Linux:
|
||||
- The following packages `build-essential libsecret-1-dev libglib2.0-dev`
|
||||
|
||||
**Run the app**
|
||||
## Run the app
|
||||
|
||||
```bash
|
||||
npm install
|
||||
npm ci
|
||||
npm run electron
|
||||
```
|
||||
|
||||
### Debug Native Messaging
|
||||
|
||||
Native Messaging (communication with the browser extension) works by having the browser start a lightweight proxy application baked into our desktop binary. To setup an environment which allows
|
||||
for easy debugging you will need to build the application for distribution, i.e. `npm run dist:<platform>`, start the dist version and enable desktop integration. This will write some manifests
|
||||
to disk, Consult the [native manifests](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Native_manifests#Manifest_location) documentation for more details of the manifest
|
||||
format, and the exact locations for the different platforms. _Note_ that disabling the desktop integration will delete the manifests, and the files will need to be updated again.
|
||||
|
||||
The generated manifests are pre-configured with the production ID for the browser extensions. In order to use them with the development builds, the browser extension ID of the development build
|
||||
needs to be added to the `allowed_extensions` section of the manifest. These IDs are generated by the browser, and can be found in the extension settings within the browser.
|
||||
|
||||
It will then be possible to run the desktop application as usual using `npm run electron` and communicate with the browser.
|
||||
|
||||
# We're Hiring!
|
||||
|
||||
Interested in contributing in a big way? Consider joining our team! We're hiring for many positions. Please take a look at our [Careers page](https://bitwarden.com/careers/) to see what opportunities are currently open as well as what it's like to work at Bitwarden.
|
||||
|
||||
# Contribute
|
||||
|
||||
Code contributions are welcome! Please commit any pull requests against the `master` branch. Learn more about how to contribute by reading the [`CONTRIBUTING.md`](CONTRIBUTING.md) file.
|
||||
|
||||
Security audits and feedback are welcome. Please open an issue or email us privately if the report is sensitive in nature. You can read our security policy in the [`SECURITY.md`](SECURITY.md) file.
|
||||
|
||||
## Prettier
|
||||
|
||||
We recently migrated to using Prettier as code formatter. All previous branches will need to updated to avoid large merge conflicts using the following steps:
|
||||
|
||||
1. Check out your local Branch
|
||||
2. Run `git merge b4df834b16d4f5d4162a926a5a308bdb3ebc718b`
|
||||
3. Resolve any merge conflicts, commit.
|
||||
4. Run `npm run prettier`
|
||||
5. Commit
|
||||
6. Run `git merge -Xours 521feae535d83166e620c3c28dfc3e7b0314a00e`
|
||||
7. Push
|
||||
|
||||
### Git blame
|
||||
|
||||
We also recommend that you configure git to ignore the prettier revision using:
|
||||
|
||||
```bash
|
||||
git config blame.ignoreRevsFile .git-blame-ignore-revs
|
||||
```
|
||||
|
|
42
SECURITY.md
|
@ -1,39 +1,11 @@
|
|||
Bitwarden believes that working with security researchers across the globe is crucial to keeping our
|
||||
users safe. If you believe you've found a security issue in our product or service, we encourage you to
|
||||
notify us. We welcome working with you to resolve the issue promptly. Thanks in advance!
|
||||
Bitwarden believes that working with security researchers across the globe is crucial to keeping our users safe. If you believe you've found a security issue in our product or service, we encourage you to please submit a report through our [HackerOne Program](https://hackerone.com/bitwarden/). We welcome working with you to resolve the issue promptly. Thanks in advance!
|
||||
|
||||
# Disclosure Policy
|
||||
|
||||
- Let us know as soon as possible upon discovery of a potential security issue, and we'll make every
|
||||
effort to quickly resolve the issue.
|
||||
- Provide us a reasonable amount of time to resolve the issue before any disclosure to the public or a
|
||||
third-party. We may publicly disclose the issue before resolving it, if appropriate.
|
||||
- Make a good faith effort to avoid privacy violations, destruction of data, and interruption or
|
||||
degradation of our service. Only interact with accounts you own or with explicit permission of the
|
||||
account holder.
|
||||
- If you would like to encrypt your report, please use the PGP key with long ID
|
||||
`0xDE6887086F892325FEC04CC0D847525B6931381F` (available in the public keyserver pool).
|
||||
|
||||
# In-scope
|
||||
|
||||
- Security issues in any current release of Bitwarden. This includes the web vault, browser extension,
|
||||
and mobile apps (iOS and Android). Product downloads are available at https://bitwarden.com. Source
|
||||
code is available at https://github.com/bitwarden.
|
||||
|
||||
# Exclusions
|
||||
|
||||
The following bug classes are out-of scope:
|
||||
|
||||
- Bugs that are already reported on any of Bitwarden's issue trackers (https://github.com/bitwarden),
|
||||
or that we already know of. Note that some of our issue tracking is private.
|
||||
- Issues in an upstream software dependency (ex: Xamarin, ASP.NET) which are already reported to the
|
||||
upstream maintainer.
|
||||
- Attacks requiring physical access to a user's device.
|
||||
- Self-XSS
|
||||
- Issues related to software or protocols not under Bitwarden's control
|
||||
- Vulnerabilities in outdated versions of Bitwarden
|
||||
- Missing security best practices that do not directly lead to a vulnerability
|
||||
- Issues that do not have any impact on the general public
|
||||
- Let us know as soon as possible upon discovery of a potential security issue, and we'll make every effort to quickly resolve the issue.
|
||||
- Provide us a reasonable amount of time to resolve the issue before any disclosure to the public or a third-party. We may publicly disclose the issue before resolving it, if appropriate.
|
||||
- Make a good faith effort to avoid privacy violations, destruction of data, and interruption or degradation of our service. Only interact with accounts you own or with explicit permission of the account holder.
|
||||
- If you would like to encrypt your report, please use the PGP key with long ID `0xDE6887086F892325FEC04CC0D847525B6931381F` (available in the public keyserver pool).
|
||||
|
||||
While researching, we'd like to ask you to refrain from:
|
||||
|
||||
|
@ -42,4 +14,8 @@ While researching, we'd like to ask you to refrain from:
|
|||
- Social engineering (including phishing) of Bitwarden staff or contractors
|
||||
- Any physical attempts against Bitwarden property or data centers
|
||||
|
||||
# We want to help you!
|
||||
|
||||
If you have something that you feel is close to exploitation, or if you'd like some information regarding the internal API, or generally have any questions regarding the app that would help in your efforts, please email us at https://bitwarden.com/contact and ask for that information. As stated above, Bitwarden wants to help you find issues, and is more than willing to help.
|
||||
|
||||
Thank you for helping keep Bitwarden and our users safe!
|
||||
|
|
133
appveyor.yml
|
@ -1,133 +0,0 @@
|
|||
image:
|
||||
- Visual Studio 2017
|
||||
- Ubuntu1804
|
||||
|
||||
branches:
|
||||
except:
|
||||
- l10n_master
|
||||
|
||||
stack: node 10
|
||||
|
||||
init:
|
||||
- ps: |
|
||||
if($isWindows -and $env:DEBUG_RDP -eq "true") {
|
||||
iex ((new-object net.webclient).DownloadString(`
|
||||
'https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
|
||||
}
|
||||
- sh: sudo apt-get update
|
||||
- sh: sudo apt-get -y install pkg-config libxss-dev libsecret-1-dev rpm
|
||||
- ps: |
|
||||
if($isWindows) {
|
||||
Install-Product node 10
|
||||
}
|
||||
if($env:APPVEYOR_REPO_TAG -eq "true") {
|
||||
$env:RELEASE_NAME = $env:APPVEYOR_REPO_TAG_NAME.TrimStart("v")
|
||||
}
|
||||
|
||||
install:
|
||||
- ps: |
|
||||
$env:PACKAGE_VERSION = (Get-Content -Raw -Path .\src\package.json | ConvertFrom-Json).version
|
||||
$env:PROD_DEPLOY = "false"
|
||||
if($env:APPVEYOR_REPO_TAG -eq "true" -and $env:APPVEYOR_RE_BUILD -eq "True") {
|
||||
$env:PROD_DEPLOY = "true"
|
||||
echo "This is a production deployment."
|
||||
}
|
||||
if($isWindows) {
|
||||
choco install cloc --no-progress
|
||||
cloc --include-lang TypeScript,JavaScript,HTML,Sass,CSS --vcs git
|
||||
}
|
||||
|
||||
before_build:
|
||||
- node --version
|
||||
- npm --version
|
||||
# Get new $SNAP_TOKEN with:
|
||||
# $ snapcraft export-login --snaps bitwarden --acls package_push,package_release -
|
||||
- sh: |
|
||||
if [ "${SNAP_TOKEN}" != "" -a "${PROD_DEPLOY}" == "true" ]
|
||||
then
|
||||
sudo snap install snapcraft --classic
|
||||
echo "$SNAP_TOKEN" | snapcraft login --with -
|
||||
fi
|
||||
- ps: |
|
||||
if($isWindows -and $env:CHOCO_API_KEY -ne $null -and $env:PROD_DEPLOY -eq "true") {
|
||||
choco apikey --key $env:CHOCO_API_KEY --source https://push.chocolatey.org/
|
||||
}
|
||||
|
||||
build_script:
|
||||
- npm install
|
||||
- ps: |
|
||||
if($isLinux) {
|
||||
npm run dist:lin
|
||||
Push-AppveyorArtifact ./dist/Bitwarden-${env:PACKAGE_VERSION}-x86_64.AppImage
|
||||
Push-AppveyorArtifact ./dist/bitwarden_${env:PACKAGE_VERSION}_amd64.snap
|
||||
Push-AppveyorArtifact ./dist/Bitwarden-${env:PACKAGE_VERSION}-amd64.deb
|
||||
Push-AppveyorArtifact ./dist/Bitwarden-${env:PACKAGE_VERSION}-x64.freebsd
|
||||
Push-AppveyorArtifact ./dist/Bitwarden-${env:PACKAGE_VERSION}-x86_64.rpm
|
||||
}
|
||||
else {
|
||||
npm run dist:win:ci
|
||||
Rename-Item -Path .\dist\Bitwarden-${env:PACKAGE_VERSION}-x64.appx `
|
||||
-NewName Bitwarden-${env:PACKAGE_VERSION}-x64-store.appx
|
||||
Rename-Item -Path .\dist\Bitwarden-${env:PACKAGE_VERSION}-ia32.appx `
|
||||
-NewName Bitwarden-${env:PACKAGE_VERSION}-ia32-store.appx
|
||||
Push-AppveyorArtifact .\dist\Bitwarden-Portable-${env:PACKAGE_VERSION}.exe
|
||||
Push-AppveyorArtifact .\dist\nsis-web\Bitwarden-Installer-${env:PACKAGE_VERSION}.exe
|
||||
Push-AppveyorArtifact .\dist\Bitwarden-${env:PACKAGE_VERSION}-x64-store.appx
|
||||
Push-AppveyorArtifact .\dist\Bitwarden-${env:PACKAGE_VERSION}-ia32-store.appx
|
||||
}
|
||||
|
||||
after_build:
|
||||
- ps: |
|
||||
if($env:PROD_DEPLOY -eq "true") {
|
||||
if($isLinux) {
|
||||
echo "Deploy Linux..."
|
||||
./scripts/snap-update.ps1 -version $env:PACKAGE_VERSION
|
||||
}
|
||||
else {
|
||||
echo "Deploy Windows..."
|
||||
.\scripts\choco-update.ps1 -version $env:PACKAGE_VERSION
|
||||
Push-AppveyorArtifact .\dist\chocolatey\bitwarden.${env:PACKAGE_VERSION}.nupkg
|
||||
}
|
||||
}
|
||||
- sh: |
|
||||
if [ "${SNAP_TOKEN}" != "" -a "${PROD_DEPLOY}" == "true" ]
|
||||
then
|
||||
snapcraft logout
|
||||
fi
|
||||
|
||||
on_finish:
|
||||
- ps: |
|
||||
if($isWindows -and $env:DEBUG_RDP -eq "true") {
|
||||
$blockRdp = $true
|
||||
iex ((new-object net.webclient).DownloadString(`
|
||||
'https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
|
||||
}
|
||||
|
||||
for:
|
||||
-
|
||||
matrix:
|
||||
only:
|
||||
- image: Visual Studio 2017
|
||||
cache:
|
||||
- '%LOCALAPPDATA%\electron'
|
||||
- '%LOCALAPPDATA%\electron-builder'
|
||||
|
||||
-
|
||||
matrix:
|
||||
only:
|
||||
- image: Ubuntu1804
|
||||
cache:
|
||||
- '/home/appveyor/.cache/electron'
|
||||
- '/home/appveyor/.cache/electron-builder'
|
||||
|
||||
deploy:
|
||||
tag: $(APPVEYOR_REPO_TAG_NAME)
|
||||
release: $(RELEASE_NAME)
|
||||
provider: GitHub
|
||||
auth_token: $(GH_TOKEN)
|
||||
artifact: .*(\.nupkg|_store\.appx)$
|
||||
force_update: true
|
||||
on:
|
||||
branch: master
|
||||
APPVEYOR_REPO_TAG: true
|
||||
PROD_DEPLOY: true
|
|
@ -1,5 +1,9 @@
|
|||
project_id_env: _CROWDIN_PROJECT_ID
|
||||
api_token_env: CROWDIN_API_TOKEN
|
||||
preserve_hierarchy: true
|
||||
files:
|
||||
- source: /src/locales/en/messages.json
|
||||
dest: /src/locales/en/%original_file_name%
|
||||
translation: /src/locales/%two_letters_code%/%original_file_name%
|
||||
update_option: update_as_unapproved
|
||||
languages_mapping:
|
||||
|
@ -9,3 +13,4 @@ files:
|
|||
zh-CN: zh_CN
|
||||
zh-TW: zh_TW
|
||||
en-GB: en_GB
|
||||
en-IN: en_IN
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
target
|
||||
index.node
|
||||
**/node_modules
|
||||
**/.DS_Store
|
||||
npm-debug.log*
|
||||
*.node
|
|
@ -0,0 +1,946 @@
|
|||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 3
|
||||
|
||||
[[package]]
|
||||
name = "aho-corasick"
|
||||
version = "0.7.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f"
|
||||
dependencies = [
|
||||
"memchr",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "anyhow"
|
||||
version = "1.0.55"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "159bb86af3a200e19a068f4224eae4c8bb2d0fa054c7e5d1cacd5cef95e684cd"
|
||||
|
||||
[[package]]
|
||||
name = "bitflags"
|
||||
version = "1.3.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
|
||||
|
||||
[[package]]
|
||||
name = "bytes"
|
||||
version = "1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8"
|
||||
|
||||
[[package]]
|
||||
name = "cc"
|
||||
version = "1.0.73"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11"
|
||||
|
||||
[[package]]
|
||||
name = "cfg-expr"
|
||||
version = "0.10.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5e068cb2806bbc15b439846dc16c5f89f8599f2c3e4d73d4449d38f9b2f0b6c5"
|
||||
dependencies = [
|
||||
"smallvec",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cfg-if"
|
||||
version = "1.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
||||
|
||||
[[package]]
|
||||
name = "codespan-reporting"
|
||||
version = "0.11.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
|
||||
dependencies = [
|
||||
"termcolor",
|
||||
"unicode-width",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "convert_case"
|
||||
version = "0.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fb4a24b1aaf0fd0ce8b45161144d6f42cd91677fd5940fd431183eb023b3a2b8"
|
||||
|
||||
[[package]]
|
||||
name = "core-foundation"
|
||||
version = "0.9.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
|
||||
dependencies = [
|
||||
"core-foundation-sys",
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "core-foundation-sys"
|
||||
version = "0.8.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc"
|
||||
|
||||
[[package]]
|
||||
name = "ctor"
|
||||
version = "0.1.21"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ccc0a48a9b826acdf4028595adc9db92caea352f7af011a3034acd172a52a0aa"
|
||||
dependencies = [
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cxx"
|
||||
version = "1.0.66"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ce2295fe8865279f404147e9b2328e5af0ad11a2c016e58c13acfd48a07d8a55"
|
||||
dependencies = [
|
||||
"cc",
|
||||
"cxxbridge-flags",
|
||||
"cxxbridge-macro",
|
||||
"link-cplusplus",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cxx-build"
|
||||
version = "1.0.66"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0aaaa055d4908326f1b4524b23ae53758019b806c0c4f382ea240982e9766b26"
|
||||
dependencies = [
|
||||
"cc",
|
||||
"codespan-reporting",
|
||||
"once_cell",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"scratch",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cxxbridge-flags"
|
||||
version = "1.0.66"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0a670224c6686471df12560a0b97a08145082e70bd38e2b0b5383b79e46c3da7"
|
||||
|
||||
[[package]]
|
||||
name = "cxxbridge-macro"
|
||||
version = "1.0.66"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7b700096ca0dece28d9535fdb17ab784a8ae155d7f29d39c273643e6292c9620"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "desktop_native"
|
||||
version = "0.0.0"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"core-foundation",
|
||||
"gio",
|
||||
"keytar",
|
||||
"libsecret",
|
||||
"napi",
|
||||
"napi-build",
|
||||
"napi-derive",
|
||||
"scopeguard",
|
||||
"security-framework",
|
||||
"security-framework-sys",
|
||||
"tokio",
|
||||
"widestring",
|
||||
"windows 0.32.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "futures-channel"
|
||||
version = "0.3.21"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c3083ce4b914124575708913bca19bfe887522d6e2e6d0952943f5eac4a74010"
|
||||
dependencies = [
|
||||
"futures-core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "futures-core"
|
||||
version = "0.3.21"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3"
|
||||
|
||||
[[package]]
|
||||
name = "futures-executor"
|
||||
version = "0.3.21"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9420b90cfa29e327d0429f19be13e7ddb68fa1cccb09d65e5706b8c7a749b8a6"
|
||||
dependencies = [
|
||||
"futures-core",
|
||||
"futures-task",
|
||||
"futures-util",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "futures-io"
|
||||
version = "0.3.21"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b"
|
||||
|
||||
[[package]]
|
||||
name = "futures-task"
|
||||
version = "0.3.21"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a"
|
||||
|
||||
[[package]]
|
||||
name = "futures-util"
|
||||
version = "0.3.21"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a"
|
||||
dependencies = [
|
||||
"futures-core",
|
||||
"futures-task",
|
||||
"pin-project-lite",
|
||||
"pin-utils",
|
||||
"slab",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "gio"
|
||||
version = "0.15.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "96efd8a1c00d890f6b45671916e165b5e43ccec61957d443aff6d7e44f62d348"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"futures-channel",
|
||||
"futures-core",
|
||||
"futures-io",
|
||||
"gio-sys",
|
||||
"glib",
|
||||
"libc",
|
||||
"once_cell",
|
||||
"thiserror",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "gio-sys"
|
||||
version = "0.15.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1d0fa5052773f5a56b8ae47dab09d040f5d9ce1311f4f99006e16e9a08269296"
|
||||
dependencies = [
|
||||
"glib-sys",
|
||||
"gobject-sys",
|
||||
"libc",
|
||||
"system-deps",
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "glib"
|
||||
version = "0.15.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "aa570813c504bdf7539a9400180c2dd4b789a819556fb86da7226d7d1b037b49"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"futures-channel",
|
||||
"futures-core",
|
||||
"futures-executor",
|
||||
"futures-task",
|
||||
"glib-macros",
|
||||
"glib-sys",
|
||||
"gobject-sys",
|
||||
"libc",
|
||||
"once_cell",
|
||||
"smallvec",
|
||||
"thiserror",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "glib-macros"
|
||||
version = "0.15.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "41bfd8d227dead0829ac142454e97531b93f576d0805d779c42bfd799c65c572"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"heck",
|
||||
"proc-macro-crate",
|
||||
"proc-macro-error",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "glib-sys"
|
||||
version = "0.15.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f4366377bd56697de8aaee24e673c575d2694d72e7756324ded2b0428829a7b8"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"system-deps",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "gobject-sys"
|
||||
version = "0.15.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "df6859463843c20cf3837e3a9069b6ab2051aeeadf4c899d33344f4aea83189a"
|
||||
dependencies = [
|
||||
"glib-sys",
|
||||
"libc",
|
||||
"system-deps",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "heck"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9"
|
||||
|
||||
[[package]]
|
||||
name = "hermit-abi"
|
||||
version = "0.1.19"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
|
||||
dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "keytar"
|
||||
version = "0.1.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d361c55fba09829ac620b040f5425bf239b1030c3d6820a84acac8da867dca4d"
|
||||
dependencies = [
|
||||
"keytar-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "keytar-sys"
|
||||
version = "0.1.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fe908c6896705a1cb516cd6a5d956c63f08d95ace81b93253a98cd93e1e6a65a"
|
||||
dependencies = [
|
||||
"cc",
|
||||
"cxx",
|
||||
"cxx-build",
|
||||
"pkg-config",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "lazy_static"
|
||||
version = "1.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
|
||||
|
||||
[[package]]
|
||||
name = "libc"
|
||||
version = "0.2.119"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1bf2e165bb3457c8e098ea76f3e3bc9db55f87aa90d52d0e6be741470916aaa4"
|
||||
|
||||
[[package]]
|
||||
name = "libsecret"
|
||||
version = "0.1.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d4af5a2342942fa42d706a424e9f9914287fb8317132750fd73a241140ac38c1"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"gio",
|
||||
"glib",
|
||||
"libc",
|
||||
"libsecret-sys",
|
||||
"once_cell",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "libsecret-sys"
|
||||
version = "0.1.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "287d2a0fcd95e4d7b0ac6fc9f802691a790d7e522138713b0cacebc4e63cab91"
|
||||
dependencies = [
|
||||
"gio-sys",
|
||||
"glib-sys",
|
||||
"gobject-sys",
|
||||
"libc",
|
||||
"pkg-config",
|
||||
"system-deps",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "link-cplusplus"
|
||||
version = "1.0.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f8cae2cd7ba2f3f63938b9c724475dfb7b9861b545a90324476324ed21dbc8c8"
|
||||
dependencies = [
|
||||
"cc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "lock_api"
|
||||
version = "0.4.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "88943dd7ef4a2e5a4bfa2753aaab3013e34ce2533d1996fb18ef591e315e2b3b"
|
||||
dependencies = [
|
||||
"scopeguard",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "log"
|
||||
version = "0.4.14"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "memchr"
|
||||
version = "2.4.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a"
|
||||
|
||||
[[package]]
|
||||
name = "mio"
|
||||
version = "0.8.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ba272f85fa0b41fc91872be579b3bbe0f56b792aa361a380eb669469f68dafb2"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"log",
|
||||
"miow",
|
||||
"ntapi",
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "miow"
|
||||
version = "0.3.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21"
|
||||
dependencies = [
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "napi"
|
||||
version = "2.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "17ec66e60f000c78dd7c6215b6fa260e0591e09805024332bc5b3f55acc12244"
|
||||
dependencies = [
|
||||
"ctor",
|
||||
"lazy_static",
|
||||
"napi-sys",
|
||||
"tokio",
|
||||
"windows 0.30.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "napi-build"
|
||||
version = "1.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ebd4419172727423cf30351406c54f6cc1b354a2cfb4f1dba3e6cd07f6d5522b"
|
||||
|
||||
[[package]]
|
||||
name = "napi-derive"
|
||||
version = "2.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "74ac5287a5e94a8728fc82d16c5127acc5eb5b8ad6404ef5f82d6a4ce8d5bdd2"
|
||||
dependencies = [
|
||||
"convert_case",
|
||||
"napi-derive-backend",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "napi-derive-backend"
|
||||
version = "1.0.25"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "427f4f04525635cdf22005d1be62d6d671bcb5550d694a1efb480a315422b4af"
|
||||
dependencies = [
|
||||
"convert_case",
|
||||
"once_cell",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"regex",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "napi-sys"
|
||||
version = "2.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8a385494dac3c52cbcacb393bb3b42669e7db8ab240c7ad5115f549eb061f2cc"
|
||||
|
||||
[[package]]
|
||||
name = "ntapi"
|
||||
version = "0.3.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c28774a7fd2fbb4f0babd8237ce554b73af68021b5f695a3cebd6c59bac0980f"
|
||||
dependencies = [
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "num_cpus"
|
||||
version = "1.13.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1"
|
||||
dependencies = [
|
||||
"hermit-abi",
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "once_cell"
|
||||
version = "1.9.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "da32515d9f6e6e489d7bc9d84c71b060db7247dc035bbe44eac88cf87486d8d5"
|
||||
|
||||
[[package]]
|
||||
name = "parking_lot"
|
||||
version = "0.12.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "87f5ec2493a61ac0506c0f4199f99070cbe83857b0337006a30f3e6719b8ef58"
|
||||
dependencies = [
|
||||
"lock_api",
|
||||
"parking_lot_core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "parking_lot_core"
|
||||
version = "0.9.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "28141e0cc4143da2443301914478dc976a61ffdb3f043058310c70df2fed8954"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"libc",
|
||||
"redox_syscall",
|
||||
"smallvec",
|
||||
"windows-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pin-project-lite"
|
||||
version = "0.2.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e280fbe77cc62c91527259e9442153f4688736748d24660126286329742b4c6c"
|
||||
|
||||
[[package]]
|
||||
name = "pin-utils"
|
||||
version = "0.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
|
||||
|
||||
[[package]]
|
||||
name = "pkg-config"
|
||||
version = "0.3.24"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "58893f751c9b0412871a09abd62ecd2a00298c6c83befa223ef98c52aef40cbe"
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro-crate"
|
||||
version = "1.1.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a"
|
||||
dependencies = [
|
||||
"thiserror",
|
||||
"toml",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro-error"
|
||||
version = "1.0.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
|
||||
dependencies = [
|
||||
"proc-macro-error-attr",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"version_check",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro-error-attr"
|
||||
version = "1.0.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"version_check",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "1.0.36"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029"
|
||||
dependencies = [
|
||||
"unicode-xid",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "quote"
|
||||
version = "1.0.15"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "864d3e96a899863136fc6e99f3d7cae289dafe43bf2c5ac19b70df7210c0a145"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "redox_syscall"
|
||||
version = "0.2.10"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "regex"
|
||||
version = "1.5.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461"
|
||||
dependencies = [
|
||||
"aho-corasick",
|
||||
"memchr",
|
||||
"regex-syntax",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "regex-syntax"
|
||||
version = "0.6.25"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b"
|
||||
|
||||
[[package]]
|
||||
name = "scopeguard"
|
||||
version = "1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
|
||||
|
||||
[[package]]
|
||||
name = "scratch"
|
||||
version = "1.0.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "96311ef4a16462c757bb6a39152c40f58f31cd2602a40fceb937e2bc34e6cbab"
|
||||
|
||||
[[package]]
|
||||
name = "security-framework"
|
||||
version = "2.6.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2dc14f172faf8a0194a3aded622712b0de276821addc574fa54fc0a1167e10dc"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"core-foundation",
|
||||
"core-foundation-sys",
|
||||
"libc",
|
||||
"security-framework-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "security-framework-sys"
|
||||
version = "2.6.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556"
|
||||
dependencies = [
|
||||
"core-foundation-sys",
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde"
|
||||
version = "1.0.136"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789"
|
||||
|
||||
[[package]]
|
||||
name = "signal-hook-registry"
|
||||
version = "1.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0"
|
||||
dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "slab"
|
||||
version = "0.4.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9def91fd1e018fe007022791f865d0ccc9b3a0d5001e01aabb8b40e46000afb5"
|
||||
|
||||
[[package]]
|
||||
name = "smallvec"
|
||||
version = "1.8.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83"
|
||||
|
||||
[[package]]
|
||||
name = "socket2"
|
||||
version = "0.4.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "1.0.86"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8a65b3f4ffa0092e9887669db0eae07941f023991ab58ea44da8fe8e2d511c6b"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"unicode-xid",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "system-deps"
|
||||
version = "6.0.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a1a45a1c4c9015217e12347f2a411b57ce2c4fc543913b14b6fe40483328e709"
|
||||
dependencies = [
|
||||
"cfg-expr",
|
||||
"heck",
|
||||
"pkg-config",
|
||||
"toml",
|
||||
"version-compare",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "termcolor"
|
||||
version = "1.1.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755"
|
||||
dependencies = [
|
||||
"winapi-util",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "thiserror"
|
||||
version = "1.0.30"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417"
|
||||
dependencies = [
|
||||
"thiserror-impl",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "thiserror-impl"
|
||||
version = "1.0.30"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tokio"
|
||||
version = "1.17.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2af73ac49756f3f7c01172e34a23e5d0216f6c32333757c2c61feb2bbff5a5ee"
|
||||
dependencies = [
|
||||
"bytes",
|
||||
"libc",
|
||||
"memchr",
|
||||
"mio",
|
||||
"num_cpus",
|
||||
"once_cell",
|
||||
"parking_lot",
|
||||
"pin-project-lite",
|
||||
"signal-hook-registry",
|
||||
"socket2",
|
||||
"tokio-macros",
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tokio-macros"
|
||||
version = "1.7.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "toml"
|
||||
version = "0.5.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa"
|
||||
dependencies = [
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "unicode-width"
|
||||
version = "0.1.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973"
|
||||
|
||||
[[package]]
|
||||
name = "unicode-xid"
|
||||
version = "0.2.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
|
||||
|
||||
[[package]]
|
||||
name = "version-compare"
|
||||
version = "0.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fe88247b92c1df6b6de80ddc290f3976dbdf2f5f5d3fd049a9fb598c6dd5ca73"
|
||||
|
||||
[[package]]
|
||||
name = "version_check"
|
||||
version = "0.9.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
|
||||
|
||||
[[package]]
|
||||
name = "widestring"
|
||||
version = "0.5.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "17882f045410753661207383517a6f62ec3dbeb6a4ed2acce01f0728238d1983"
|
||||
|
||||
[[package]]
|
||||
name = "winapi"
|
||||
version = "0.3.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
|
||||
dependencies = [
|
||||
"winapi-i686-pc-windows-gnu",
|
||||
"winapi-x86_64-pc-windows-gnu",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "winapi-i686-pc-windows-gnu"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
|
||||
|
||||
[[package]]
|
||||
name = "winapi-util"
|
||||
version = "0.1.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
|
||||
dependencies = [
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "winapi-x86_64-pc-windows-gnu"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
|
||||
|
||||
[[package]]
|
||||
name = "windows"
|
||||
version = "0.30.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b749ebd2304aa012c5992d11a25d07b406bdbe5f79d371cb7a918ce501a19eb0"
|
||||
dependencies = [
|
||||
"windows_aarch64_msvc 0.30.0",
|
||||
"windows_i686_gnu 0.30.0",
|
||||
"windows_i686_msvc 0.30.0",
|
||||
"windows_x86_64_gnu 0.30.0",
|
||||
"windows_x86_64_msvc 0.30.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows"
|
||||
version = "0.32.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fbedf6db9096bc2364adce0ae0aa636dcd89f3c3f2cd67947062aaf0ca2a10ec"
|
||||
dependencies = [
|
||||
"windows_aarch64_msvc 0.32.0",
|
||||
"windows_i686_gnu 0.32.0",
|
||||
"windows_i686_msvc 0.32.0",
|
||||
"windows_x86_64_gnu 0.32.0",
|
||||
"windows_x86_64_msvc 0.32.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-sys"
|
||||
version = "0.32.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3df6e476185f92a12c072be4a189a0210dcdcf512a1891d6dff9edb874deadc6"
|
||||
dependencies = [
|
||||
"windows_aarch64_msvc 0.32.0",
|
||||
"windows_i686_gnu 0.32.0",
|
||||
"windows_i686_msvc 0.32.0",
|
||||
"windows_x86_64_gnu 0.32.0",
|
||||
"windows_x86_64_msvc 0.32.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows_aarch64_msvc"
|
||||
version = "0.30.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "29277a4435d642f775f63c7d1faeb927adba532886ce0287bd985bffb16b6bca"
|
||||
|
||||
[[package]]
|
||||
name = "windows_aarch64_msvc"
|
||||
version = "0.32.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d8e92753b1c443191654ec532f14c199742964a061be25d77d7a96f09db20bf5"
|
||||
|
||||
[[package]]
|
||||
name = "windows_i686_gnu"
|
||||
version = "0.30.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1145e1989da93956c68d1864f32fb97c8f561a8f89a5125f6a2b7ea75524e4b8"
|
||||
|
||||
[[package]]
|
||||
name = "windows_i686_gnu"
|
||||
version = "0.32.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6a711c68811799e017b6038e0922cb27a5e2f43a2ddb609fe0b6f3eeda9de615"
|
||||
|
||||
[[package]]
|
||||
name = "windows_i686_msvc"
|
||||
version = "0.30.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d4a09e3a0d4753b73019db171c1339cd4362c8c44baf1bcea336235e955954a6"
|
||||
|
||||
[[package]]
|
||||
name = "windows_i686_msvc"
|
||||
version = "0.32.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "146c11bb1a02615db74680b32a68e2d61f553cc24c4eb5b4ca10311740e44172"
|
||||
|
||||
[[package]]
|
||||
name = "windows_x86_64_gnu"
|
||||
version = "0.30.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8ca64fcb0220d58db4c119e050e7af03c69e6f4f415ef69ec1773d9aab422d5a"
|
||||
|
||||
[[package]]
|
||||
name = "windows_x86_64_gnu"
|
||||
version = "0.32.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c912b12f7454c6620635bbff3450962753834be2a594819bd5e945af18ec64bc"
|
||||
|
||||
[[package]]
|
||||
name = "windows_x86_64_msvc"
|
||||
version = "0.30.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "08cabc9f0066848fef4bc6a1c1668e6efce38b661d2aeec75d18d8617eebb5f1"
|
||||
|
||||
[[package]]
|
||||
name = "windows_x86_64_msvc"
|
||||
version = "0.32.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "504a2476202769977a040c6364301a3f65d0cc9e3fb08600b2bda150a0488316"
|
|
@ -0,0 +1,43 @@
|
|||
[package]
|
||||
edition = "2021"
|
||||
exclude = ["index.node"]
|
||||
license = "GPL-3.0"
|
||||
name = "desktop_native"
|
||||
version = "0.0.0"
|
||||
|
||||
[lib]
|
||||
crate-type = ["cdylib"]
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
anyhow = "1.0"
|
||||
napi = {version = "2", features = ["async"]}
|
||||
napi-derive = "2"
|
||||
scopeguard = "1.1.0"
|
||||
tokio = {version = "1.17.0", features = ["full"]}
|
||||
|
||||
[build-dependencies]
|
||||
napi-build = "1"
|
||||
|
||||
[target.'cfg(windows)'.dependencies]
|
||||
widestring = "0.5.1"
|
||||
windows = {version = "0.32.0", features = [
|
||||
"alloc",
|
||||
"Foundation",
|
||||
"Storage_Streams",
|
||||
"Win32_Foundation",
|
||||
"Win32_Security_Credentials",
|
||||
]}
|
||||
|
||||
[target.'cfg(windows)'.dev-dependencies]
|
||||
keytar = "0.1.6"
|
||||
|
||||
[target.'cfg(target_os = "macos")'.dependencies]
|
||||
core-foundation = "0.9.3"
|
||||
security-framework = "2.6.1"
|
||||
security-framework-sys = "2.6.1"
|
||||
|
||||
[target.'cfg(target_os = "linux")'.dependencies]
|
||||
gio = "0.15.6"
|
||||
libsecret = "0.1.4"
|
|
@ -0,0 +1,22 @@
|
|||
/* eslint-disable @typescript-eslint/no-var-requires */
|
||||
const child_process = require("child_process");
|
||||
const process = require("process");
|
||||
|
||||
let targets = [];
|
||||
switch (process.platform) {
|
||||
case "win32":
|
||||
targets = ["i686-pc-windows-msvc", "x86_64-pc-windows-msvc", "aarch64-pc-windows-msvc"];
|
||||
break;
|
||||
|
||||
case "darwin":
|
||||
targets = ["x86_64-apple-darwin", "aarch64-apple-darwin"];
|
||||
break;
|
||||
|
||||
default:
|
||||
targets = ['x86_64-unknown-linux-gnu'];
|
||||
break;
|
||||
}
|
||||
|
||||
targets.forEach(target => {
|
||||
child_process.execSync(`npm run build -- --target ${target}`, {stdio: 'inherit'});
|
||||
});
|
|
@ -0,0 +1,5 @@
|
|||
extern crate napi_build;
|
||||
|
||||
fn main() {
|
||||
napi_build::setup();
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
/* tslint:disable */
|
||||
/* eslint-disable */
|
||||
|
||||
/* auto-generated by NAPI-RS */
|
||||
|
||||
export namespace passwords {
|
||||
/** Fetch the stored password from the keychain. */
|
||||
export function getPassword(service: string, account: string): Promise<string>
|
||||
/** Fetch the stored password from the keychain that was stored with Keytar. */
|
||||
export function getPasswordKeytar(service: string, account: string): Promise<string>
|
||||
/** Save the password to the keychain. Adds an entry if none exists otherwise updates the existing entry. */
|
||||
export function setPassword(service: string, account: string, password: string): Promise<void>
|
||||
/** Delete the stored password from the keychain. */
|
||||
export function deletePassword(service: string, account: string): Promise<void>
|
||||
}
|
|
@ -0,0 +1,241 @@
|
|||
const { existsSync, readFileSync } = require('fs')
|
||||
const { join } = require('path')
|
||||
|
||||
const { platform, arch } = process
|
||||
|
||||
let nativeBinding = null
|
||||
let localFileExisted = false
|
||||
let loadError = null
|
||||
|
||||
function isMusl() {
|
||||
// For Node 10
|
||||
if (!process.report || typeof process.report.getReport !== 'function') {
|
||||
try {
|
||||
return readFileSync('/usr/bin/ldd', 'utf8').includes('musl')
|
||||
} catch (e) {
|
||||
return true
|
||||
}
|
||||
} else {
|
||||
const { glibcVersionRuntime } = process.report.getReport().header
|
||||
return !glibcVersionRuntime
|
||||
}
|
||||
}
|
||||
|
||||
switch (platform) {
|
||||
case 'android':
|
||||
switch (arch) {
|
||||
case 'arm64':
|
||||
localFileExisted = existsSync(join(__dirname, 'desktop_native.android-arm64.node'))
|
||||
try {
|
||||
if (localFileExisted) {
|
||||
nativeBinding = require('./desktop_native.android-arm64.node')
|
||||
} else {
|
||||
nativeBinding = require('@bitwarden/desktop_native-android-arm64')
|
||||
}
|
||||
} catch (e) {
|
||||
loadError = e
|
||||
}
|
||||
break
|
||||
case 'arm':
|
||||
localFileExisted = existsSync(join(__dirname, 'desktop_native.android-arm-eabi.node'))
|
||||
try {
|
||||
if (localFileExisted) {
|
||||
nativeBinding = require('./desktop_native.android-arm-eabi.node')
|
||||
} else {
|
||||
nativeBinding = require('@bitwarden/desktop_native-android-arm-eabi')
|
||||
}
|
||||
} catch (e) {
|
||||
loadError = e
|
||||
}
|
||||
break
|
||||
default:
|
||||
throw new Error(`Unsupported architecture on Android ${arch}`)
|
||||
}
|
||||
break
|
||||
case 'win32':
|
||||
switch (arch) {
|
||||
case 'x64':
|
||||
localFileExisted = existsSync(
|
||||
join(__dirname, 'desktop_native.win32-x64-msvc.node')
|
||||
)
|
||||
try {
|
||||
if (localFileExisted) {
|
||||
nativeBinding = require('./desktop_native.win32-x64-msvc.node')
|
||||
} else {
|
||||
nativeBinding = require('@bitwarden/desktop_native-win32-x64-msvc')
|
||||
}
|
||||
} catch (e) {
|
||||
loadError = e
|
||||
}
|
||||
break
|
||||
case 'ia32':
|
||||
localFileExisted = existsSync(
|
||||
join(__dirname, 'desktop_native.win32-ia32-msvc.node')
|
||||
)
|
||||
try {
|
||||
if (localFileExisted) {
|
||||
nativeBinding = require('./desktop_native.win32-ia32-msvc.node')
|
||||
} else {
|
||||
nativeBinding = require('@bitwarden/desktop_native-win32-ia32-msvc')
|
||||
}
|
||||
} catch (e) {
|
||||
loadError = e
|
||||
}
|
||||
break
|
||||
case 'arm64':
|
||||
localFileExisted = existsSync(
|
||||
join(__dirname, 'desktop_native.win32-arm64-msvc.node')
|
||||
)
|
||||
try {
|
||||
if (localFileExisted) {
|
||||
nativeBinding = require('./desktop_native.win32-arm64-msvc.node')
|
||||
} else {
|
||||
nativeBinding = require('@bitwarden/desktop_native-win32-arm64-msvc')
|
||||
}
|
||||
} catch (e) {
|
||||
loadError = e
|
||||
}
|
||||
break
|
||||
default:
|
||||
throw new Error(`Unsupported architecture on Windows: ${arch}`)
|
||||
}
|
||||
break
|
||||
case 'darwin':
|
||||
switch (arch) {
|
||||
case 'x64':
|
||||
localFileExisted = existsSync(join(__dirname, 'desktop_native.darwin-x64.node'))
|
||||
try {
|
||||
if (localFileExisted) {
|
||||
nativeBinding = require('./desktop_native.darwin-x64.node')
|
||||
} else {
|
||||
nativeBinding = require('@bitwarden/desktop_native-darwin-x64')
|
||||
}
|
||||
} catch (e) {
|
||||
loadError = e
|
||||
}
|
||||
break
|
||||
case 'arm64':
|
||||
localFileExisted = existsSync(
|
||||
join(__dirname, 'desktop_native.darwin-arm64.node')
|
||||
)
|
||||
try {
|
||||
if (localFileExisted) {
|
||||
nativeBinding = require('./desktop_native.darwin-arm64.node')
|
||||
} else {
|
||||
nativeBinding = require('@bitwarden/desktop_native-darwin-arm64')
|
||||
}
|
||||
} catch (e) {
|
||||
loadError = e
|
||||
}
|
||||
break
|
||||
default:
|
||||
throw new Error(`Unsupported architecture on macOS: ${arch}`)
|
||||
}
|
||||
break
|
||||
case 'freebsd':
|
||||
if (arch !== 'x64') {
|
||||
throw new Error(`Unsupported architecture on FreeBSD: ${arch}`)
|
||||
}
|
||||
localFileExisted = existsSync(join(__dirname, 'desktop_native.freebsd-x64.node'))
|
||||
try {
|
||||
if (localFileExisted) {
|
||||
nativeBinding = require('./desktop_native.freebsd-x64.node')
|
||||
} else {
|
||||
nativeBinding = require('@bitwarden/desktop_native-freebsd-x64')
|
||||
}
|
||||
} catch (e) {
|
||||
loadError = e
|
||||
}
|
||||
break
|
||||
case 'linux':
|
||||
switch (arch) {
|
||||
case 'x64':
|
||||
if (isMusl()) {
|
||||
localFileExisted = existsSync(
|
||||
join(__dirname, 'desktop_native.linux-x64-musl.node')
|
||||
)
|
||||
try {
|
||||
if (localFileExisted) {
|
||||
nativeBinding = require('./desktop_native.linux-x64-musl.node')
|
||||
} else {
|
||||
nativeBinding = require('@bitwarden/desktop_native-linux-x64-musl')
|
||||
}
|
||||
} catch (e) {
|
||||
loadError = e
|
||||
}
|
||||
} else {
|
||||
localFileExisted = existsSync(
|
||||
join(__dirname, 'desktop_native.linux-x64-gnu.node')
|
||||
)
|
||||
try {
|
||||
if (localFileExisted) {
|
||||
nativeBinding = require('./desktop_native.linux-x64-gnu.node')
|
||||
} else {
|
||||
nativeBinding = require('@bitwarden/desktop_native-linux-x64-gnu')
|
||||
}
|
||||
} catch (e) {
|
||||
loadError = e
|
||||
}
|
||||
}
|
||||
break
|
||||
case 'arm64':
|
||||
if (isMusl()) {
|
||||
localFileExisted = existsSync(
|
||||
join(__dirname, 'desktop_native.linux-arm64-musl.node')
|
||||
)
|
||||
try {
|
||||
if (localFileExisted) {
|
||||
nativeBinding = require('./desktop_native.linux-arm64-musl.node')
|
||||
} else {
|
||||
nativeBinding = require('@bitwarden/desktop_native-linux-arm64-musl')
|
||||
}
|
||||
} catch (e) {
|
||||
loadError = e
|
||||
}
|
||||
} else {
|
||||
localFileExisted = existsSync(
|
||||
join(__dirname, 'desktop_native.linux-arm64-gnu.node')
|
||||
)
|
||||
try {
|
||||
if (localFileExisted) {
|
||||
nativeBinding = require('./desktop_native.linux-arm64-gnu.node')
|
||||
} else {
|
||||
nativeBinding = require('@bitwarden/desktop_native-linux-arm64-gnu')
|
||||
}
|
||||
} catch (e) {
|
||||
loadError = e
|
||||
}
|
||||
}
|
||||
break
|
||||
case 'arm':
|
||||
localFileExisted = existsSync(
|
||||
join(__dirname, 'desktop_native.linux-arm-gnueabihf.node')
|
||||
)
|
||||
try {
|
||||
if (localFileExisted) {
|
||||
nativeBinding = require('./desktop_native.linux-arm-gnueabihf.node')
|
||||
} else {
|
||||
nativeBinding = require('@bitwarden/desktop_native-linux-arm-gnueabihf')
|
||||
}
|
||||
} catch (e) {
|
||||
loadError = e
|
||||
}
|
||||
break
|
||||
default:
|
||||
throw new Error(`Unsupported architecture on Linux: ${arch}`)
|
||||
}
|
||||
break
|
||||
default:
|
||||
throw new Error(`Unsupported OS: ${platform}, architecture: ${arch}`)
|
||||
}
|
||||
|
||||
if (!nativeBinding) {
|
||||
if (loadError) {
|
||||
throw loadError
|
||||
}
|
||||
throw new Error(`Failed to load native binding`)
|
||||
}
|
||||
|
||||
const { passwords } = nativeBinding
|
||||
|
||||
module.exports.passwords = passwords
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"name": "@bitwarden/desktop_native",
|
||||
"version": "0.1.0",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "@bitwarden/desktop_native",
|
||||
"version": "0.1.0",
|
||||
"hasInstallScript": true,
|
||||
"license": "GPL-3.0",
|
||||
"devDependencies": {
|
||||
"@napi-rs/cli": "^2.6.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@napi-rs/cli": {
|
||||
"version": "2.6.2",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/cli/-/cli-2.6.2.tgz",
|
||||
"integrity": "sha512-EmH+DQDEBUIoqMim0cc+X96ImtcIZLFjgW5WWORpzYnA9Ug7zNPO7jCLMhIQRd/p5AdWaXrT4SVXc/aip09rKQ==",
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"napi": "scripts/index.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 10"
|
||||
},
|
||||
"funding": {
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/Brooooooklyn"
|
||||
}
|
||||
}
|
||||
},
|
||||
"dependencies": {
|
||||
"@napi-rs/cli": {
|
||||
"version": "2.6.2",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/cli/-/cli-2.6.2.tgz",
|
||||
"integrity": "sha512-EmH+DQDEBUIoqMim0cc+X96ImtcIZLFjgW5WWORpzYnA9Ug7zNPO7jCLMhIQRd/p5AdWaXrT4SVXc/aip09rKQ==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
{
|
||||
"name": "@bitwarden/desktop_native",
|
||||
"version": "0.1.0",
|
||||
"description": "",
|
||||
"main": "index.node",
|
||||
"scripts": {
|
||||
"build": "napi build --release --platform",
|
||||
"build:debug": "napi build --platform",
|
||||
"build:cross-platform": "node build.js",
|
||||
"test": "cargo test"
|
||||
},
|
||||
"author": "",
|
||||
"license": "GPL-3.0",
|
||||
"devDependencies": {
|
||||
"@napi-rs/cli": "^2.6.2"
|
||||
},
|
||||
"napi": {
|
||||
"name": "desktop_native",
|
||||
"triples": {
|
||||
"defaults": true,
|
||||
"additional": [
|
||||
"x86_64-unknown-linux-musl",
|
||||
"aarch64-unknown-linux-gnu",
|
||||
"i686-pc-windows-msvc",
|
||||
"armv7-unknown-linux-gnueabihf",
|
||||
"aarch64-apple-darwin",
|
||||
"aarch64-unknown-linux-musl",
|
||||
"aarch64-pc-windows-msvc"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
#[macro_use]
|
||||
extern crate napi_derive;
|
||||
|
||||
mod password;
|
||||
|
||||
#[napi]
|
||||
pub mod passwords {
|
||||
/// Fetch the stored password from the keychain.
|
||||
#[napi]
|
||||
pub async fn get_password(service: String, account: String) -> napi::Result<String> {
|
||||
super::password::get_password(&service, &account)
|
||||
.map_err(|e| napi::Error::from_reason(e.to_string()))
|
||||
}
|
||||
|
||||
/// Fetch the stored password from the keychain that was stored with Keytar.
|
||||
#[napi]
|
||||
pub async fn get_password_keytar(service: String, account: String) -> napi::Result<String> {
|
||||
super::password::get_password_keytar(&service, &account)
|
||||
.map_err(|e| napi::Error::from_reason(e.to_string()))
|
||||
}
|
||||
|
||||
/// Save the password to the keychain. Adds an entry if none exists otherwise updates the existing entry.
|
||||
#[napi]
|
||||
pub async fn set_password(
|
||||
service: String,
|
||||
account: String,
|
||||
password: String,
|
||||
) -> napi::Result<()> {
|
||||
super::password::set_password(&service, &account, &password)
|
||||
.map_err(|e| napi::Error::from_reason(e.to_string()))
|
||||
}
|
||||
|
||||
/// Delete the stored password from the keychain.
|
||||
#[napi]
|
||||
pub async fn delete_password(service: String, account: String) -> napi::Result<()> {
|
||||
super::password::delete_password(&service, &account)
|
||||
.map_err(|e| napi::Error::from_reason(e.to_string()))
|
||||
}
|
||||
}
|
|
@ -0,0 +1,59 @@
|
|||
use anyhow::Result;
|
||||
use security_framework::passwords::{
|
||||
delete_generic_password, get_generic_password, set_generic_password,
|
||||
};
|
||||
|
||||
pub fn get_password(service: &str, account: &str) -> Result<String> {
|
||||
let result = String::from_utf8(get_generic_password(&service, &account)?)?;
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
pub fn get_password_keytar(service: &str, account: &str) -> Result<String> {
|
||||
get_password(service, account)
|
||||
}
|
||||
|
||||
pub fn set_password(service: &str, account: &str, password: &str) -> Result<()> {
|
||||
let result = set_generic_password(&service, &account, password.as_bytes())?;
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
pub fn delete_password(service: &str, account: &str) -> Result<()> {
|
||||
let result = delete_generic_password(&service, &account)?;
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test() {
|
||||
scopeguard::defer!(delete_password("BitwardenTest", "BitwardenTest").unwrap_or({}););
|
||||
set_password("BitwardenTest", "BitwardenTest", "Random").unwrap();
|
||||
assert_eq!(
|
||||
"Random",
|
||||
get_password("BitwardenTest", "BitwardenTest").unwrap()
|
||||
);
|
||||
delete_password("BitwardenTest", "BitwardenTest").unwrap();
|
||||
|
||||
// Ensure password is deleted
|
||||
match get_password("BitwardenTest", "BitwardenTest") {
|
||||
Ok(_) => panic!("Got a result"),
|
||||
Err(e) => assert_eq!(
|
||||
"The specified item could not be found in the keychain.",
|
||||
e.to_string()
|
||||
),
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_error_no_password() {
|
||||
match get_password("Unknown", "Unknown") {
|
||||
Ok(_) => panic!("Got a result"),
|
||||
Err(e) => assert_eq!(
|
||||
"The specified item could not be found in the keychain.",
|
||||
e.to_string()
|
||||
),
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
#[cfg_attr(target_os = "linux", path = "unix.rs")]
|
||||
#[cfg_attr(target_os = "windows", path = "windows.rs")]
|
||||
#[cfg_attr(target_os = "macos", path = "macos.rs")]
|
||||
mod password;
|
||||
pub use password::*;
|
|
@ -0,0 +1,91 @@
|
|||
use anyhow::{anyhow, Result};
|
||||
use libsecret::{password_clear_sync, password_lookup_sync, password_store_sync, Schema};
|
||||
use std::collections::HashMap;
|
||||
|
||||
pub fn get_password(service: &str, account: &str) -> Result<String> {
|
||||
let res = password_lookup_sync(
|
||||
Some(&get_schema()),
|
||||
build_attributes(service, account),
|
||||
gio::Cancellable::NONE,
|
||||
)?;
|
||||
|
||||
match res {
|
||||
Some(s) => Ok(String::from(s)),
|
||||
None => Err(anyhow!("No password found")),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_password_keytar(service: &str, account: &str) -> Result<String> {
|
||||
get_password(service, account)
|
||||
}
|
||||
|
||||
pub fn set_password(service: &str, account: &str, password: &str) -> Result<()> {
|
||||
let result = password_store_sync(
|
||||
Some(&get_schema()),
|
||||
build_attributes(service, account),
|
||||
Some(&libsecret::COLLECTION_DEFAULT),
|
||||
&format!("{}/{}", service, account),
|
||||
password,
|
||||
gio::Cancellable::NONE,
|
||||
)?;
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
pub fn delete_password(service: &str, account: &str) -> Result<()> {
|
||||
let result = password_clear_sync(
|
||||
Some(&get_schema()),
|
||||
build_attributes(service, account),
|
||||
gio::Cancellable::NONE,
|
||||
)?;
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
fn get_schema() -> Schema {
|
||||
let mut attributes = std::collections::HashMap::new();
|
||||
attributes.insert("service", libsecret::SchemaAttributeType::String);
|
||||
attributes.insert("account", libsecret::SchemaAttributeType::String);
|
||||
|
||||
libsecret::Schema::new(
|
||||
"org.freedesktop.Secret.Generic",
|
||||
libsecret::SchemaFlags::NONE,
|
||||
attributes,
|
||||
)
|
||||
}
|
||||
|
||||
fn build_attributes<'a>(service: &'a str, account: &'a str) -> HashMap<&'a str, &'a str> {
|
||||
let mut attributes = HashMap::new();
|
||||
attributes.insert("service", service);
|
||||
attributes.insert("account", account);
|
||||
|
||||
attributes
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test() {
|
||||
scopeguard::defer!(delete_password("BitwardenTest", "BitwardenTest").unwrap_or({}););
|
||||
set_password("BitwardenTest", "BitwardenTest", "Random").unwrap();
|
||||
assert_eq!(
|
||||
"Random",
|
||||
get_password("BitwardenTest", "BitwardenTest").unwrap()
|
||||
);
|
||||
delete_password("BitwardenTest", "BitwardenTest").unwrap();
|
||||
|
||||
// Ensure password is deleted
|
||||
match get_password("BitwardenTest", "BitwardenTest") {
|
||||
Ok(_) => panic!("Got a result"),
|
||||
Err(e) => assert_eq!("No password found", e.to_string()),
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_error_no_password() {
|
||||
match get_password("BitwardenTest", "BitwardenTest") {
|
||||
Ok(_) => panic!("Got a result"),
|
||||
Err(e) => assert_eq!("No password found", e.to_string()),
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,180 @@
|
|||
use anyhow::{anyhow, Result};
|
||||
use widestring::{U16CString, U16String};
|
||||
use windows::Win32::{
|
||||
Foundation::{GetLastError, ERROR_NOT_FOUND, FILETIME, PWSTR, WIN32_ERROR},
|
||||
Security::Credentials::{
|
||||
CredDeleteW, CredFree, CredReadW, CredWriteW, CREDENTIALW, CRED_FLAGS,
|
||||
CRED_PERSIST_ENTERPRISE, CRED_TYPE_GENERIC,
|
||||
},
|
||||
};
|
||||
|
||||
const CRED_FLAGS_NONE: u32 = 0;
|
||||
|
||||
pub fn get_password<'a>(service: &str, account: &str) -> Result<String> {
|
||||
let target_name = U16CString::from_str(target_name(service, account))?;
|
||||
|
||||
let mut credential: *mut CREDENTIALW = std::ptr::null_mut();
|
||||
let credential_ptr = &mut credential;
|
||||
|
||||
let result = unsafe {
|
||||
CredReadW(
|
||||
PWSTR(target_name.as_ptr()),
|
||||
CRED_TYPE_GENERIC.0,
|
||||
CRED_FLAGS_NONE,
|
||||
credential_ptr,
|
||||
)
|
||||
};
|
||||
|
||||
scopeguard::defer!({
|
||||
unsafe { CredFree(credential as *mut _) };
|
||||
});
|
||||
|
||||
if !result.as_bool() {
|
||||
return Err(anyhow!(convert_error(unsafe { GetLastError() })));
|
||||
}
|
||||
|
||||
let password = unsafe {
|
||||
U16String::from_ptr(
|
||||
(*credential).CredentialBlob as *const u16,
|
||||
(*credential).CredentialBlobSize as usize / 2,
|
||||
)
|
||||
.to_string_lossy()
|
||||
};
|
||||
|
||||
Ok(String::from(password))
|
||||
}
|
||||
|
||||
// Remove this after sufficient releases
|
||||
pub fn get_password_keytar<'a>(service: &str, account: &str) -> Result<String> {
|
||||
let target_name = U16CString::from_str(target_name(service, account))?;
|
||||
|
||||
let mut credential: *mut CREDENTIALW = std::ptr::null_mut();
|
||||
let credential_ptr = &mut credential;
|
||||
|
||||
let result = unsafe {
|
||||
CredReadW(
|
||||
PWSTR(target_name.as_ptr()),
|
||||
CRED_TYPE_GENERIC.0,
|
||||
CRED_FLAGS_NONE,
|
||||
credential_ptr,
|
||||
)
|
||||
};
|
||||
|
||||
scopeguard::defer!({
|
||||
unsafe { CredFree(credential as *mut _) };
|
||||
});
|
||||
|
||||
if !result.as_bool() {
|
||||
return Err(anyhow!(unsafe { GetLastError() }.0.to_string()));
|
||||
}
|
||||
|
||||
let password = unsafe {
|
||||
std::str::from_utf8_unchecked(std::slice::from_raw_parts(
|
||||
(*credential).CredentialBlob,
|
||||
(*credential).CredentialBlobSize as usize,
|
||||
))
|
||||
};
|
||||
|
||||
Ok(String::from(password))
|
||||
}
|
||||
|
||||
pub fn set_password(service: &str, account: &str, password: &str) -> Result<()> {
|
||||
let target_name = U16CString::from_str(target_name(service, account))?;
|
||||
let user_name = U16CString::from_str(account)?;
|
||||
let last_written = FILETIME {
|
||||
dwLowDateTime: 0,
|
||||
dwHighDateTime: 0,
|
||||
};
|
||||
|
||||
let credential = U16CString::from_str(password)?;
|
||||
let credential_len = password.len() as u32 * 2;
|
||||
|
||||
let credential = CREDENTIALW {
|
||||
Flags: CRED_FLAGS(CRED_FLAGS_NONE),
|
||||
Type: CRED_TYPE_GENERIC,
|
||||
TargetName: PWSTR(target_name.as_ptr()),
|
||||
Comment: PWSTR::default(),
|
||||
LastWritten: last_written,
|
||||
CredentialBlobSize: credential_len,
|
||||
CredentialBlob: credential.as_ptr() as *mut u8,
|
||||
Persist: CRED_PERSIST_ENTERPRISE,
|
||||
AttributeCount: 0,
|
||||
Attributes: std::ptr::null_mut(),
|
||||
TargetAlias: PWSTR::default(),
|
||||
UserName: PWSTR(user_name.as_ptr()),
|
||||
};
|
||||
|
||||
let result = unsafe { CredWriteW(&credential, 0) };
|
||||
if !result.as_bool() {
|
||||
return Err(anyhow!(unsafe { GetLastError() }.0.to_string()));
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn delete_password(service: &str, account: &str) -> Result<()> {
|
||||
let target_name = U16CString::from_str(target_name(service, account))?;
|
||||
|
||||
unsafe {
|
||||
CredDeleteW(
|
||||
PWSTR(target_name.as_ptr()),
|
||||
CRED_TYPE_GENERIC.0,
|
||||
CRED_FLAGS_NONE,
|
||||
)
|
||||
.ok()?
|
||||
};
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn target_name(service: &str, account: &str) -> String {
|
||||
format!("{}/{}", service, account)
|
||||
}
|
||||
|
||||
// Convert the internal WIN32 errors to descriptive messages
|
||||
fn convert_error(code: WIN32_ERROR) -> String {
|
||||
match code {
|
||||
ERROR_NOT_FOUND => String::from("Password not found."),
|
||||
_ => code.0.to_string(),
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test() {
|
||||
scopeguard::defer!(delete_password("BitwardenTest", "BitwardenTest").unwrap_or({}););
|
||||
set_password("BitwardenTest", "BitwardenTest", "Random").unwrap();
|
||||
assert_eq!(
|
||||
"Random",
|
||||
get_password("BitwardenTest", "BitwardenTest").unwrap()
|
||||
);
|
||||
delete_password("BitwardenTest", "BitwardenTest").unwrap();
|
||||
|
||||
// Ensure password is deleted
|
||||
match get_password("BitwardenTest", "BitwardenTest") {
|
||||
Ok(_) => panic!("Got a result"),
|
||||
Err(e) => assert_eq!("Password not found.", e.to_string()),
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_get_password_keytar() {
|
||||
scopeguard::defer!(delete_password("BitwardenTest", "BitwardenTest").unwrap_or({}););
|
||||
keytar::set_password("BitwardenTest", "BitwardenTest", "HelloFromKeytar").unwrap();
|
||||
assert_eq!(
|
||||
"HelloFromKeytar",
|
||||
get_password_keytar("BitwardenTest", "BitwardenTest").unwrap()
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_error_no_password() {
|
||||
match get_password("BitwardenTest", "BitwardenTest") {
|
||||
Ok(_) => panic!("Got a result"),
|
||||
Err(e) => assert_eq!("Password not found.", e.to_string()),
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,121 @@
|
|||
{
|
||||
"extraMetadata": { "name": "bitwarden" },
|
||||
"productName": "Bitwarden",
|
||||
"appId": "com.bitwarden.desktop",
|
||||
"buildDependenciesFromSource": true,
|
||||
"copyright": "Copyright © 2015-2022 Bitwarden Inc.",
|
||||
"directories": { "buildResources": "resources", "output": "dist", "app": "build" },
|
||||
"afterSign": "scripts/after-sign.js",
|
||||
"asarUnpack": ["**/*.node"],
|
||||
"files": ["**/*", "!**/node_modules/@bitwarden/desktop-native/**/*"],
|
||||
"publish": {
|
||||
"provider": "generic",
|
||||
"url": "https://artifacts.bitwarden.com/desktop"
|
||||
},
|
||||
"mac": {
|
||||
"electronUpdaterCompatibility": ">=0.0.1",
|
||||
"category": "public.app-category.productivity",
|
||||
"darkModeSupport": true,
|
||||
"gatekeeperAssess": false,
|
||||
"hardenedRuntime": true,
|
||||
"entitlements": "resources/entitlements.mac.plist",
|
||||
"entitlementsInherit": "resources/entitlements.mac.plist",
|
||||
"extendInfo": {
|
||||
"ITSAppUsesNonExemptEncryption": false,
|
||||
"CFBundleLocalizations": [
|
||||
"en",
|
||||
"cs",
|
||||
"da",
|
||||
"de",
|
||||
"es",
|
||||
"et",
|
||||
"fi",
|
||||
"fr",
|
||||
"hr",
|
||||
"hu",
|
||||
"id",
|
||||
"it",
|
||||
"ja",
|
||||
"nb",
|
||||
"nl",
|
||||
"pl",
|
||||
"pt-BR",
|
||||
"pt-PT",
|
||||
"ro",
|
||||
"ru",
|
||||
"sk",
|
||||
"sv",
|
||||
"tr",
|
||||
"uk",
|
||||
"vi",
|
||||
"zh-Hans",
|
||||
"zh-Hant"
|
||||
],
|
||||
"CFBundleDevelopmentRegion": "en"
|
||||
},
|
||||
"target": ["dmg", "zip"]
|
||||
},
|
||||
"win": {
|
||||
"electronUpdaterCompatibility": ">=0.0.1",
|
||||
"target": ["portable", "nsis-web", "appx"],
|
||||
"sign": "./sign.js",
|
||||
"extraResources": [
|
||||
{ "from": "node_modules/regedit/vbs", "to": "regedit/vbs", "filter": ["**/*"] },
|
||||
{ "from": "resources/native-messaging.bat", "to": "native-messaging.bat" }
|
||||
]
|
||||
},
|
||||
"linux": {
|
||||
"category": "Utility",
|
||||
"synopsis": "A secure and free password manager for all of your devices.",
|
||||
"target": ["deb", "freebsd", "rpm", "AppImage", "snap"],
|
||||
"desktop": { "Name": "Bitwarden", "Type": "Application", "GenericName": "Password Manager" }
|
||||
},
|
||||
"dmg": {
|
||||
"icon": "dmg.icns",
|
||||
"contents": [
|
||||
{ "x": 150, "y": 185, "type": "file" },
|
||||
{ "x": 390, "y": 180, "type": "link", "path": "/Applications" }
|
||||
],
|
||||
"window": { "width": 540, "height": 380 }
|
||||
},
|
||||
"mas": {
|
||||
"entitlements": "resources/entitlements.mas.plist",
|
||||
"entitlementsInherit": "resources/entitlements.mas.inherit.plist",
|
||||
"hardenedRuntime": false,
|
||||
"extendInfo": { "LSMinimumSystemVersion": "10.14.0" }
|
||||
},
|
||||
"nsisWeb": {
|
||||
"oneClick": false,
|
||||
"perMachine": false,
|
||||
"allowToChangeInstallationDirectory": false,
|
||||
"artifactName": "${productName}-Installer-${version}.${ext}",
|
||||
"uninstallDisplayName": "${productName}",
|
||||
"deleteAppDataOnUninstall": true
|
||||
},
|
||||
"portable": { "artifactName": "${productName}-Portable-${version}.${ext}" },
|
||||
"appx": {
|
||||
"artifactName": "${productName}-${version}-${arch}.${ext}",
|
||||
"backgroundColor": "#175DDC",
|
||||
"applicationId": "bitwardendesktop",
|
||||
"identityName": "8bitSolutionsLLC.bitwardendesktop",
|
||||
"publisher": "CN=14D52771-DE3C-4886-B8BF-825BA7690418",
|
||||
"publisherDisplayName": "8bit Solutions LLC",
|
||||
"languages": ["en-US"]
|
||||
},
|
||||
"deb": {
|
||||
"artifactName": "${productName}-${version}-${arch}.${ext}",
|
||||
"depends": ["libnotify4", "libxtst6", "libnss3", "libsecret-1-0", "libxss1"]
|
||||
},
|
||||
"appImage": {
|
||||
"artifactName": "${productName}-${version}-${arch}.${ext}"
|
||||
},
|
||||
"rpm": { "artifactName": "${productName}-${version}-${arch}.${ext}" },
|
||||
"freebsd": { "artifactName": "${productName}-${version}-${arch}.${ext}" },
|
||||
"snap": {
|
||||
"autoStart": true,
|
||||
"confinement": "strict",
|
||||
"plugs": ["default", "password-manager-service"],
|
||||
"stagePackages": ["default"]
|
||||
},
|
||||
"protocols": [{ "name": "Bitwarden", "schemes": ["bitwarden"] }]
|
||||
}
|
42
gulpfile.js
|
@ -1,42 +0,0 @@
|
|||
const gulp = require('gulp');
|
||||
const googleWebFonts = require('gulp-google-webfonts');
|
||||
const del = require('del');
|
||||
const fs = require('fs');
|
||||
|
||||
const paths = {
|
||||
cssDir: './src/css/',
|
||||
node_modules: './node_modules/',
|
||||
};
|
||||
|
||||
function clean() {
|
||||
return del([paths.cssDir]);
|
||||
}
|
||||
|
||||
function webfonts() {
|
||||
return gulp.src('./webfonts.list')
|
||||
.pipe(googleWebFonts({
|
||||
fontsDir: 'webfonts',
|
||||
cssFilename: 'webfonts.css',
|
||||
format: 'woff',
|
||||
}))
|
||||
.pipe(gulp.dest(paths.cssDir));
|
||||
}
|
||||
|
||||
// ref: https://github.com/angular/angular/issues/22524
|
||||
function cleanupAotIssue() {
|
||||
return del(['./node_modules/@types/uglify-js/node_modules/source-map/source-map.d.ts']);
|
||||
}
|
||||
|
||||
// ref: https://github.com/t4t5/sweetalert/issues/890
|
||||
function fixSweetAlert(cb) {
|
||||
fs.writeFileSync(paths.node_modules + 'sweetalert/typings/sweetalert.d.ts',
|
||||
'import swal, { SweetAlert } from "./core";export default swal;export as namespace swal;');
|
||||
cb();
|
||||
}
|
||||
|
||||
exports.clean = clean;
|
||||
exports.cleanupAotIssue = cleanupAotIssue;
|
||||
exports.webfonts = gulp.series(clean, webfonts);
|
||||
exports['prebuild:renderer'] = gulp.parallel(webfonts, cleanupAotIssue);
|
||||
exports.fixSweetAlert = fixSweetAlert;
|
||||
exports.postinstall = fixSweetAlert;
|
2
jslib
|
@ -1 +1 @@
|
|||
Subproject commit 6b82cd0380d33c83e8b242713eb173d94e16e9f4
|
||||
Subproject commit 80c834b52a8b00f88250a47a9bbd40c269fc2cba
|
349
package.json
|
@ -1,6 +1,5 @@
|
|||
{
|
||||
"name": "bitwarden",
|
||||
"productName": "Bitwarden",
|
||||
"name": "@bitwarden/desktop",
|
||||
"description": "A secure and free password manager for all of your devices.",
|
||||
"version": "0.0.0",
|
||||
"keywords": [
|
||||
|
@ -9,7 +8,7 @@
|
|||
"vault",
|
||||
"password manager"
|
||||
],
|
||||
"author": "8bit Solutions LLC <hello@bitwarden.com> (https://bitwarden.com)",
|
||||
"author": "Bitwarden Inc. <hello@bitwarden.com> (https://bitwarden.com)",
|
||||
"homepage": "https://bitwarden.com",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
@ -22,268 +21,116 @@
|
|||
"sub:update": "git submodule update --remote",
|
||||
"sub:pull": "git submodule foreach git pull origin master",
|
||||
"sub:commit": "npm run sub:pull && git commit -am \"update submodule\"",
|
||||
"postinstall": "./node_modules/.bin/electron-rebuild && npm run sub:init && gulp postinstall",
|
||||
"simlink:win": "rm -rf ./jslib && cmd /c mklink /J .\\jslib ..\\jslib",
|
||||
"lint": "tslint src/**/*.ts || true",
|
||||
"lint:fix": "tslint src/**/*.ts --fix",
|
||||
"preinstall": "npm run sub:init",
|
||||
"postinstall": "electron-rebuild",
|
||||
"symlink:win": "rm -rf ./jslib && cmd /c mklink /J .\\jslib ..\\jslib",
|
||||
"symlink:mac": "npm run symlink:lin",
|
||||
"symlink:lin": "rm -rf ./jslib && ln -s ../jslib ./jslib",
|
||||
"lint": "eslint . && prettier --check .",
|
||||
"lint:fix": "eslint . --fix",
|
||||
"build": "concurrently -n Main,Rend -c yellow,cyan \"npm run build:main\" \"npm run build:renderer\"",
|
||||
"build:main": "webpack --config webpack.main.js",
|
||||
"build:renderer": "gulp prebuild:renderer && webpack --config webpack.renderer.js",
|
||||
"build:renderer:watch": "gulp prebuild:renderer && webpack --config webpack.renderer.js --watch",
|
||||
"electron": "npm run build:main && concurrently -k -n Main,Rend -c yellow,cyan \"electron --inspect=5858 ./build --watch\" \"npm run build:renderer:watch\"",
|
||||
"build:dev": "concurrently -n Main,Rend -c yellow,cyan \"npm run build:main:dev\" \"npm run build:renderer:dev\"",
|
||||
"build:main": "cross-env NODE_ENV=production webpack --config webpack.main.js",
|
||||
"build:main:dev": "cross-env NODE_ENV=development webpack --config webpack.main.js",
|
||||
"build:renderer": "cross-env NODE_ENV=production webpack --config webpack.renderer.js",
|
||||
"build:renderer:dev": "cross-env NODE_ENV=development webpack --config webpack.renderer.js",
|
||||
"build:renderer:watch": "cross-env NODE_ENV=development webpack --config webpack.renderer.js --watch",
|
||||
"electron": "npm run build:main:dev && concurrently -k -n Main,Rend -c yellow,cyan \"electron --inspect=5858 ./build --watch\" \"npm run build:renderer:watch\"",
|
||||
"electron:ignore": "npm run build:main:dev && concurrently -k -n Main,Rend -c yellow,cyan \"electron --inspect=5858 --ignore-certificate-errors ./build --watch\" \"npm run build:renderer:watch\"",
|
||||
"clean:dist": "rimraf ./dist/*",
|
||||
"clean:l10n": "git push origin --delete l10n_master",
|
||||
"pack:dir": "npm run clean:dist && electron-builder --dir -p never",
|
||||
"pack:lin": "npm run clean:dist && electron-builder --linux --x64 -p never",
|
||||
"pack:mac": "npm run clean:dist && electron-builder --mac -p never",
|
||||
"pack:mac:mas": "npm run clean:dist && electron-builder --mac mas mas-dev -p never",
|
||||
"pack:mac:dmg": "npm run clean:dist && electron-builder --mac dmg zip -p never",
|
||||
"pack:win": "npm run clean:dist && electron-builder --win --x64 --ia32 -p never -c.win.certificateSubjectName=\"8bit Solutions LLC\"",
|
||||
"pack:win:ci": "npm run clean:dist && electron-builder --win --x64 --ia32 -p never",
|
||||
"pack:mac": "npm run clean:dist && electron-builder --mac --universal -p never",
|
||||
"pack:mac:arm64": "npm run clean:dist && electron-builder --mac --arm64 -p never",
|
||||
"pack:mac:mas": "npm run clean:dist && electron-builder --mac mas --universal -p never",
|
||||
"pack:mac:masdev": "npm run clean:dist && electron-builder --mac mas-dev --universal -p never",
|
||||
"pack:win": "npm run clean:dist && electron-builder --win --x64 --arm64 --ia32 -p never -c.win.certificateSubjectName=\"8bit Solutions LLC\"",
|
||||
"pack:win:ci": "npm run clean:dist && electron-builder --win --x64 --arm64 --ia32 -p never",
|
||||
"dist:dir": "npm run build && npm run pack:dir",
|
||||
"dist:lin": "npm run build && npm run pack:lin",
|
||||
"dist:mac": "npm run build && npm run pack:mac",
|
||||
"dist:mac:mas": "npm run build && npm run pack:mac:mas",
|
||||
"dist:mac:dmg": "npm run build && npm run pack:mac:dmg",
|
||||
"dist:mac:masdev": "npm run build && npm run pack:mac:masdev",
|
||||
"dist:win": "npm run build && npm run pack:win",
|
||||
"dist:win:ci": "npm run build && npm run pack:win:ci",
|
||||
"publish:lin": "npm run build && npm run clean:dist && electron-builder --linux --x64 -p always",
|
||||
"publish:mac": "npm run build && npm run clean:dist && electron-builder --mac -p always",
|
||||
"publish:win": "npm run build && npm run clean:dist && electron-builder --win --x64 --ia32 -p always -c.win.certificateSubjectName=\"8bit Solutions LLC\""
|
||||
},
|
||||
"build": {
|
||||
"appId": "com.bitwarden.desktop",
|
||||
"copyright": "Copyright © 2015-2019 8bit Solutions LLC",
|
||||
"directories": {
|
||||
"buildResources": "resources",
|
||||
"output": "dist",
|
||||
"app": "build"
|
||||
},
|
||||
"afterSign": "scripts/notarize.js",
|
||||
"mac": {
|
||||
"electronUpdaterCompatibility": ">=0.0.1",
|
||||
"category": "public.app-category.productivity",
|
||||
"extraFiles": [
|
||||
"PlugIns/"
|
||||
],
|
||||
"darkModeSupport": true,
|
||||
"gatekeeperAssess": false,
|
||||
"hardenedRuntime": true,
|
||||
"entitlements": "resources/entitlements.mac.plist",
|
||||
"entitlementsInherit": "resources/entitlements.mac.plist",
|
||||
"extendInfo": {
|
||||
"ITSAppUsesNonExemptEncryption": false,
|
||||
"CFBundleLocalizations": [
|
||||
"en",
|
||||
"cs",
|
||||
"da",
|
||||
"de",
|
||||
"es",
|
||||
"et",
|
||||
"fi",
|
||||
"fr",
|
||||
"hr",
|
||||
"hu",
|
||||
"id",
|
||||
"it",
|
||||
"ja",
|
||||
"nb",
|
||||
"nl",
|
||||
"pl",
|
||||
"pt-BR",
|
||||
"pt-PT",
|
||||
"ro",
|
||||
"ru",
|
||||
"sk",
|
||||
"sv",
|
||||
"tr",
|
||||
"uk",
|
||||
"vi",
|
||||
"zh-Hans",
|
||||
"zh-Hant"
|
||||
],
|
||||
"CFBundleDevelopmentRegion": "en"
|
||||
},
|
||||
"target": [
|
||||
"mas-dev",
|
||||
"mas",
|
||||
"dmg",
|
||||
"zip"
|
||||
]
|
||||
},
|
||||
"win": {
|
||||
"electronUpdaterCompatibility": ">=0.0.1",
|
||||
"target": [
|
||||
"portable",
|
||||
"nsis-web",
|
||||
"appx"
|
||||
]
|
||||
},
|
||||
"linux": {
|
||||
"category": "Utility",
|
||||
"synopsis": "A secure and free password manager for all of your devices.",
|
||||
"target": [
|
||||
"deb",
|
||||
"freebsd",
|
||||
"rpm",
|
||||
"AppImage",
|
||||
"snap"
|
||||
]
|
||||
},
|
||||
"dmg": {
|
||||
"icon": "dmg.icns",
|
||||
"contents": [
|
||||
{
|
||||
"x": 150,
|
||||
"y": 185,
|
||||
"type": "file"
|
||||
},
|
||||
{
|
||||
"x": 390,
|
||||
"y": 180,
|
||||
"type": "link",
|
||||
"path": "/Applications"
|
||||
}
|
||||
],
|
||||
"window": {
|
||||
"width": 540,
|
||||
"height": 380
|
||||
}
|
||||
},
|
||||
"mas": {
|
||||
"entitlements": "resources/entitlements.mas.plist",
|
||||
"entitlementsInherit": "resources/entitlements.mas.inherit.plist",
|
||||
"hardenedRuntime": false
|
||||
},
|
||||
"nsisWeb": {
|
||||
"oneClick": false,
|
||||
"perMachine": true,
|
||||
"allowToChangeInstallationDirectory": true,
|
||||
"artifactName": "${productName}-Installer-${version}.${ext}",
|
||||
"uninstallDisplayName": "${productName}",
|
||||
"deleteAppDataOnUninstall": true
|
||||
},
|
||||
"portable": {
|
||||
"artifactName": "${productName}-Portable-${version}.${ext}"
|
||||
},
|
||||
"appx": {
|
||||
"artifactName": "${productName}-${version}-${arch}.${ext}",
|
||||
"backgroundColor": "#3c8dbc",
|
||||
"applicationId": "bitwardendesktop",
|
||||
"identityName": "8bitSolutionsLLC.bitwardendesktop",
|
||||
"publisher": "CN=14D52771-DE3C-4886-B8BF-825BA7690418",
|
||||
"publisherDisplayName": "8bit Solutions LLC",
|
||||
"languages": [
|
||||
"en-US"
|
||||
]
|
||||
},
|
||||
"deb": {
|
||||
"artifactName": "${productName}-${version}-${arch}.${ext}",
|
||||
"depends": [
|
||||
"gconf2",
|
||||
"gconf-service",
|
||||
"libnotify4",
|
||||
"libxtst6",
|
||||
"libnss3",
|
||||
"libsecret-1-0",
|
||||
"libxss1"
|
||||
]
|
||||
},
|
||||
"appImage": {
|
||||
"artifactName": "${productName}-${version}-${arch}.${ext}"
|
||||
},
|
||||
"rpm": {
|
||||
"artifactName": "${productName}-${version}-${arch}.${ext}"
|
||||
},
|
||||
"freebsd": {
|
||||
"artifactName": "${productName}-${version}-${arch}.${ext}"
|
||||
},
|
||||
"snap": {
|
||||
"confinement": "strict",
|
||||
"plugs": [
|
||||
"default",
|
||||
"password-manager-service"
|
||||
],
|
||||
"stagePackages": [
|
||||
"default"
|
||||
],
|
||||
"publish": [
|
||||
"github"
|
||||
]
|
||||
}
|
||||
"publish:mac:mas": "npm run dist:mac:mas && npm run upload:mas",
|
||||
"publish:win": "npm run build && npm run clean:dist && electron-builder --win --x64 --arm64 --ia32 -p always -c.win.certificateSubjectName=\"8bit Solutions LLC\"",
|
||||
"publish:win:dev": "npm run build && npm run clean:dist && electron-builder --win --x64 --arm64 --ia32 -p always",
|
||||
"upload:mas": "xcrun altool --upload-app --type osx --file \"$(find ./dist/mas-universal/Bitwarden*.pkg)\" --username $APPLE_ID_USERNAME --password $APPLE_ID_PASSWORD",
|
||||
"prettier": "prettier --write .",
|
||||
"prepare": "husky install"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@angular/compiler-cli": "^7.2.11",
|
||||
"@ngtools/webpack": "^7.2.2",
|
||||
"@types/lunr": "^2.1.6",
|
||||
"@types/node-forge": "^0.7.5",
|
||||
"@types/papaparse": "^4.5.3",
|
||||
"@types/semver": "^5.5.0",
|
||||
"@types/webcrypto": "^0.0.28",
|
||||
"@types/webpack": "^4.4.11",
|
||||
"@types/zxcvbn": "4.4.0",
|
||||
"clean-webpack-plugin": "^0.1.19",
|
||||
"concurrently": "^4.0.1",
|
||||
"copy-webpack-plugin": "^4.2.0",
|
||||
"cross-env": "^5.2.0",
|
||||
"css-loader": "^1.0.0",
|
||||
"del": "^3.0.0",
|
||||
"electron": "5.0.8",
|
||||
"electron-builder": "21.1.5",
|
||||
"electron-notarize": "^0.1.1",
|
||||
"electron-rebuild": "^1.8.5",
|
||||
"electron-reload": "^1.4.1",
|
||||
"extract-text-webpack-plugin": "next",
|
||||
"file-loader": "^2.0.0",
|
||||
"font-awesome": "4.7.0",
|
||||
"gulp": "^4.0.0",
|
||||
"gulp-google-webfonts": "^2.0.0",
|
||||
"html-loader": "^0.5.5",
|
||||
"html-webpack-plugin": "^3.2.0",
|
||||
"ngx-infinite-scroll": "7.0.1",
|
||||
"node-abi": "^2.9.0",
|
||||
"node-loader": "^0.6.0",
|
||||
"node-sass": "^4.11.0",
|
||||
"rimraf": "^2.6.2",
|
||||
"sass-loader": "^7.1.0",
|
||||
"ts-loader": "^5.3.3",
|
||||
"tslint": "^5.12.1",
|
||||
"tslint-loader": "^3.5.4",
|
||||
"typescript": "3.2.4",
|
||||
"webpack": "^4.29.0",
|
||||
"webpack-cli": "^3.2.1",
|
||||
"webpack-merge": "^4.2.1",
|
||||
"webpack-node-externals": "^1.7.2"
|
||||
"@angular/compiler-cli": "^12.2.13",
|
||||
"@ngtools/webpack": "^12.2.13",
|
||||
"@types/node": "^16.11.12",
|
||||
"@types/node-ipc": "^9.1.4",
|
||||
"@typescript-eslint/eslint-plugin": "^5.12.1",
|
||||
"@typescript-eslint/parser": "^5.12.1",
|
||||
"clean-webpack-plugin": "^4.0.0",
|
||||
"concurrently": "^6.0.2",
|
||||
"copy-webpack-plugin": "^10.0.0",
|
||||
"cross-env": "^7.0.3",
|
||||
"css-loader": "^6.5.1",
|
||||
"electron-builder": "22.11.7",
|
||||
"electron-notarize": "^1.1.1",
|
||||
"electron-rebuild": "^3.2.5",
|
||||
"electron-reload": "^1.5.0",
|
||||
"eslint": "^8.9.0",
|
||||
"eslint-config-prettier": "^8.4.0",
|
||||
"eslint-import-resolver-typescript": "^2.5.0",
|
||||
"eslint-plugin-import": "^2.25.4",
|
||||
"html-loader": "^3.0.1",
|
||||
"html-webpack-plugin": "^5.5.0",
|
||||
"husky": "^7.0.4",
|
||||
"lint-staged": "^12.1.3",
|
||||
"mini-css-extract-plugin": "^2.4.5",
|
||||
"node-loader": "^2.0.0",
|
||||
"prettier": "^2.5.1",
|
||||
"rimraf": "^3.0.2",
|
||||
"sass": "^1.32.11",
|
||||
"sass-loader": "^12.4.0",
|
||||
"tapable": "^1.1.3",
|
||||
"ts-loader": "^9.2.5",
|
||||
"tsconfig-paths-webpack-plugin": "^3.5.1",
|
||||
"typescript": "4.3.5",
|
||||
"webpack": "^5.64.4",
|
||||
"webpack-cli": "^4.9.1",
|
||||
"webpack-merge": "^5.8.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@angular/animations": "7.2.1",
|
||||
"@angular/cdk": "7.2.1",
|
||||
"@angular/common": "7.2.1",
|
||||
"@angular/compiler": "7.2.1",
|
||||
"@angular/core": "7.2.1",
|
||||
"@angular/forms": "7.2.1",
|
||||
"@angular/http": "7.2.1",
|
||||
"@angular/platform-browser": "7.2.1",
|
||||
"@angular/platform-browser-dynamic": "7.2.1",
|
||||
"@angular/router": "7.2.1",
|
||||
"@angular/upgrade": "7.2.1",
|
||||
"@aspnet/signalr": "1.1.4",
|
||||
"@aspnet/signalr-protocol-msgpack": "1.1.0",
|
||||
"angular2-toaster": "6.1.0",
|
||||
"angulartics2": "6.3.0",
|
||||
"big-integer": "1.6.36",
|
||||
"core-js": "2.6.2",
|
||||
"desktop-idle": "1.1.2",
|
||||
"duo_web_sdk": "git+https://github.com/duosecurity/duo_web_sdk.git",
|
||||
"electron-log": "2.2.17",
|
||||
"electron-store": "1.3.0",
|
||||
"electron-updater": "4.1.2",
|
||||
"keytar": "4.13.0",
|
||||
"lunr": "2.3.3",
|
||||
"node-forge": "0.7.6",
|
||||
"nord": "0.2.1",
|
||||
"papaparse": "4.6.0",
|
||||
"rxjs": "6.3.3",
|
||||
"sweetalert": "2.1.2",
|
||||
"zone.js": "0.8.28",
|
||||
"zxcvbn": "4.4.2"
|
||||
"@angular/animations": "^12.2.13",
|
||||
"@angular/cdk": "^12.2.13",
|
||||
"@angular/common": "^12.2.13",
|
||||
"@angular/compiler": "^12.2.13",
|
||||
"@angular/core": "^12.2.13",
|
||||
"@angular/forms": "^12.2.13",
|
||||
"@angular/platform-browser": "^12.2.13",
|
||||
"@angular/platform-browser-dynamic": "^12.2.13",
|
||||
"@angular/router": "^12.2.13",
|
||||
"@bitwarden/jslib-angular": "file:jslib/angular",
|
||||
"@bitwarden/jslib-common": "file:jslib/common",
|
||||
"@bitwarden/jslib-electron": "file:jslib/electron",
|
||||
"@nodert-win10-rs4/windows.security.credentials.ui": "^0.4.4",
|
||||
"forcefocus": "^1.1.0",
|
||||
"keytar": "^7.9.0",
|
||||
"ngx-toastr": "14.1.4",
|
||||
"node-ipc": "^9.1.4",
|
||||
"nord": "^0.2.1",
|
||||
"regedit": "^3.0.3",
|
||||
"rxjs": "^7.4.0",
|
||||
"sweetalert2": "^10.16.6",
|
||||
"zone.js": "0.11.4"
|
||||
},
|
||||
"engines": {
|
||||
"node": "~16",
|
||||
"npm": "~8"
|
||||
},
|
||||
"lint-staged": {
|
||||
"./!(jslib)**": "prettier --ignore-unknown --write",
|
||||
"*.ts": "eslint --fix"
|
||||
}
|
||||
}
|
||||
|
|
Before Width: | Height: | Size: 370 B After Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 5.4 KiB After Width: | Height: | Size: 4.7 KiB |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 33 KiB |
Before Width: | Height: | Size: 692 B After Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 33 KiB |
Before Width: | Height: | Size: 148 KiB After Width: | Height: | Size: 113 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 6.6 KiB |
Before Width: | Height: | Size: 148 KiB After Width: | Height: | Size: 113 KiB |
Before Width: | Height: | Size: 492 KiB After Width: | Height: | Size: 392 KiB |
|
@ -2,6 +2,8 @@
|
|||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>com.apple.security.cs.allow-jit</key>
|
||||
<true/>
|
||||
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
|
||||
<true/>
|
||||
<key>com.apple.security.cs.disable-library-validation</key>
|
||||
|
|
|
@ -8,5 +8,19 @@
|
|||
<true/>
|
||||
<key>com.apple.security.files.user-selected.read-write</key>
|
||||
<true/>
|
||||
<key>com.apple.security.temporary-exception.files.home-relative-path.read-write</key>
|
||||
<array>
|
||||
<string>/Library/Application Support/Mozilla/NativeMessagingHosts/</string>
|
||||
<string>/Library/Application Support/Google/Chrome/NativeMessagingHosts/</string>
|
||||
<string>/Library/Application Support/Google/Chrome Beta/NativeMessagingHosts/</string>
|
||||
<string>/Library/Application Support/Google/Chrome Dev/NativeMessagingHosts/</string>
|
||||
<string>/Library/Application Support/Google/Chrome Canary/NativeMessagingHosts/</string>
|
||||
<string>/Library/Application Support/Chromium/NativeMessagingHosts/</string>
|
||||
<string>/Library/Application Support/Microsoft Edge/NativeMessagingHosts/</string>
|
||||
<string>/Library/Application Support/Microsoft Edge Beta/NativeMessagingHosts/</string>
|
||||
<string>/Library/Application Support/Microsoft Edge Dev/NativeMessagingHosts/</string>
|
||||
<string>/Library/Application Support/Microsoft Edge Canary/NativeMessagingHosts/</string>
|
||||
<string>/Library/Application Support/Vivaldi/NativeMessagingHosts/</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 9.4 KiB |
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 403 B After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 636 B After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 87 KiB |
Before Width: | Height: | Size: 685 B After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 87 KiB |
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 252 KiB |
After Width: | Height: | Size: 3.2 KiB |
After Width: | Height: | Size: 9.4 KiB |
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 58 KiB |
After Width: | Height: | Size: 252 KiB |
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 9.4 KiB |
Before Width: | Height: | Size: 403 B After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 685 B After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 957 B |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 87 KiB |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 151 KiB After Width: | Height: | Size: 151 KiB |
|
@ -0,0 +1,7 @@
|
|||
@echo off
|
||||
:: Helper script for starting the Native Messaging Proxy on Windows.
|
||||
|
||||
cd ../
|
||||
set ELECTRON_RUN_AS_NODE=1
|
||||
set ELECTRON_NO_ATTACH_CONSOLE=1
|
||||
Bitwarden.exe resources/app.asar %*
|
|
@ -0,0 +1,62 @@
|
|||
/* eslint-disable @typescript-eslint/no-var-requires, no-console */
|
||||
require("dotenv").config();
|
||||
const path = require("path");
|
||||
|
||||
const { deepAssign } = require("builder-util");
|
||||
const { notarize } = require("electron-notarize");
|
||||
const fse = require("fs-extra");
|
||||
|
||||
exports.default = run;
|
||||
|
||||
async function run(context) {
|
||||
console.log("## After sign");
|
||||
// console.log(context);
|
||||
|
||||
const appName = context.packager.appInfo.productFilename;
|
||||
const appPath = `${context.appOutDir}/${appName}.app`;
|
||||
const macBuild = context.electronPlatformName === "darwin";
|
||||
const copyPlugIn = ["darwin", "mas"].includes(context.electronPlatformName);
|
||||
|
||||
if (copyPlugIn) {
|
||||
// Copy Safari plugin to work-around https://github.com/electron-userland/electron-builder/issues/5552
|
||||
const plugIn = path.join(__dirname, "../PlugIns");
|
||||
if (fse.existsSync(plugIn)) {
|
||||
fse.mkdirSync(path.join(appPath, "Contents/PlugIns"));
|
||||
fse.copySync(
|
||||
path.join(plugIn, "safari.appex"),
|
||||
path.join(appPath, "Contents/PlugIns/safari.appex")
|
||||
);
|
||||
|
||||
// Resign to sign safari extension
|
||||
if (context.electronPlatformName === "mas") {
|
||||
const masBuildOptions = deepAssign(
|
||||
{},
|
||||
context.packager.platformSpecificBuildOptions,
|
||||
context.packager.config.mas
|
||||
);
|
||||
if (context.targets.some((e) => e.name === "mas-dev")) {
|
||||
deepAssign(masBuildOptions, {
|
||||
type: "development",
|
||||
});
|
||||
}
|
||||
if (context.packager.packagerOptions.prepackaged == null) {
|
||||
await context.packager.sign(appPath, context.appOutDir, masBuildOptions, context.arch);
|
||||
}
|
||||
} else {
|
||||
await context.packager.signApp(context, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (macBuild) {
|
||||
console.log("### Notarizing " + appPath);
|
||||
const appleId = process.env.APPLE_ID_USERNAME || process.env.APPLEID;
|
||||
const appleIdPassword = process.env.APPLE_ID_PASSWORD || `@keychain:AC_PASSWORD`;
|
||||
return await notarize({
|
||||
appBundleId: "com.bitwarden.desktop",
|
||||
appPath: appPath,
|
||||
appleId: appleId,
|
||||
appleIdPassword: appleIdPassword,
|
||||
});
|
||||
}
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
data
|