Kagami Sascha Rosylight
eb7b5f905a
feat(backend): support OAuth 2.0 authorization ( #11053 )
...
* feat(backend): support OAuth 2.0 authorization
* secureRndstr fix
* nanndekowareta
* nanndekowareta2
* nanndekowareta3
* unref?
* refactor to not close fastify
* use microformats-parser
* Update OAuth2ProviderService.ts
* clarify the reason behind dns lookup
* refactor(backend): use @types/oauth2orize-pkce (#11350 )
* refactor(backend): use @types/oauth2orize-pkce
* Update package.json
* Update pnpm-lock.yaml
---------
Co-authored-by: Kagami Sascha Rosylight <saschanaz@outlook.com>
---------
Co-authored-by: mtgto <hogerappa@gmail.com>
Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
2023-07-27 18:51:58 +09:00
Shun Sakai
c2370a1be6
chore: 著作権とライセンスについての情報を各ファイルに追加する ( #11348 )
...
* chore: Add the SPDX information to each file
Add copyright and licensing information as defined in version 3.0 of
the REUSE Specification.
* tweak format
---------
Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
2023-07-27 14:31:52 +09:00
woxtu
cb0fa9a8ab
Use promises API ( #11351 )
2023-07-27 09:04:19 +09:00
Acid Chicken (硫酸鶏)
9208cfd5f3
fix: hide sensitive gallery image on OGP ( #11380 )
2023-07-25 10:45:46 +00:00
Koki Takahashi
0404d9c103
fix(backend): Change isPublic to correctly recognize as:Public term ( #11347 )
...
* fix: Change isPublic to correctly recognize as:Public term
* Update CHANGELOG.md
---------
Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com>
2023-07-25 10:35:21 +00:00
tamaina
c1a19ff900
fix(backend): Use OFFSET instead of SKIP when using LIMIT ( #11379 )
...
* fix(backend): Use OFFSET instead of SKIP when using LIMIT
* update CHANGELOG.md
2023-07-25 19:21:50 +09:00
hutchisr
ac6a8edf0b
Use BullMQAdapter ( #11367 )
2023-07-25 16:32:52 +09:00
Acid Chicken (硫酸鶏)
c9b9db13c7
refactor: avoid redundant method chain
2023-07-21 10:07:03 +00:00
Alex
b3358f0a8b
enhance: Add OGP data for notes with multiple images/videos ( #11142 )
...
* Add OGP data for notes with multiple images/videos
* Update CHANGELOG.md
* Update packages/backend/src/server/web/views/note.pug
Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com>
* Update packages/backend/src/server/web/views/note.pug
Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com>
---------
Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com>
2023-07-21 09:40:30 +00:00
syuilo
af2368bd2b
perf(backend): use RSA 2048bit
...
#11129
2023-07-21 11:59:00 +09:00
syuilo
2cb8e8a748
fix(backend): antennas/notesを叩いてもアンテナの無効化が解除されないことがある問題を修正
2023-07-21 10:09:03 +09:00
meron
2801946226
fix(server): アンテナ再有効の手段にアンテナ設定の更新を追加 ( #11036 )
...
* fix(server): アンテナ再有効の手段にアンテナの表示とアンテナ設定の更新を追加
* 無効+Redisも空なアンテナの再有効化手段を antennas/update だけに
2023-07-21 10:06:11 +09:00
Kagami Sascha Rosylight
64c142b1ca
chore(backend): better error message for unsupported attestation ( #11333 )
2023-07-21 07:49:39 +09:00
tamaina
509e3f979e
fix redis config
...
https://github.com/misskey-dev/misskey/pull/11329#issuecomment-1644217395
2023-07-20 16:22:47 +00:00
tamaina
0a06eb27da
enhance(backend): 設定ファイルでioredisの全てのオプションを指定可能に ( #11329 )
...
* enhance(backend): 設定ファイルでioredisの全てのオプションを指定可能に
* yappa kousuru
* fix
* fix?
* fix
* Revert "fix"
This reverts commit 227f19ff3afcbbd560b831493975206263a1a5a3.
* fix
2023-07-20 19:50:31 +09:00
syuilo
7d6ea74288
enhance(backend): admin/emoji/addで作成した絵文字を返すように
2023-07-20 17:40:04 +09:00
Acid Chicken (硫酸鶏)
e6fca72171
perf: use slacc instead of unzipper ( #10780 )
...
Co-authored-by: tamaina <tamaina@hotmail.co.jp>
2023-07-20 17:00:54 +09:00
tamaina
dc93a418c0
perf(backend): createPersonでキャッシュに保存する, DBのトランザクション回数を減らす ( #11324 )
...
* perf(backend): createPersonでキャッシュを積極的に利用する, トランザクション回数を減らす
* move comment
* fix
* oops
* fix
* fix
* fix
2023-07-20 14:44:37 +09:00
syuilo
871027fa0c
enhance: ユーザーにロールが期限付きでアサインされている場合、その期限をユーザーのモデレーションページで確認できるように
...
Close #11059
2023-07-20 10:54:41 +09:00
xtex
bf9e74ca05
fix: failed to resolve acct URI which points to local Person ( #11024 )
...
* fix: resolving alias for local users (#9199 )
Signed-off-by: xtex <xtexchooser@duck.com>
* style: return type for RemoteUserResolveService#resolveSelf
Signed-off-by: xtex <xtexchooser@duck.com>
* docs: update CHANGELOG
Signed-off-by: xtex <xtexchooser@duck.com>
* style: fix typecheck
Signed-off-by: xtex <xtexchooser@duck.com>
---------
Signed-off-by: xtex <xtexchooser@duck.com>
Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
2023-07-19 13:01:14 +09:00
woxtu
8c77153c04
Fix auto-fixable issues ( #11314 )
2023-07-19 11:27:50 +09:00
dogcraft
5dab918999
enhance(backend): add unix socket support ( #11275 )
...
* unix socket support
* add changelog
* lint
---------
Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
2023-07-17 14:12:02 +09:00
syuilo
ad5fd626c7
fix of #11293
2023-07-16 14:46:41 +09:00
CGsama
4417412787
Export notes with file detail ( #11293 )
2023-07-16 14:21:49 +09:00
Kagami Sascha Rosylight
d5f30ecb86
feat(backend): allow disabling cache for sensitive files ( #11245 )
...
* feat(backend): allow disabling cache for sensitive files
* Update CHANGELOG.md
* fix storybook
* Update locales/ja-JP.yml
---------
Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
2023-07-15 20:12:20 +09:00
syuilo
f96ed9a3f3
fix type errors
2023-07-15 20:07:31 +09:00
woxtu
b392f44b81
refactor(backend): Improve UUID generation ( #11286 )
...
* Replace with `crypto.randomUUID()`
* Remove uuid
2023-07-15 18:39:38 +09:00
syuilo
9a5bc78eb4
update deps
2023-07-15 16:07:30 +09:00
ZerglingGo
8f196fc67c
fix: typo in comment ( #11283 )
2023-07-15 10:01:41 +09:00
まっちゃとーにゅ
9e330c9e38
feat: MeilisearchにIndexするノートの範囲を設定できるように ( #11282 )
2023-07-15 09:59:19 +09:00
yukineko
02957a1b5d
enhance: 招待機能の改善 ( #11195 )
...
* refactor(backend): 招待機能を改修
* feat(backend): 招待コードのcreate/delete/listエンドポイントを追加
* add(misskey-js): エンドポイントと型を追加
* change(backend): metaでinvite関連の情報も返すように
* add(misskey-js): エンドポイントと型を追加
* add(backend): `/endpoints/invite/limit`を追加
* fix: createdByがnullableではなかったのを修正
* fix: relationが取得できていなかった問題を修正
* fix: パラメータを間違えていたのを修正
* feat(client): 招待ページを実装
* change(client): インスタンスメニューの「招待」押した場合に招待ページに飛ぶように変更
* feat: 招待コードをコピーできるように
* change(backend): metaに招待コード発行に関する情報を持たせるのをやめる
* feat: ロールごとに招待コードの発行上限数などを設定できるように
* change(client): 招待コードをコピーしたときにダイアログを出すように
* add: 招待に関する管理者用のエンドポイントを追加
* change(backend): モデレーターであれば作成者以外でも招待コードを削除できるように
* change(backend): admin/invite/listはオフセットでページネーションするように
* feat(client): 招待コードの管理ページを追加
* feat(client): 招待コードのリストをソートできるように
* change: `admin/invite/create`のレスポンスを修正
* fix(client): 有効期限を指定できていなかった問題を修正
* refactor: 必要のない箇所を削除
* perf(backend): use limit() instead of take()
* change(client): 作成ボタンを見た目を変更
* refactor: 招待コードの生成部分を共通化し、コード内に"01OI"のいずれかの文字を含まないように
* fix(client): paginationの仕様が変わっていたので修正
* change(backend): expiresAtパラメータのnullを許容
* change(client): 有効期限を設けないときは日付の入力欄を非表示に
* fix: 自身のポリシーよりもインスタンス側のポリシーが優先表示される問題を修正
* fix: n時間のときに「n時間間」となってしまうのを修正
* fix(backend): ポリシーが途中で変更されたときに作成可能数がマイナス表記になってしまうのを修正
* change(client): 招待コードのユーザー名が不明な理由を表示するように
* update: CHANGELOG.md
* lint
* refactor
* refactor
* tweak ui
* 🎨
* 🎨
* add(backend): indexを追加
* change(backend): indexの追加に伴う変更
* change(client): インスタンスメニューの「招待」の場所を変更
* add(frontend): MkInviteCode用のstorybookを追加
* Update misskey-js.api.md
* fix(misskey-js): InviteのcreatedByの型が間違っていたのを修正
---------
Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
Co-authored-by: tamaina <tamaina@hotmail.co.jp>
2023-07-15 09:57:58 +09:00
okayurisotto
2b6dbd4fcb
refactor: 可読性のため一部でArray.prototype.at
を使うように ( #11274 )
...
* refactor: `Array.prototype.at`を使うように
* fixup! refactor: `Array.prototype.at`を使うように
2023-07-14 10:45:01 +09:00
okayurisotto
c0dbc3b53f
refactor: substr
-> substring
( #11273 )
2023-07-14 07:59:54 +09:00
syuilo
af30959cb9
fix runtime error
2023-07-13 20:15:47 +09:00
okayurisotto
e35a370af0
refactor(backend): core/activitypub
( #11247 )
...
* eslint: `explicit-function-return-type`
* eslint: `no-unnecessary-condition`
* eslint: `eslint-disable-next-line`
* eslint: `no-unused-vars`
* eslint: `comma-dangle`
* eslint: `import/order`
* cleanup: unnecessary non-null assertion
* cleanup: `IActivity`に`actor`は常に存在するようなので
* cleanup: unnecessary `as`
* cleanup: unnecessary `Promise.resolve`
* cleanup
* refactor: `String.prototype.match()`である必要がない部分をよりシンプルな書き方に変更
* refactor: よりよい型定義
* refactor: よりよい型定義
- `LdSignature`の`normalize`メソッドでの使われ方から、
- `data`引数の型定義を`any`から`JsonLdDocument`へ修正
- `getLoader`メソッドの返り値の型定義の一部を`any`から`RemoteDocument`へ修正
- `contextUrl`が不正な値(`null`)となっていたことが判明したため`undefined`へ修正
- `document`の型と合わせるために`CONTEXTS`の型定義の一部を`unknown`から`JsonLd`へ修正
- とりあえず`satisfies`を使用
- `document`の型と合わせるために`fetchDocument`メソッドの返り値の型定義の一部を`unknown`から`JsonLd`へ修正
- どうしようもなく`as`を使用
* refactor: 型ガードを使うことでnon-null assertionをやめた
* refactor: non-null assertionをやめた
`.filter()`で行っている型ガードなどの文脈から、より適しているだろうと思われる書き方に変更した。
* refactor: 型ガードを使うことで`as`をやめた
* refactor: `as`をやめた
* refactor: よりよい型定義
- `id`は`null`とのunionになっていたが、`null`を渡している場面はなかった
- またおそらくこのメソッドは`IOrderedCollection`を返すため、そちらに合わせて`null`とのunionをやめた
- `IOrderedCollection`とはまだ型に相違がある
- `totalItems`をコメントや使われ方を元に`number`へ推論
* refactor: `for-of` -> `Array.prototype.map`
* refactor: `delete`演算子を使わない形に
2023-07-13 12:48:34 +09:00
okayurisotto
cf3e39178b
refactor(backend): 存在確認のfindOneBy
をexist
に置き換え ( #11224 )
...
* refactor(backend): 存在確認の`findOneBy`を`exist`に置き換え
* cleanup
2023-07-11 14:58:58 +09:00
nomad
791ae608a5
fix(backend): fix fetchInstanceMetadata error ( #11236 )
2023-07-11 14:40:56 +09:00
Kagami Sascha Rosylight
5059d4d7e1
refactor(backend): skip fetching notes when the data is same-origin ( #11200 )
...
* refactor(backend): skip fetching notes when the data is same-origin
* Update CHANGELOG.md
* sentFrom
2023-07-09 08:59:44 +09:00
Caipira
60366a4558
fix(backend): Remove Meilisearch index when notes are deleted ( #10988 )
...
* fix(backend): Include feature to delete Meilisearch index notes
* Update variable name
`cascadingNotesFilter` -> `federatedLocalCascadingNotes`
* tweak
---------
Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
2023-07-08 21:31:38 +09:00
tamaina
7ec07d5fd2
perf(backend): Reduce memory usage of MemoryKVCache ( #11076 )
...
* perf(backend): Reduce memory usage of MemoryKVCache
* fix
2023-07-08 21:18:16 +09:00
SASAGAWA Kiyoshi
246d167c81
fix: add suuport Japanese message of errors. ( #11159 )
...
* fix: add suuport Japanese message of errors.
* fix: change catching function.
* lint
---------
Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
2023-07-08 21:10:52 +09:00
nomad
e40a0b98e4
fix(frontend): search user with trailing space ( #11184 )
...
* fix(frontend): search user with trailing space
* fix(backend): search user with trailing space
* Update search.ts
---------
Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
2023-07-08 17:41:52 +09:00
syuilo
081a14d6f3
perf(backend): use limit() instead of take()
2023-07-08 16:53:07 +09:00
CyberRex
8ec96ad1e0
fix(backend): ジョブキュー再試行時のタイミングずれによるエラーを抑制 ( #11035 )
...
* fix(backend): ジョブキュー再試行時のタイミングずれによるエラーを抑制
* fix lint
2023-07-08 08:57:23 +09:00
okayurisotto
4f876c9e8d
refactor(backend): core/activitypub/models
( #11067 )
...
* cleanup(`ApImageService.ts`)
* refactor(`ApImageService.ts`)
* cleanup(`check-https.ts`)
* cleanup(`ApMentionService.ts`)
* refactor(`ApMentionService.ts`)
* cleanup(`ApNoteService.ts`): unneeded `eslint-disable-next-line`
* cleanup(`ApNoteService.ts`)
* WIP(`ApImageService.ts`): `image.url`を`getApHrefNullable()`に通すかどうか悩んでいる
* refactor(`ApNoteService.ts`): function return type
* cleanup(`ApNoteService.ts`): deadcode
* refactor(`ApNoteService.ts`): `eslint-disable-next-line`
* refactor(`ApNoteService.ts`): non-null assertion
これまでは`getApId()`の方でエラーがスローされていた。
* cleanup(`ApNoteService.ts`): unneeded await
* refactor(`ApNoteService.ts`): note.attachment
- `toArray()`を使うように
- よくわからない条件式を整理
- `as`をなくすために`promiseLimit()`でジェネリクスを使うように
* cleanup(`ApNoteService.ts`)
* refactor(`ApNoteService.ts`): よりよい型定義
`res`が`null`でないことは確認されているようだったので`null`とのunionはなくした
* refactor(`ApNoteService.ts`): 不要な条件を削除
* cleanup(`ApNoteService.ts`)
* cleanup(`ApNoteService.ts`): 重要でない`as`を削除
* refactor(`ApNoteService.ts`): `eslint-disable-next-line`
* cleanup(`ApNoteService.ts`): deadcode
* cleanup(`ApNoteService.ts`): unneeded non-null assertion
* refactor(`ApNoteService.ts`): 不要な条件を削除
* WIP(`ApNoteService.ts`): `as`をなくす
エラーメッセージを考える
* cleanup(`ApNoteService.ts`): 不要な`as`を削除
* cleanup(`ApPersonService.ts`): `no-unused-vars`
* cleanup(`ApPersonService.ts`): deadcode
* refactor(`ApPersonService.ts`): function return type
* cleanup(`ApPersonService.ts`): deadcode
* cleanup(`ApPersonService.ts`): deadcode
* WIP(`ApPersonService.ts`): `as`を調整
`null`でないか確認する処理が続いていたので型アサーションは`null`とのunionにした。
より本質的な改善の余地があるように感じるのでひとまずWIPとしてコミット。
* refactor(`ApPersonService.ts`): `eslint-disable-next-line`
* WIP(`ApPersonService.ts`): `as any`をなくした
エラーをスローするようにせざるを得なかったのでエラーメッセージを考える必要がある。
* WIP(`ApNoteService.ts`): non-null assertion
non-nullアサーションを減らすために事前に存在確認をするようにした。
エラーをスローするようにしたのでメッセージを考えなければならない。
* refactor(`ApNoteService.ts`): non-null assertion -> optional chaining
* refactor(`ApPersonService.ts`): `eslint-disable-next-line`
* refactor(`ApPersonService.ts`): `eslint-disable-next-line`
* refactor(`ApPersonService.ts`): function return type
* refactor(`ApPersonService.ts`): type guardによるnon-null assertionの削除
* WIP(`ApPersonService.ts`): `analyzeAttachments`
- Field型を事前に定義しておくように
- `attachments`が`IObject`だった場合、返り値が`{ fields: [] }`になるようだが構わないのか?
- `toArray()`を通すべきでは?
* Revert "WIP(`ApImageService.ts`): `image.url`を`getApHrefNullable()`に通すかどうか悩んでいる"
This reverts commit aeefb843a8a688f8a356794e8981c58f8a2733af.
* cleanup(`ApImageService.ts`): `import`
* refactor(`ApImageService.ts`): 冗長だった部分を短く
* cleanup(`ApMentionService.ts`): `import`
* refactor(`ApImageService.ts`): `JSON.stringify()`でのindentationを追加
* cleanup(`ApNoteService.ts`): `import`
* cleanup(`ApNoteService.ts`)
* cleanup(`ApNoteService.ts`)
* cleanup(`ApNoteService.ts`)
* cleanup(`ApNoteService.ts`): `any`に対するnon-null assertion
* refactor(`ApNoteService.ts`): 添付ファイル
* cleanup(`ApPersonService.ts`): `import`
* refactor(`ApPersonService.ts`): より実情に即した`as`に
* cleanup(`ApPersonService.ts`)
* refactor(`ApPersonService.ts`): 冗長だった部分を修正
* cleanup(`ApPersonService.ts`): deadcode
* cleanup(`ApPersonService.ts`)
* cleanup(`ApQuestionService.ts`): `import`
* refactor(`ApQuestionService.ts`): `eslint-disable-next-line`
* refactor(`ApQuestionService.ts`): `eslint-disable-next-line`
* cleanup(`ApQuestionService.ts`)
* refactor(`ApQuestionService.ts`): non-null assertionを消した
* cleanup(`ApQuestionService.ts`)
* WIP(`ApQuestionService.ts`): non-null assertionを消す
エラーメッセージを考える必要がある。
* refactor(`ApQuestionService.ts`): `any`を消す
* refactor(`ApQuestionService.ts`): function return type
* WIP(`ApPersonService.ts`): 可読性の低い三項演算子を削除しつつnon-null assertionを回避
エラーメッセージを考える必要がある。
* cleanup(`ApPersonService.ts`): 不必要な三項演算子を削除
* cleanup(`ApPersonService.ts`): 不要な`as`
* cleanup(`ApPersonService.ts`)
* refactor(`ApPersonService.ts`)
* refactor(`ApPersonService.ts`): 可読性の低い三項演算子を削除
元の実装が悪いと判断し`null`かどうかの確認をより厳密に行うようにした。
* cleanup(`ApPersonService.ts`)
* cleanup(`ApPersonService.ts`)
* refactor(`ApPersonService.ts`): 返り値を`void`に統一
この返り値を参照しているコードは見当たらなかった。
また、普通に意味がない値であるように見受けられた。
* fixup! refactor(`ApPersonService.ts`): 返り値を`void`に統一
* refactor(`ApNoteService.ts`)
* refactor(`ApPersonService.ts`)
* cleanup(`ApPersonService.ts`)
* cleanup(`ApPersonService.ts`)
* refactor(`ApPersonService.ts`): 返り値の`void`統一と条件式の調整
この返り値を参照しているコードは見当たらなかった。
また、普通に意味がない値であるように見受けられた。
* cleanup(`ApQuestionService.ts`)
* refactor(`ApQuestionService.ts`)
* refactor(`ApQuestionService.ts`)
* refactor(`tag.ts`): function return type
* fixup! enhance: account migration (#10592 )
* fixup! WIP(`ApPersonService.ts`): 可読性の低い三項演算子を削除しつつnon-null assertionを回避
* fixup! cleanup(`ApPersonService.ts`): 不要な`as`
* refactor: エラーメッセージを見繕った
* Revert "cleanup(`ApImageService.ts`): `import`"
This reverts commit 1454d04c377eaf46013b0f3c3ce664a4034fd53a.
* Revert "cleanup(`ApMentionService.ts`): `import`"
This reverts commit 244f6720c134a3434e33c1caf6e3e0c2c87b58f5.
* Revert "cleanup(`ApNoteService.ts`): `import`"
This reverts commit d8f0d769733c4cb0629821b04e557a0ae6f5ff5b.
* Revert "cleanup(`ApPersonService.ts`): `import`"
This reverts commit 5190ef954caf376da46c707f52e02208d53caafd.
# Conflicts:
# packages/backend/src/core/activitypub/models/ApPersonService.ts
* Revert "cleanup(`ApQuestionService.ts`): `import`"
This reverts commit 778585e2882477fec5f11fabf398b4b89cf26da2.
* processRemoteMoveはそのままにしてほしい
* Revert "fixup! refactor(`ApPersonService.ts`): 返り値を`void`に統一"
This reverts commit 083cd678abcd64325b9628895366c03b893e42ca.
* Revert "refactor(`ApPersonService.ts`): 返り値を`void`に統一"
This reverts commit bfa0fcd6f01a6e519ea0c68017358f9980d2ed96.
---------
Co-authored-by: tamaina <tamaina@hotmail.co.jp>
2023-07-08 08:57:13 +09:00
nenohi
3c6175d959
広告の曜日を設定できるように ( #10095 )
...
* 曜日選択できるように
* ラベル選択でもチェックが変更されるように
* adを参照しないといけないかも
* smallint -> integer
* 異物混入だったので取りだし
* タイムゾーン指定(Date2つ使うのなんか違和感
* 未テスト
* これにすると出てこないかも
* UIチョット変更
* UI変更 fix bug
* 畳むように修正
* dayofweek->dayOfWeek
* マイグレ時にnot null,default設定してるのでnullable:falseでよさそう
* コメントの記載
* Update packages/backend/src/server/api/endpoints/meta.ts
Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com>
---------
Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com>
2023-07-08 08:56:11 +09:00
syuilo
1f181536ae
use engines
2023-07-08 08:52:51 +09:00
syuilo
383d6a2485
nodeの推奨(デフォルト)バージョンと最小バージョンを分離
2023-07-08 08:50:02 +09:00
tamaina
b318789354
fix(backend): deliverManyにcontentのnullチェックを追加
...
https://github.com/MisskeyIO/misskey/pull/99
2023-07-07 23:15:04 +00:00
tamaina
0b8e0fa91b
fix
2023-07-07 22:55:53 +00:00