Commit Graph

295 Commits

Author SHA1 Message Date
StageGuard
ff96dce35d
[core] sso reserve field and encrypt spi 2023-07-02 21:20:26 +08:00
StageGuard
545e5bb310
[core] Provide isFirstLogin and getReLoginCause in BotAuthInfo (#2664)
* [core] provide `isFirstLogin` and `getReLoginCause` in `BotAuthInfo`

* [core] provide `reAuthCause` as sealed class

* [core] add test

* Update mirai-core-api/src/commonMain/kotlin/auth/BotAuthorization.kt

我觉得这个描述不太好,因为这里是 `authorize` 过程而不是 `login` 过程

Co-authored-by: Him188 <Him188@mamoe.net>

* [core] optimize docs and rename

* import

* revert linebreak

---------

Co-authored-by: Him188 <Him188@mamoe.net>
2023-06-20 14:22:49 +01:00
Him188
8ff64d4a7f
Remove native (#2700)
* Remove native target

* Add foojay-resolver-convention

* disable windows
2023-06-16 13:40:46 +01:00
StageGuard
60d360baad
[core] Update login protocol, deprecate DeviceInfo constructor and serializer (#2613)
* [core] update protocol

* [core] fix t106 decryption key

* [core] handle t543

* [core] revert t106

* [core] revert native test pow data

* [core] split build version and apk version name

* [core] pass time to t1 instead of time diff

* [core] remove unused t106 writer & rename param ip to ipv4 of t1 and t106

* [core] implement qimei for t545
TODO: aes and rsa crypto for nativeMain

* [core] fix base64 decode for android in rsa

* [core] fix unix timestamp parsing on native and add more tests

* [api] DeviceInfo move `androidId` to main constructor and adjust test.

* [api] do not request qimei when protocol is neither  ANDROID_PHONE nor ANDROID_PAD

* [api] implement aes crypto for native target

* [api] rsa crypto for multi-platform

* [api] crypto test

* [api] move freePointer util

* [api] openssl api compatibility

* [core] add explicit `androidId` param

* [core] remove unused `tlvCount`

* [core] optimize crypto

* [core] move Qimei to network package

* [core] move appId to protocol

* [core] lazily initialize qimeiLogger

* [core] write byte array to BIO mem

* [core] move qimei to client, add direct serializer for DeviceInfo

* [core] optimize DeviceInfoDelegateSerializer

* [core] real user-agent when requesting qimei

* [core] use `DeviceInfo.version.release`

* [core] remove unused wtlogin packet

* [core] do what constructor serializer should do

* [core] fix endless cache validation caused by not upgrading device info file.

* [core] request qimei before fast-login

* [core] tlv order

* [core] remove wrong tests and print more detail when deserialize failed.

* [core] device info upgrade for native

* [core] request qimei after validating cache

* [core] DeviceInfo compatibility

* [core] DeviceInfo test name

* [core] compatibility serializer

* [core] disable rsa crypto test on android unit test

* [core] move rsa impl to jvmBase

* action

* import

* api dump

* api dump

* revert wrong api dumps

* [core] Deprecate DeviceInfo constructor and serializer, provide `serializeToString` and `deserializeFromString` for replacement

* rerun ci

* optimize

* use serializer directly

* optimize test

* revert

* [core] CacheValidator use `DeviceInfo.serializeToString()` instead of direct serializer

* Remove `println` in `DeviceInfoManager`

* Add legacy deserialize overload for ABI compatibility

* Remove uncompleted docs for DeviceInfo

* Suppress DeviceInfo deprecation warnings for internal usages

---------

Co-authored-by: Him188 <Him188@mamoe.net>
2023-05-21 13:45:46 +01:00
Him188
bda5d54bd3 [core/auth] Wrap exception from BotAuthorization as BotAuthorizationException; add tests 2023-05-04 16:36:28 +01:00
Him188
0c24053198 [core] AuthControl: require explicit .start() instead of launching job in constructor 2023-05-04 16:36:28 +01:00
Him188
40d4957837 [core/android] Implement mirai-core tests for Android target with AndroidSDK 2023-05-02 16:17:48 +01:00
Him188
a988d442e2
[core] Add PacketReplier DSL for core tests 2023-05-01 22:56:34 +01:00
Karlatemp
1169d7cf57
[core] Fix quote replying; Fix message source time 2023-03-29 22:52:58 +08:00
Him188
c74e9d2858
[build] Make mirai-core AbstractTest public, and add dependsOnCoreJvmTest in buildSrc 2023-03-21 18:12:04 +00:00
Him188
427c37e649
[build] Update to Kotlin 1.8.10 2023-03-19 03:18:34 +00:00
StageGuard
78d0b4fd54
QRCode login support & Introduce new authorization factory (#2502)
* [core] process `wtlogin.trans_emp` to support qrcode login

* [core] fix `wtlogin.trans_emp` protocol

* [core] optimize QRCodeLoginProcessor logic

* [core] fix `wtlogin.trans_emp` outgoing packet

* [core] cancel login when logging a bot which is inconsistent from bot factory

* [core] ignore `flag3` check on ANDROID_WATCH & name `flag1` and `flag2`

* [core] provide default `QRCodeLoginListener` for jvm

* [core] don't catch IllegalStateException in QRCodeLoginProcessor

* [core] Use `LoginSolver.createQRCodeLoginListener()` instead of property; Rename configuration name

* [core] Code improvement

* [core] remove qrcode state lock

* [core] ignore `flag3` when command is `wtlogin.trans_emp` in packet codec

* [core] enable qrcode login for macos

* [core] remove debug property in log

* [core] reformat code

* [core] rename `TransEmpResponse` to `Response`

* [core] assert `flag3Exception` not null first

* [core] remove arg client

* [core] update qrcode login notes

* [core] set custom qrcode size

* [core] Draft BotAuthorization

* [core] make SecretsProtection mpp

* [core] BotAuthorization.byXXX

* [core] Move QRCodeLoginListener to `.auth`

* [core] Protect data of BotAccount

* [core] Add SelectorRequireReconnectException

* [core] Implementation of BotAuthorization

* Revert changes of BotConfiguration

* api dump

* [core] remove passwordMd5 in `BotAccount`

* [mock] Add new bot factory function to mock bot factory

* Delete LoginCommandTest

* [core] Improve QRCode render

* [core] Introduce UnsupportedCaptchaMethodException & UnsupportedQRCodeCaptchaException

* api dump

* update docs

* [core] update `DebugRunHelper`

* [core] add simple block for BotAuthorization

* api dump

* Rename `canDoQRLogin` to `supportsQRLogin`, and specify argument names for MiraiProtocolInternal

* Remove `phoneNumber` parameter from BotAccount

* Make `BotAccount.<init>` with String password parameter TestOnly

* Rename `InconsistentBotException` to `InconsistentBotIdException`

* Rename `QRCodeLoginListener.onStatusChanged` to `QRCodeLoginListener.onStateChanged`

* Rename `BotAuthorizationResult` to `BotAuthResult`

* Rename BotAuthComponent, move internal APIs to internal module

* Logic fixup

* doc update

* QRCodeLoginListener.qrCodeStateUpdateInterval & onIntervalLoop

* console login with BotAuthorization

* update testing

* Update mirai-core-api/src/jvmMain/kotlin/utils/LoginSolver.jvm.kt

* Move AuthControl outside SsoProcessor

* Redesign auth

* Add initialTicket to producerCoroutine

* Revert protocol changes of MACOS

* Fix latch death locking

* Fix CoroutineOnDemandValueScope.receiveOrNull exceptional finish

* Fix exception collecting

* Fix DefaultBotAuthorizationFactory loading

* [core] qrcode login for IPAD protocol

* Revert "[core] qrcode login for IPAD protocol"

This reverts commit c1136a8798.

---------

Co-authored-by: Karlatemp <kar@kasukusakura.com>
Co-authored-by: Him188 <Him188@mamoe.net>
2023-03-18 13:52:31 +00:00
Karlatemp
4d9f6e88f9
[core] Fix polymorphic serialization 2023-02-20 22:09:39 +08:00
sandtechnology
f4667fe1ef
[core] Handle TimeoutCancellationException when resuming connection. Fix #2504, fix #2488 (#2505)
* #2504,#2488 handle TimeoutCancellationException when resuming connection

* Remove unnecessary code and fix wording

* Use yield() instead of delay

* Use yield() instead of delay
2023-02-19 11:49:41 +00:00
Karlatemp
e686a23f40
[core] Fix offline message source quote replying; fix #2501 2023-02-16 23:06:23 +08:00
cssxsh
2cffb7a4a4
[core] feat: RockPaperScissors (#2220)
* [core] feat: RockPaperScissors

Co-authored-by: Karlatemp <kar@kasukusakura.com>

* docs update

* rename `eliminate` to `eliminates`

Co-authored-by: Karlatemp <kar@kasukusakura.com>
2023-01-03 10:00:32 +08:00
Him188
0a7df909ca
[core] AbstractRealNetworkHandlerTest: close bot after each test only if bot was created 2022-12-27 17:39:46 +00:00
Him188
e3e71e1d1f
[core] Do logout only if firstLoginSucceed 2022-12-27 17:39:46 +00:00
Him188
38162db477
[core] Add test rethrow exception caught during Bot_login, helps #2338 2022-12-27 16:54:05 +00:00
Him188
564a7ce8f8
[core] Review atomic calls and enable atomicfu compiler. Close #2315 2022-10-29 13:04:37 +01:00
Him188
1f8524fb04
Fix all compiler warnings throughout the project 2022-10-21 17:00:37 +01:00
Him188
7fd3234ff3
[core] Fix bot.close, ensure network is also closed, fix recursion problems. Fix #2266 2022-10-10 22:51:02 +01:00
cssxsh
d000f2ea0f
[core] add group level api (#2115)
* add: api dump

* feat: Member.level

* add: api dump

* rename: level to rank

* feat: rank show

* feat: honor flag

* fix: honor flag index

* feat: record and chart

* feat: flag and docs

* add: api dump

* fix: active

* fix: honor

* fix: active

* fix: rebase

* fix: docs

* feat: MemberActive

* fix: for review

* feat: other notification

* remove: low level api

* add: since and api dump

* add: since

* for: review

* add: event sync

* fix: name and docs

* fix: api dump

* fix: for review

* add: ActiveRank, MemberMedal close #2233

* fix: active for review

* improve public API for inlined GroupHonorType

* Change `@since 2.13.0` to `@since 2.13`

* dump api changes

* implement mock framework for Active

* change `GroupActive.flush` to `GroupActive.refresh`

* improve docs for GroupActive

* remove unnecessary expect/actual for MemberActive

* change property names in GroupInfo

* check permission in MockGroupActiveImpl

* optimize member names in  CommonGroupActiveImpl

* fix error checking

* dump api

Co-authored-by: Him188 <Him188@mamoe.net>
2022-09-21 23:18:50 +08:00
AdoptOSS
397d824d33
[core] enhance(ECDH): reconstruct ECDH (#2161)
* enhance(ECDH): reconstruct ECDH
common: 移动特定于 QQ 平台的实现到 OicqECDH,重新设计 ECDH,使 ECDH 类只针对算法本身,而不过多包括 QQ 协议的使用细节
jvm: 尝试优先使用平台加密实现,可能改善性能
jvm & android: 使用 curveName `secp256r1` 代替 `prime256v1`,前者在 Java 中更常用,可以被更多的 JCE 实现所识别(虽然都是指同一条曲线)
android: 使用系统自带的实现以减少依赖,并尝试兼容 Android P+ 版本
native: 中间储存时保留OpenSSL内部结构而不反复 new & free,提高性能
    (为了实现智能指针,需要用到 `@ExperimentalStdlibApi` 的 `createCleaner`,但这种风险应该可以接受)
native: 直接使用 point/bignum 到 bytes 的转换,避免了 hex string 作为中间层,提高效率

* test(ECDH): fix AndroidTest

* style(Ecdh): obey official Kotlin coding conventions
> When using an acronym as part of a declaration name, capitalize it if it consists of two letters (IOStream); capitalize only the first letter if it is longer (XmlFormatter, HttpInputStream).
> [View origin](https://kotlinlang.org/docs/coding-conventions.html)

Co-authored-by: ArcticLampyrid <arcticlampyrid@outlook.com>
2022-09-11 20:14:39 +08:00
Him188
f4db93745d
[core] Move structureToString from .core.utils.debug to .core.utils
due to compiler bug.
2022-08-27 01:21:14 +08:00
Him188
965ab57aaa
[core] Move StructureToStringTransformer to mirai-core-utils, and use legacy implementation as fallback. close #2097. 2022-08-26 18:42:56 +08:00
Eritque arcus
fea1d28488
[core] Support friend group (#2113)
* feat: support friend group

* remove unnecessary modifications

* toByteArray2

* support friendGroup, with api dump

* support rename, with api dump

* modify as required

* modify as required

* reverse

* doc

* FriendGroups

* api dump

* modify as required

* fix CI

* FriendGroup sync notice

* api dump

* modify as required

* immutable

* add friends: ContactList in FriendGroup

* more sync notice

* modify log content

* Change `FriendGroup.friends` to `Collection<Friend>`

* Fix `FriendGroup.friends.isEmpty()`

* modified as require, untested

* del count and online count in info

* change import

* fix missing import

* set @since 2.13 and modified as required

* modified as required

* modified as required

* doc

* change friendGroupId type to Int?

* api dumped

* change friendGroupId type to Int?

* introduce null to friendGroupId

* modified as required

* chore

* api dump

* chore: remark

* change int? to int

* api dump

* Update mirai-core-api/src/commonMain/kotlin/data/FriendGroups.kt

Co-authored-by: Him188 <Him188@mamoe.net>

* Move FriendGroup and FriendGroups to contact.friendgroup

* Make `Friend.friendGroup` not null

* add FriendGroups.default for default group

* Redesign FriendGroup interface

Co-authored-by: Karlatemp <kar@kasukusakura.com>
Co-authored-by: Him188 <Him188@mamoe.net>
2022-08-26 16:56:09 +08:00
Him188
fb3f39e328 [core] Improve NetworkHandler exception handling and optimize exception logging:
- close #2175
- close #2148
- Fix `Throwable.findCause`
- Rename `mirai.network.handle.selector.logging` to `mirai.network.handler.selector.logging`
- Hide rather long and complicated `CancellationException`s, use `mirai.network.handler.cancellation.trace` to re-enable it
2022-08-26 15:20:04 +08:00
Eritque arcus
b4066ac6d1
NextEventAndIntercept and NextMessageAndIntercept (#2177)
* rewrote pr, no tested

* test and change param position

* enable ci

* finish test

* modified as required

* typo
2022-08-23 18:07:03 +08:00
Him188
2e4cab4365
[core] Fix sending FileMessage on uploadNewFile (regression in 2.12.0), fix #2195 2022-08-16 10:54:55 +08:00
Him188
39074f1764
[build] Update to Kotlin 1.7.10:
Kotlin 1.7.10
kotlinx-serialization 1.3.3
kotlinx-coroutines 1.6.4
kotlinx-atomicfu 0.17.3
Ktor 2.1.0
2022-08-15 18:36:40 +08:00
Him188
bbd89417ea Add addOtherClient for GroupExtensions for tests, add other clients before running tests for MessageSyncEvent 2022-08-03 11:27:39 +08:00
cssxsh
c38740ce2f
在 Image 序列化时支持全部属性 (#2036)
* fix: Image Serializer Delegate

* use: api dump

* add: test Image serialization

* fix: type (SerialName) and deserialize

* fix: native test
2022-07-22 03:05:08 +08:00
Him188
e5cad1d0ba
Rewrite MessageSerializers for new project structure (#2159) 2022-07-20 15:09:09 +08:00
Him188
699718f958 Add multiplatform DynamicTest 2022-07-20 00:30:16 +08:00
AdoptOSS
7325c1f7e2 native: 优化 build script 及 actions,修复 ECDH 相关资源释放问题 (#2110)
* build: fix build on Windows

* test: fix ContentEqualsTest on native

* build: allow disabling targets with property

* fix: free ECDH-related resources properly on native
avoid memory leaking (usually on *nix) or crash (usually on Windows)

Signed-off-by: AdoptOSS <adoptoss@outlook.com>

* build(workflow): remove invalid options

* fix(styling): `mirai.target` property

* build(workflow): try to limit memory usage during mirai-console:tools:gradle-plugin:integTest

* enhance(test): use buildList

* build(workflow): retry

Co-authored-by: ArcticLampyrid <arcticlampyrid@outlook.com>
2022-07-20 00:30:16 +08:00
Him188
f962618bee Fix compiler warnings 2022-07-20 00:30:16 +08:00
Him188
21c4a5ba04 Use kotlinx-coroutines-test 2022-07-20 00:30:16 +08:00
Him188
e1123e9a96 Move AudioTest to message/data 2022-07-20 00:30:16 +08:00
Him188
0f26dbff5c Add test for test Audio extraData 2022-07-20 00:30:16 +08:00
Him188
dab703869f core: Close and join all jobs after each test 2022-07-20 00:30:16 +08:00
Him188
4c6b879873 Upgrade to Ktor 2.0.2, use CIO engine for linux targets; Remove ktor-client-okhttp from mirai-core-api jvmBaseMain
Use Input.readAllText instead of Input.readText, because readText only reads one buffer.
#2084
2022-07-20 00:30:16 +08:00
Him188
c260abb6f3 Cancel TestEventDispatcher jobs after test 2022-07-20 00:30:16 +08:00
Him188
a964f7ee87 Improve core network stability:
Close network and do logout only if networkInitialized

core, network: Guard changing state

core, network: Protect state overriding when setting a state

Always close NetworkHandlerSupport even if CommonNetworkHandler is in CLOSED state
2022-07-20 00:30:16 +08:00
Him188
2f537f90b4 Use different types for TestState 2022-07-20 00:30:16 +08:00
Him188
89fa379f8f Add native test entrance 2022-07-20 00:30:16 +08:00
Him188
d27228c8c8 Rewrite MessageSerializers, register serializers in each MessageProtocol, implement for native targets 2022-07-20 00:30:16 +08:00
Him188
13dadd5a95 Implement mirai-core for native 2022-07-20 00:30:16 +08:00
Him188
ff2a8acb0c Implement multiplatform modules 2022-07-20 00:30:16 +08:00
Him188
ce87400998 Use ktor-io to replace kotlinx-io 2022-07-20 00:30:16 +08:00