Thomas Müller
f55aa856ad
Remove file mapper - was only use in Windows and never worked properly
2015-07-03 15:41:29 +02:00
Robin Appelman
b849b7c7f2
better handling of folders
2015-07-03 13:43:22 +02:00
Vincent Petry
34043d4647
Throw lock exceptions if remote share returned 423 status code
2015-07-03 07:51:13 +02:00
Joas Schilling
9c533342fc
Perform the filesize only when the file exists
...
Regression from 95602d4069
and 9b336765b6
2015-06-30 11:47:58 +02:00
Joas Schilling
70eb20e3a7
Merge pull request #17030 from owncloud/lock-posthooks
...
Keep shared lock for post-hooks
2015-06-29 14:17:03 +02:00
Lukas Reschke
d1f0ff372e
Merge pull request #17163 from owncloud/update-licenses
...
Update license headers
2015-06-27 20:22:23 +02:00
Joas Schilling
9b336765b6
Correctly check if the real file exists, otherwise try the part file
2015-06-26 13:17:23 +02:00
Vincent Petry
538e466c30
Keep shared locks in post hooks
...
Instead of unlocking after the file operation, change exclusive locks
back to shared locks during post hooks, and unlock after that.
Also added unit tests to test locking in pre-hooks, during operation and
post-hooks.
2015-06-25 16:33:02 +02:00
Morris Jobke
f63915d0c8
update license headers and authors
2015-06-25 14:13:49 +02:00
Bjoern Schiessle
95602d4069
make sure that we always read the header from the original file
2015-06-23 11:41:21 +02:00
Robin Appelman
4b181f73ca
phpdoc
2015-06-15 15:41:52 +02:00
Robin Appelman
2fb8a76705
add recursive copy polyfill for storage backends
2015-06-14 15:15:21 +02:00
Joas Schilling
bb0cb0aaec
Merge pull request #15895 from owncloud/dav-getremoteetag
...
Get etag from remote OC server
2015-06-03 17:20:25 +02:00
Thomas Müller
3ebc8f0564
Merge pull request #16107 from owncloud/fix-getLocalFile-encryption-master
...
Fix get local file encryption master
2015-06-02 13:47:37 +02:00
Vincent Petry
30d7f92763
Get etag from remote OC server
2015-06-02 11:42:03 +02:00
Robin Appelman
661c9e2444
add changeLock to the storage api
2015-06-01 13:24:02 +02:00
Robin Appelman
35c377f7a9
phpdoc and minor issues
2015-06-01 13:22:56 +02:00
Vincent Petry
8d53dc803f
Use md5 + prefix for file locking keys in memcache
...
Also trim slashes from paths to make sure the locks are based on the
same paths.
2015-06-01 13:22:56 +02:00
Vincent Petry
0775e9c1ca
Use md5 for lock key
2015-06-01 13:22:56 +02:00
Robin Appelman
536e187e51
add locking to the storage api
2015-06-01 13:22:56 +02:00
Vincent Petry
e114d00242
Only use quota stream wrapper on "files"
...
Prevent using the quota stream wrapper on trashbin folders and other
metadata folders
2015-05-28 18:31:20 +02:00
Vincent Petry
ded62ff693
Merge pull request #16501 from owncloud/enc_fix_move_versions_between_storages
...
[encryption] fix move versions between storages
2015-05-28 15:28:25 +02:00
Bjoern Schiessle
0de59acb49
only request encryption module for files which are not excluded
2015-05-27 15:47:40 +02:00
Thomas Müller
4513cf5967
Revert "Revert "Revert "FIX for webdav.mediencenter.t-online.de"""
2015-05-26 14:40:07 +02:00
Oliver Kohl D.Sc
f8938f004d
Revert "Revert "FIX for webdav.mediencenter.t-online.de""
2015-05-26 13:36:45 +02:00
Bjoern Schiessle
c63f2286c0
copy keys before we move a file between storages to make sure that the new target file reuses the old file key, otherwise versions will break
2015-05-22 15:41:28 +02:00
Joas Schilling
d7b2bc9e2f
Merge pull request #16516 from owncloud/fix-phpdoc-trait
...
Fix PHPDoc
2015-05-22 09:47:59 +02:00
Lukas Reschke
3d8ea96e55
Fix PHPDoc
...
Use correct parameters
2015-05-22 00:17:38 +02:00
Morris Jobke
39d1e99228
Merge pull request #16322 from owncloud/trash-view
...
dont go trough the view when moving to trash
2015-05-20 14:44:01 +02:00
Robin Appelman
9c751f1d87
use copy when doing a crossStorageCopy on the same storage
2015-05-19 14:21:58 +02:00
Scrutinizer Auto-Fixer
fdbc21fc6c
Scrutinizer Auto-Fixes
...
This commit consists of patches automatically generated for this project on https://scrutinizer-ci.com
2015-05-19 11:23:06 +00:00
Clark Tomlinson
f9b6ee86cd
Merge pull request #16399 from owncloud/enc_rmdir_fix
...
[encryption] only try to delete file keys if it is a valid path
2015-05-18 11:09:36 -04:00
Bjoern Schiessle
efa674f10d
only try to delete file keys if it is a valid path
2015-05-18 11:54:51 +02:00
Bjoern Schiessle
887be709f5
a new approach to display the error message
2015-05-18 10:15:17 +02:00
Bjoern Schiessle
ccbefb6e75
delete all file keys doesn't need the encryption module as parameter; implement rmdir; getFileKeyDir should also work for part files and complete directories
2015-05-13 19:06:23 +02:00
Morris Jobke
dc362823e0
Merge pull request #16269 from owncloud/master-fix-16179
...
Check if cURL supports the desired features
2015-05-12 18:27:57 +02:00
Lukas Reschke
4613456a8a
Check if cURL supports the desired features
...
Older versions of cURL that are unfortunately still bundled by distributors don't support these features which will result in errors and other possibly unpredictable behaviour.
Fixes https://github.com/owncloud/core/issues/16179 for master – stable8 requires another patch.
2015-05-12 12:00:56 +02:00
Bjoern Schiessle
0d5c7a11e2
use hooks to update encryption keys instead of the storage wrapper if a file gets renamed/restored, as long as we
...
are in the storage wrapper the file cache isn't up-to-date
2015-05-11 12:06:57 +02:00
Joas Schilling
aea734aaf1
Fix missing types on doc block and deduplicate the method name
2015-05-06 14:31:10 +02:00
Bjoern Schiessle
e4829a2358
update 'encrypted'-flag in file cache according to the storage settings
2015-05-06 14:20:05 +02:00
Bjoern Schiessle
dc39bda870
move/copy from storage
2015-05-06 14:20:02 +02:00
Bjoern Schiessle
83ed4ee5b6
unit tests
2015-05-06 12:28:15 +02:00
Bjoern Schiessle
e7a3911c83
check if encryption is enbaled before we start moving keys
2015-05-06 11:35:45 +02:00
Thomas Müller
35a2fd3f89
Only return cached files if existing
2015-05-06 11:16:44 +02:00
Thomas Müller
a96c2b8354
Only use cached files in case encryption is enabled - in any other case let the underlying storage handle this accordingly - refs #16061 #16062 and others
2015-05-05 16:19:24 +02:00
Bjoern Schiessle
7089af96f2
make sure that we keep the correct encrypted-flag and the (unencrypted)size if a file gets copied
2015-05-05 16:17:14 +02:00
Thomas Müller
7d0eba7a41
Merge pull request #15886 from owncloud/fix-15848-master
...
Adjust isLocal() on encryption wrapper
2015-04-27 15:06:26 +02:00
Thomas Müller
678b7d7e4d
Merge pull request #15860 from owncloud/enc_fallback_old_encryption
...
[encryption] handle encrypted files correctly which where encrypted with a old version of ownCloud (<=oc6)
2015-04-27 14:32:19 +02:00
Thomas Müller
936d564058
fixes #15848
2015-04-27 14:26:05 +02:00
Bjoern Schiessle
27683f9442
fall back to the ownCloud default encryption module and aes128 if we read a encrypted file without a header
2015-04-27 13:01:18 +02:00
Joas Schilling
d600955a51
Make getDefaultModuleId public and get module protected
2015-04-27 11:03:51 +02:00
Joas Schilling
1592be117a
Use public interfaces for type hinting
2015-04-24 13:06:03 +02:00
Bjoern Schiessle
24128d1384
only update share keys if the file was encrypted
2015-04-24 10:19:09 +02:00
Bjoern Schiessle
2646bccb83
update share keys if file gets copied
2015-04-23 17:18:48 +02:00
Bjoern Schiessle
2990b0e07e
update share keys if a file is moved to a shared folder
2015-04-23 17:18:48 +02:00
Thomas Müller
225cde2183
pass KeyStorage via ctor
2015-04-22 13:09:42 +02:00
Thomas Müller
987bc138df
calling renameKeys() on directory level as well - fixes #15778
2015-04-22 12:12:27 +02:00
Thomas Müller
fc4127dd62
add $encryptionModuleId to methods of Keys/IStorage
2015-04-22 11:53:05 +02:00
Thomas Müller
32995ace1c
move permission related code into getMetaData()
2015-04-20 16:50:12 +02:00
Thomas Müller
23f1bdc3d4
Introduce Storage::getMetaData() to allow storage implementations more control over the data array
2015-04-20 14:54:54 +02:00
Thomas Müller
92b60e36de
Introduce Storage::getData() to allow storage implementations more control over the data array
2015-04-20 14:25:39 +02:00
Bjoern Schiessle
e3d77c4b01
add migration script from old encryption to new one
2015-04-16 14:15:04 +02:00
Björn Schießle
4f0437fbde
Merge pull request #15598 from owncloud/fix-enc-file-size-master
...
Fix file size of encrypted files
2015-04-14 16:48:04 +02:00
Thomas Müller
967e882757
return size from cache in case the cache entry is marked as encrypted
2015-04-14 13:08:59 +02:00
Thomas Müller
387984a0d5
preserve filesize on rename after upload
2015-04-14 12:27:12 +02:00
Robin Appelman
0772e3b4c1
Properly handle copy/move failures in cross storage copy/move
2015-04-13 15:13:03 +02:00
Robin Appelman
404773940d
Detect storage full when doing cross storage copy/move
2015-04-13 15:13:03 +02:00
Robin Appelman
d26c6cab90
properly return false if we cant delete the source file
2015-04-13 15:13:03 +02:00
Robin Appelman
c4ec8fbeff
Make getSourcePath accessible for storage wrappers
2015-04-13 15:13:03 +02:00
Robin Appelman
31e94708f8
Improve cross storage copy between local storages
2015-04-13 15:13:02 +02:00
Robin Appelman
8575bb2cb9
Move cross storage copy logic to the storage
2015-04-13 15:13:02 +02:00
Thomas Müller
8450b6aa2d
Properly import used classes
2015-04-13 09:26:30 +02:00
Vincent Petry
73afca6207
Catch more exceptions when connecting to remote DAV server
...
Added InvalidArgumentException to catch HTML parsing errors when XML was
expected.
Made convertSabreException more generic to be able to handle more
exception cases.
2015-04-10 12:02:06 +02:00
Morris Jobke
4e60b81264
Merge pull request #14120 from owncloud/dav-statcache
...
Stat cache for DAV storage, improves s2s performance a little bit
2015-04-08 21:09:28 +02:00
Bjoern Schiessle
c379557e1d
don't throw exception if a file gets uploaded and encryption is disabled
2015-04-08 16:41:20 +02:00
Morris Jobke
59322a5037
Merge pull request #15333 from owncloud/copy-cross-device
...
fix copying folder across devices
2015-04-08 12:35:15 +02:00
Thomas Müller
a4483243ac
fixing license headers - encryption code related
2015-04-07 17:02:49 +02:00
Thomas Müller
4a70ca665c
respect mount option while encrypting
2015-04-07 13:30:31 +02:00
Thomas Müller
111fbabfb4
PHPDoc cleanup - clean code \o/
2015-04-07 13:30:31 +02:00
Thomas Müller
ba9a797eaa
Encryption storage wrapper is enabled by default - necessary to detect encrypted files even if encryption was disabled after files have been encrypted - prevents data corruption
2015-04-07 13:30:31 +02:00
Bjoern Schiessle
fe74a0cb4f
implement webdav copy
2015-04-07 13:30:31 +02:00
Thomas Müller
8991272269
Using stream_get_contents in file_get_contents implementation + close handle
2015-04-07 13:30:31 +02:00
Thomas Müller
104d11ec4c
Fixing encryption storage wrapper tests
2015-04-07 13:30:30 +02:00
Thomas Müller
d9c41b00ab
Introducing trait LocalTempFileTrait
2015-04-07 13:30:30 +02:00
Thomas Müller
9d8c07850d
fixing unencrypted file size
2015-04-07 13:30:30 +02:00
Thomas Müller
c9d6ed3d7d
in case the file exists we require the explicit module as specified in the file header - otherwise we need to fail hard to prevent data loss on client side
2015-04-07 13:30:30 +02:00
Thomas Müller
137c135664
file_put_contents has to return the number of written bytes
2015-04-07 13:30:30 +02:00
Bjoern Schiessle
83cb382b3f
pass file helper to encryption wrapper
2015-04-07 13:30:29 +02:00
Thomas Müller
99255ff3a9
Fix - public sharing: in case on user is available - get it from the path
2015-04-07 13:30:28 +02:00
Bjoern Schiessle
0eee3a2618
remove unencrypted_size from the cache, size will contain the unencrypted size
2015-04-07 13:30:28 +02:00
Thomas Müller
a905f641b3
various fixes & start to unit test the encryption storage wrapper
2015-04-07 13:30:28 +02:00
Bjoern Schiessle
cb9980823d
core: small fixes
2015-04-07 13:30:27 +02:00
Bjoern Schiessle
810ca9105c
implement rename and delete of encryption keys
2015-04-07 13:30:27 +02:00
Robin Appelman
068c624b0d
fix copying folder across devices
2015-03-31 13:50:11 +02:00
Thomas Müller
722e50a112
Merge pull request #15240 from owncloud/storage-wrapper-priority
...
add priority to storage wrappers
2015-03-27 15:18:44 +01:00
Bjoern Schiessle
c6be1ba8d3
fix check if a file is excluded from encryption or not
2015-03-27 11:51:50 +01:00
Vincent Petry
670ca68453
Added stat cache for DAV storage
...
The stat cache stored known states of files/folders to avoid requerying
the DAV server multiple times.
2015-03-26 23:15:53 +01:00
Robin McCorkell
c2909355bf
Merge pull request #14925 from owncloud/ext-mountoptions-ui
...
Mount options GUI for external storage
2015-03-26 21:36:34 +00:00
Robin Appelman
cb9ead7dde
add priority to storage wrappers
2015-03-26 21:26:38 +01:00
Thomas Müller
232518ac54
Merge pull request #15234 from owncloud/encryption2_core
...
core part of encryption 2.0
2015-03-26 21:14:59 +01:00
Bjoern Schiessle
ff9c85ce60
implement basic encryption functionallity in core to enable multiple encryption modules
2015-03-26 20:56:51 +01:00
Vincent Petry
58b4c2c0e5
Make sure mountOptions keep their data type
...
str_replace for $user substitution was converting the data type of
mountOptions to string. This fix prevents this to happen by making sure
only strings are processed by substitution.
Also added a int conversion when reading the watcher policy
2015-03-26 19:24:37 +01:00
Jenkins for ownCloud
b585d87d9d
Update license headers
2015-03-26 11:44:36 +01:00
Morris Jobke
24d0dfc727
Revert "FIX for webdav.mediencenter.t-online.de"
2015-03-26 00:56:06 +01:00
Oliver Kohl D.Sc.
9323285987
FIX for webdav.mediencenter.t-online.de
...
https://webdav.mediencenter.t-online.de returns invalid response code.
e.g.
{"reqId":"f9a1c394b98108e4e5ca62bf47829c64","remoteAddr":"81.189.45.224","app":"PHP","message":"Undefined offset: 2 at \/var\/www\/owncloud\/3rdparty\/sabre\/dav\/lib\/Sabre\/DAV\/Client.php#569","level":3,"time":"2015-03-25T18:25:48+00:00","method":"GET","url":"\/index.php\/apps\/files\/ajax\/getstoragestats.php?dir=External%2FT-Cloud%2FTests"}
e.g.
{"reqId":"3407d66672b3cef206b0af883e49bff4","remoteAddr":"46.74.125.245","app":"PHP","message":"Undefined index: {DAV:}getlastmodified at \/var\/www\/owncloud\/lib\/private\/files\/storage\/dav.php#563","level":3,"time":"2015-03-25T16:33:21+00:00"}
2015-03-25 21:29:29 +01:00
Robin Appelman
73874ca27f
Merge pull request #14704 from owncloud/storage-wrapper-mount
...
pass mountpoint to storage wrapper callback
2015-03-19 16:20:38 +01:00
Lukas Reschke
f13216d275
Use `FILTER_UNSAFE_RAW` instead of `FILTER_SANITIZE_STRING`
...
`FILTER_SANITIZE_STRING` will still encode everything else.
2015-03-17 21:56:16 +01:00
Thomas Müller
6927773648
Merge pull request #14776 from owncloud/fix-14629-master
...
verify the file name length not to exceed 255 characters + verify path d...
2015-03-16 09:58:41 +01:00
Thomas Müller
5855108e9b
drop any fallback code related to curl - refs https://github.com/owncloud/core/pull/14838#issuecomment-78586447
2015-03-12 21:43:41 +01:00
Thomas Müller
80ef53eff0
verify the file name length not to exceed 255 characters + verify path during rename
2015-03-12 10:47:47 +01:00
Robin Appelman
169031d1c5
fix factory test
2015-03-11 15:07:59 +01:00
Robin Appelman
e1f2a6df94
Allow setting the watcher policy as mount option
2015-03-11 15:07:23 +01:00
Robin Appelman
7adda88786
Copy mount options to the storage
2015-03-11 15:06:48 +01:00
Robin Appelman
e5c8fd37df
pass mountpoint to storage wrapper callback
2015-03-11 15:06:12 +01:00
Lukas Reschke
284bd6647c
Merge pull request #14759 from owncloud/clean-up-code
...
Clean-up code and use proper exception types
2015-03-10 14:18:21 +01:00
Lukas Reschke
2ac6f3a4f5
Clean-up code and use proper exception types
2015-03-09 11:48:55 +01:00
Thomas Müller
3623f14e73
no translation service in common storage class
2015-03-09 10:38:38 +01:00
Thomas Müller
33b11682f9
translate error messages
2015-03-09 10:38:38 +01:00
Lukas Reschke
2f18a09a20
Optimize loop
2015-03-09 10:38:38 +01:00
Thomas Müller
4bac595068
adding storage specific filename verification - refs #13640
2015-03-09 10:38:37 +01:00
Morris Jobke
06aef4e8b1
Revert "Updating license headers"
...
This reverts commit 6a1a4880f0
.
2015-02-26 11:37:37 +01:00
Vincent Petry
9f6dcb9d3e
Sabre Update to 2.1
...
- VObject fixes for Sabre\VObject 3.3
- Remove VObject property workarounds
- Added prefetching for tags in sabre tags plugin
- Moved oc_properties logic to separate PropertyStorage backend (WIP)
- Fixed Sabre connector namespaces
- Improved files plugin to handle props on-demand
- Moved allowed props from server class to files plugin
- Fixed tags caching for files that are known to have no tags
(less queries)
- Added/fixed unit tests for Sabre FilesPlugin, TagsPlugin
- Replace OC\Connector\Sabre\Request with direct call to
httpRequest->setUrl()
- Fix exception detection in DAV client when using Sabre\DAV\Client
- Added setETag() on Node instead of using the static FileSystem
- Also preload tags/props when depth is infinity
2015-02-23 22:27:23 +01:00
Jenkins for ownCloud
6a1a4880f0
Updating license headers
2015-02-23 12:13:59 +01:00
Morris Jobke
1bb6de7c1b
Merge pull request #13425 from owncloud/phpdoc_cleanup
...
Cleanup of PHPDoc return types
2015-02-10 01:14:00 +01:00
Vincent Petry
5ade2854ee
Fix DAV exceptions, some will still return false now
...
Since the Storage interface isn't ready to work directly with exceptions
like Forbidden and NotFound, the DAV storage has been adapted to still
return false when expected.
2015-01-30 12:02:23 +01:00
Morris Jobke
87b39e8f03
Merge pull request #13525 from owncloud/s2s-fixscanfileforbrokenstorage
...
Catch storage exception in scanner for remote shares
2015-01-28 00:31:37 +01:00
Vincent Petry
f6e644b43f
Catch storage exception in scanner for remote shares
...
Whenever an exception occurs during scan of a remote share, the share is
checked for availability. If the storage is gone, it will be removed
automatically.
Also, getDirectoryContent() will now skip unavailable storages.
2015-01-26 13:59:49 +01:00
Robin Appelman
960ff4f136
Apply wrappers to existing mounts before registering it
2015-01-23 13:48:35 +01:00
Vincent Petry
5fb8a4715d
removeStorageWrapper to unregister a storage wrapper
2015-01-23 12:20:54 +01:00
Vincent Petry
6fb553e92c
Do not call wrapStorage if storate with same name added twice
2015-01-22 16:24:24 +01:00
Robin McCorkell
2b99fc76ec
Cleanup of PHPDoc return types
2015-01-16 20:30:43 +00:00
Morris Jobke
fd57820708
Merge pull request #13132 from aptivate/improve_debug_logging_messages
...
Improve debugging for ServiceUnavailable exceptions
2015-01-07 10:36:27 +01:00
Chris Wilson
402a3ed146
Improve debugging for ServiceUnavailable exceptions
...
I was getting a lot of these in my logs for no apparent reason, and file
uploads were failing:
{"app":"webdav","message":"Sabre\\DAV\\Exception\\ServiceUnavailable: ","level":4,"time":"2015-01-06T15:33:39+00:00"}
In order to debug it, I had to add unique messages to all the places where
this exception was thrown, to identify which one it was, and that made the
logs much more useful:
{"app":"webdav","message":"Sabre\\DAV\\Exception\\ServiceUnavailable: Encryption is disabled","level":4,"time":"2015-01-06T15:36:47+00:00"}
2015-01-06 15:59:38 +00:00
Jörn Friedrich Dreyer
c738359a11
add paged provider
2015-01-02 10:28:41 +01:00
Thomas Müller
81243b0f5d
adding getDirectDownload() to Wrapper
2014-12-28 17:17:14 +01:00
Thomas Müller
5b00bc1d6e
Adding basement for the direct download url
2014-12-28 17:17:14 +01:00
Morris Jobke
5b3971f002
Merge pull request #12639 from owncloud/bad_mtime_format
...
Fix formatting of bad dates from external storages
2014-12-13 10:07:10 +01:00
Robin McCorkell
fdbb68a3c3
Return ? if mtime is 0 or -1
...
Tooltip contains 'Unable to determine date'. Fixes #6395
2014-12-12 23:54:18 +00:00
Vincent Petry
b1bef5cc15
Merge pull request #12587 from owncloud/dav-logerrors
...
Log exceptions in DAV storage
2014-12-12 11:58:04 +01:00
Robin Appelman
f4701d7721
Add public api for mount configurations
2014-12-04 16:47:27 +01:00
Vincent Petry
bc12d28f23
Log exceptions in DAV storage
...
In some cases a "NotFound" might be expected, so just return false as
before. But for other exceptions, the exception is now logged.
2014-12-03 22:20:00 +01:00
Robin Appelman
1bbb18fe87
also clear statcache in mapped local
2014-12-02 16:39:03 +01:00
Robin Appelman
db3f7238dd
Clear statcache before getting the mtime from local storage backends
2014-12-02 14:25:49 +01:00
Vincent Petry
8db4dd7585
Merge pull request #12469 from owncloud/issue/12460-port-local-changes2mapped
...
Issue/12460 port local changes2mapped
2014-12-01 10:42:39 +01:00
Robin Appelman
05a069c101
Merge pull request #12426 from owncloud/jail-mask-wrappers
...
Add Jail and PermissionsMask storage wrappers
2014-11-27 16:00:14 +01:00
Robin Appelman
33b64868d7
Add storage and cache wrappers to apply a permissions mask to a storage
2014-11-27 15:25:57 +01:00
Robin Appelman
abb6e89c5d
Add storage and cache wrappers to jail a storage to a subfolder
2014-11-27 15:25:53 +01:00
Joas Schilling
7761f0288e
Also clearstatcache() in MappedLocal before using the stats
...
Local change 283c10f010
2014-11-27 14:59:10 +01:00
Joas Schilling
50f85bfd1f
Check whether file exists before trying to touch() it
...
Local changes from d069ee8a8b
and 258ad38fd3
2014-11-27 14:59:09 +01:00
Joas Schilling
c5427da76d
Check return of disk_free_space before returning it
...
Local changes copied from ed83597371
and 25370fcb82
2014-11-27 14:59:08 +01:00