From 4ac38dc09350cf06e133a9063135c109ee054f97 Mon Sep 17 00:00:00 2001 From: Ravi Dev Pandey <62198564+literalEval@users.noreply.github.com> Date: Mon, 2 Oct 2023 22:42:47 +0530 Subject: [PATCH] Keys and encryption (#2027) * add crypto package and password encryption * add doc for Encryptor class * merge with develop * add key generation * write docs and suppress some warnings * fix formatting of lib/views/pre_auth_screens/login.dart --- lib/apptheme.dart | 1 + lib/router.dart | 1 + lib/utils/encryptor.dart | 125 ++++++++++++++++++ lib/view_model/access_request_view_model.dart | 1 + .../select_organization_view_model.dart | 1 + .../feed/organization_feed.dart | 1 + .../access_request_screen.dart | 1 + .../join_organisation_after_auth.dart | 1 + .../profile/profile_page.dart | 1 + lib/views/pre_auth_screens/login.dart | 1 + lib/widgets/custom_avatar.dart | 1 + lib/widgets/custom_list_tile.dart | 1 + lib/widgets/post_container.dart | 1 + lib/widgets/post_detailed_page.dart | 1 + lib/widgets/post_list_widget.dart | 1 + lib/widgets/post_widget.dart | 1 + pubspec.lock | 34 +++-- pubspec.yaml | 4 +- talawa_lint/pubspec.lock | 72 +++++----- talawa_lint/pubspec.yaml | 7 +- 20 files changed, 204 insertions(+), 53 deletions(-) diff --git a/lib/apptheme.dart b/lib/apptheme.dart index 88d81039cb..1ab2071dcc 100644 --- a/lib/apptheme.dart +++ b/lib/apptheme.dart @@ -1,3 +1,4 @@ +// ignore_for_file: talawa_api_doc import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; // import 'package:flutter_screenutil/flutter_screenutil.dart'; diff --git a/lib/router.dart b/lib/router.dart index a5d7a4a5fc..97f854d7c2 100644 --- a/lib/router.dart +++ b/lib/router.dart @@ -1,3 +1,4 @@ +// ignore_for_file: talawa_good_doc_comments import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:talawa/constants/routing_constants.dart'; diff --git a/lib/utils/encryptor.dart b/lib/utils/encryptor.dart index 81e3af61c4..6435a25275 100644 --- a/lib/utils/encryptor.dart +++ b/lib/utils/encryptor.dart @@ -1,5 +1,12 @@ import 'dart:convert'; +import 'dart:typed_data'; + import 'package:crypto/crypto.dart'; +import 'package:hive/hive.dart'; +import 'package:pointycastle/asymmetric/oaep.dart'; +import 'package:pointycastle/asymmetric/rsa.dart'; +import 'package:pointycastle/pointycastle.dart'; +import 'package:pointycastle/random/fortuna_random.dart'; /// Handles all of the encryption tasks in the codebase. class Encryptor { @@ -22,4 +29,122 @@ class Encryptor { if (!shouldEncrypt) return data; return sha256.convert(utf8.encode(data)).toString(); } + + /// Generates RSA Key Pairs (Public/Private). + /// + /// Should be called only during app's first initialization, + /// and any future usage should be done by getting the keys + /// from the local storage. + /// + /// **params**: + /// None + /// + /// **returns**: + /// * `AsymmetricKeyPair`: The generated + /// public and private keys. + AsymmetricKeyPair generateRSAKeyPair() { + final keyGen = RSAKeyGeneratorParameters(BigInt.parse('65537'), 2048, 64); + final secureRandom = FortunaRandom(); + final random = SecureRandom('Fortuna') + ..seed(secureRandom as CipherParameters); + final keyGenParams = ParametersWithRandom(keyGen, random); + + final keyGenerator = KeyGenerator('RSA'); + keyGenerator.init(keyGenParams); + + return keyGenerator.generateKeyPair(); + } + + /// Saves the generated key pair to local storage. + /// + /// Any future usage of the keys must be initiated from here. + /// + /// **params**: + /// * `keyPair`: [AsymmetricKeyPair] to save. + /// + /// **returns**: + /// * `Future`: None + Future saveKeyPair( + AsymmetricKeyPair keyPair, + ) async { + // TODO: Implement secure storage here + + await Hive.openBox>('user_keys'); + final keysBox = await Hive.openBox('user_keys'); + + keysBox.put('key_pair', keyPair); + } + + /// Loads secret keys from the Hive db. + /// + /// **params**: + /// None + /// + /// **returns**: + /// * `Future>`: The public and + /// private key pair + Future> loadKeyPair() async { + await Hive.openBox>('user_keys'); + final keysBox = await Hive.openBox('user_keys'); + + return (await keysBox.get('key_pair')) + as AsymmetricKeyPair; + } + + /// Encrypts the given string data with Recipient's Public Key. + /// + /// **params**: + /// * `data`: The string to encrypt + /// * `recipientPublicKey`: Key to be used to encrypt. Recipient's public + /// key in our case. + /// + /// **returns**: + /// * `String`: Encrypted string + String assymetricEncryptString(String data, RSAPublicKey recipientPublicKey) { + final cipher = OAEPEncoding(RSAEngine()) + ..init(true, PublicKeyParameter(recipientPublicKey)); + + final encryptedBytes = cipher.process(Uint8List.fromList(data.codeUnits)); + return base64Encode(encryptedBytes); + } + + /// Encrypts the given string data with user's Private Key. + /// + /// **params**: + /// * `data`: The string to decrypt + /// * `privateKey`: Key to be used to decrypt. User's private key in our case. + /// + /// **returns**: + /// * `String`: Decrypted string + String assymetricDecryptString(String data, RSAPrivateKey privateKey) { + final cipher = OAEPEncoding(RSAEngine()) + ..init(false, PrivateKeyParameter(privateKey)); + + final decryptedBytes = cipher.process(base64Decode(data)); + return String.fromCharCodes(decryptedBytes); + } + + /// Helper function to decrypt the message. + /// + /// Internally uses the [loadKeyPair] function to get private key and + /// [assymetricDecryptString] to decrypt the given message. + /// + /// **params**: + /// * `message`: Message object containing a field named [encryptedMessage] + /// which is supposed to contained user's message in encrypted format. + /// + /// **returns**: + /// * `Future`: None + /// TODO: Use this somewhere + Future receiveMessage(Map message) async { + final privateKey = (await loadKeyPair()).privateKey; + + final encryptedMessage = message['encryptedMessage'] as String; + final decryptedMessage = assymetricDecryptString( + encryptedMessage, + privateKey as RSAPrivateKey, + ); + + print('Decrypted Message: $decryptedMessage'); + } } diff --git a/lib/view_model/access_request_view_model.dart b/lib/view_model/access_request_view_model.dart index 385578eced..845c4bb634 100644 --- a/lib/view_model/access_request_view_model.dart +++ b/lib/view_model/access_request_view_model.dart @@ -1,3 +1,4 @@ +// ignore_for_file: talawa_api_doc import 'package:flutter/cupertino.dart'; import 'package:graphql_flutter/graphql_flutter.dart'; import 'package:talawa/constants/routing_constants.dart'; diff --git a/lib/view_model/pre_auth_view_models/select_organization_view_model.dart b/lib/view_model/pre_auth_view_models/select_organization_view_model.dart index 7f35f19e8b..f9f005066b 100644 --- a/lib/view_model/pre_auth_view_models/select_organization_view_model.dart +++ b/lib/view_model/pre_auth_view_models/select_organization_view_model.dart @@ -1,3 +1,4 @@ +// ignore_for_file: talawa_good_doc_comments, talawa_api_doc import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:graphql_flutter/graphql_flutter.dart'; diff --git a/lib/views/after_auth_screens/feed/organization_feed.dart b/lib/views/after_auth_screens/feed/organization_feed.dart index 866054452c..61ac18a327 100644 --- a/lib/views/after_auth_screens/feed/organization_feed.dart +++ b/lib/views/after_auth_screens/feed/organization_feed.dart @@ -1,3 +1,4 @@ +// ignore_for_file: talawa_api_doc import 'package:flutter/material.dart'; import 'package:talawa/view_model/after_auth_view_models/feed_view_models/organization_feed_view_model.dart'; import 'package:talawa/view_model/main_screen_view_model.dart'; diff --git a/lib/views/after_auth_screens/join_org_after_auth/access_request_screen.dart b/lib/views/after_auth_screens/join_org_after_auth/access_request_screen.dart index 28a76f96ce..bfd65faee1 100644 --- a/lib/views/after_auth_screens/join_org_after_auth/access_request_screen.dart +++ b/lib/views/after_auth_screens/join_org_after_auth/access_request_screen.dart @@ -1,3 +1,4 @@ +// ignore_for_file: talawa_good_doc_comments, talawa_api_doc import 'package:flutter/material.dart'; import 'package:talawa/apptheme.dart'; import 'package:talawa/models/organization/org_info.dart'; diff --git a/lib/views/after_auth_screens/join_org_after_auth/join_organisation_after_auth.dart b/lib/views/after_auth_screens/join_org_after_auth/join_organisation_after_auth.dart index 92296b8843..e7431dc9d5 100644 --- a/lib/views/after_auth_screens/join_org_after_auth/join_organisation_after_auth.dart +++ b/lib/views/after_auth_screens/join_org_after_auth/join_organisation_after_auth.dart @@ -1,3 +1,4 @@ +// ignore_for_file: talawa_api_doc, talawa_good_doc_comments import 'package:flutter/material.dart'; import 'package:qr_code_scanner/qr_code_scanner.dart'; import 'package:talawa/enums/enums.dart'; diff --git a/lib/views/after_auth_screens/profile/profile_page.dart b/lib/views/after_auth_screens/profile/profile_page.dart index 9cd5bd9686..0c26ff5190 100644 --- a/lib/views/after_auth_screens/profile/profile_page.dart +++ b/lib/views/after_auth_screens/profile/profile_page.dart @@ -1,3 +1,4 @@ +// ignore_for_file: talawa_api_doc import 'package:contained_tab_bar_view/contained_tab_bar_view.dart'; import 'package:flutter/material.dart'; import 'package:flutter_braintree/flutter_braintree.dart'; diff --git a/lib/views/pre_auth_screens/login.dart b/lib/views/pre_auth_screens/login.dart index 7383041a6b..2fc9b39fab 100644 --- a/lib/views/pre_auth_screens/login.dart +++ b/lib/views/pre_auth_screens/login.dart @@ -10,6 +10,7 @@ import 'package:talawa/widgets/raised_round_edge_button.dart'; import 'package:talawa/widgets/rich_text.dart'; /// This is the login widget. +/// /// There are two input fiels. The first one takes in the email and /// the second one takes in the password of the user. /// There is also a "Forgot Password" text button, which directs to diff --git a/lib/widgets/custom_avatar.dart b/lib/widgets/custom_avatar.dart index 3dc5768b33..ba7be607da 100644 --- a/lib/widgets/custom_avatar.dart +++ b/lib/widgets/custom_avatar.dart @@ -1,3 +1,4 @@ +// ignore_for_file: talawa_good_doc_comments, talawa_api_doc import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:flutter_cache_manager/flutter_cache_manager.dart'; diff --git a/lib/widgets/custom_list_tile.dart b/lib/widgets/custom_list_tile.dart index 2bd60e77ff..8fb5494f31 100644 --- a/lib/widgets/custom_list_tile.dart +++ b/lib/widgets/custom_list_tile.dart @@ -1,3 +1,4 @@ +// ignore_for_file: talawa_good_doc_comments, talawa_api_doc import 'package:flutter/material.dart'; import 'package:talawa/enums/enums.dart'; import 'package:talawa/models/options/options.dart'; diff --git a/lib/widgets/post_container.dart b/lib/widgets/post_container.dart index cbb2f60f72..bde701431e 100644 --- a/lib/widgets/post_container.dart +++ b/lib/widgets/post_container.dart @@ -1,3 +1,4 @@ +// ignore_for_file: talawa_api_doc import 'package:flutter/material.dart'; import 'package:visibility_detector/visibility_detector.dart'; diff --git a/lib/widgets/post_detailed_page.dart b/lib/widgets/post_detailed_page.dart index 98d453757c..9e258f3a7f 100644 --- a/lib/widgets/post_detailed_page.dart +++ b/lib/widgets/post_detailed_page.dart @@ -1,3 +1,4 @@ +// ignore_for_file: talawa_good_doc_comments, talawa_api_doc import 'package:flutter/material.dart'; import 'package:talawa/utils/app_localization.dart'; diff --git a/lib/widgets/post_list_widget.dart b/lib/widgets/post_list_widget.dart index b42b12c450..e2c619414e 100644 --- a/lib/widgets/post_list_widget.dart +++ b/lib/widgets/post_list_widget.dart @@ -1,3 +1,4 @@ +// ignore_for_file: talawa_api_doc import 'package:flutter/material.dart'; import 'package:talawa/models/post/post_model.dart'; import 'package:talawa/widgets/post_widget.dart'; diff --git a/lib/widgets/post_widget.dart b/lib/widgets/post_widget.dart index ad7fb19e5b..11da1f4044 100644 --- a/lib/widgets/post_widget.dart +++ b/lib/widgets/post_widget.dart @@ -1,3 +1,4 @@ +// ignore_for_file: talawa_api_doc import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:talawa/models/post/post_model.dart'; diff --git a/pubspec.lock b/pubspec.lock index 5c5d39f912..932e07ed72 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,10 +5,10 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: "405666cd3cf0ee0a48d21ec67e65406aad2c726d9fa58840d3375e7bdcd32a07" + sha256: ae92f5d747aee634b87f89d9946000c2de774be1d6ac3e58268224348cd0101a url: "https://pub.dev" source: hosted - version: "60.0.0" + version: "61.0.0" _flutterfire_internals: dependency: transitive description: @@ -21,10 +21,10 @@ packages: dependency: transitive description: name: analyzer - sha256: "1952250bd005bacb895a01bf1b4dc00e3ba1c526cf47dca54dfe24979c65f5b3" + sha256: ea3d8652bda62982addfd92fdc2d0214e5f82e43325104990d4f4c4a2a313562 url: "https://pub.dev" source: hosted - version: "5.12.0" + version: "5.13.0" analyzer_plugin: dependency: transitive description: @@ -266,7 +266,7 @@ packages: source: hosted version: "0.3.3+4" crypto: - dependency: transitive + dependency: "direct main" description: name: crypto sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab @@ -301,26 +301,26 @@ packages: dependency: "direct dev" description: name: custom_lint - sha256: "3ce36c04d30c60cde295588c6185b3f9800e6c18f6670a7ffdb3d5eab39bb942" + sha256: "837821e4619c167fd5a547b03bb2fc6be7e65b800ec75528848429705c31ceba" url: "https://pub.dev" source: hosted - version: "0.4.0" + version: "0.5.3" custom_lint_builder: dependency: transitive description: name: custom_lint_builder - sha256: "73d09c9848e9f6d5c3e0a1809eac841a8d7ea123d0849feefa040e1ad60b6d06" + sha256: "3537d50202568994a6f42b1f2953aed6292fc5ecf83e45237af73f64aff2be72" url: "https://pub.dev" source: hosted - version: "0.4.0" + version: "0.5.3" custom_lint_core: dependency: transitive description: name: custom_lint_core - sha256: "9170d9db2daf774aa2251a3bc98e4ba903c7702ab07aa438bc83bd3c9a0de57f" + sha256: "3bdebdd52a42b4d6e5be9cd833ad1ecfbbc23e1020ca537060e54085497aea9c" url: "https://pub.dev" source: hosted - version: "0.4.0" + version: "0.5.3" dart_style: dependency: transitive description: @@ -1261,6 +1261,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.6" + pointycastle: + dependency: "direct main" + description: + name: pointycastle + sha256: "7c1e5f0d23c9016c5bbd8b1473d0d3fb3fc851b876046039509e18e0c7485f2c" + url: "https://pub.dev" + source: hosted + version: "3.7.3" pool: dependency: transitive description: @@ -1813,10 +1821,10 @@ packages: dependency: transitive description: name: watcher - sha256: "6a7f46926b01ce81bfc339da6a7f20afbe7733eff9846f6d6a5466aa4c6667c0" + sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8" url: "https://pub.dev" source: hosted - version: "1.0.2" + version: "1.1.0" web: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 84b558bdad..692aee6ab6 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -25,6 +25,7 @@ dependencies: connectivity_plus: ^4.0.2 contained_tab_bar_view: ^0.8.0 + crypto: ^3.0.3 cupertino_icons: ^1.0.3 currency_picker: ^2.0.16 @@ -58,14 +59,15 @@ dependencies: http: ^1.1.0 image_cropper: ^5.0.0 - intl: ^0.18.0 image_picker: ^1.0.4 + intl: ^0.18.0 json_annotation: ^4.7.0 mockito: ^5.4.2 network_image_mock: ^2.1.1 path_provider: ^2.1.1 permission_handler: ^11.0.0 plugin_platform_interface: ^2.1.6 + pointycastle: ^3.7.3 provider: ^6.0.3 qr_code_scanner: ^1.0.0 qr_flutter: 4.0.0 diff --git a/talawa_lint/pubspec.lock b/talawa_lint/pubspec.lock index e8cac5a321..bb5ee986b1 100644 --- a/talawa_lint/pubspec.lock +++ b/talawa_lint/pubspec.lock @@ -5,18 +5,18 @@ packages: dependency: "direct main" description: name: _fe_analyzer_shared - sha256: "405666cd3cf0ee0a48d21ec67e65406aad2c726d9fa58840d3375e7bdcd32a07" + sha256: ae92f5d747aee634b87f89d9946000c2de774be1d6ac3e58268224348cd0101a url: "https://pub.dev" source: hosted - version: "60.0.0" + version: "61.0.0" analyzer: dependency: "direct main" description: name: analyzer - sha256: "1952250bd005bacb895a01bf1b4dc00e3ba1c526cf47dca54dfe24979c65f5b3" + sha256: ea3d8652bda62982addfd92fdc2d0214e5f82e43325104990d4f4c4a2a313562 url: "https://pub.dev" source: hosted - version: "5.12.0" + version: "5.13.0" analyzer_plugin: dependency: "direct main" description: @@ -29,10 +29,10 @@ packages: dependency: "direct main" description: name: args - sha256: c372bb384f273f0c2a8aaaa226dad84dc27c8519a691b888725dec59518ad53a + sha256: eef6c46b622e0494a36c5a12d10d77fb4e855501a91c1b9ef9339326e58f0596 url: "https://pub.dev" source: hosted - version: "2.4.1" + version: "2.4.2" async: dependency: transitive description: @@ -77,10 +77,10 @@ packages: dependency: transitive description: name: collection - sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687 + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a url: "https://pub.dev" source: hosted - version: "1.17.2" + version: "1.18.0" convert: dependency: transitive description: @@ -101,50 +101,50 @@ packages: dependency: "direct main" description: name: custom_lint - sha256: "3ce36c04d30c60cde295588c6185b3f9800e6c18f6670a7ffdb3d5eab39bb942" + sha256: "837821e4619c167fd5a547b03bb2fc6be7e65b800ec75528848429705c31ceba" url: "https://pub.dev" source: hosted - version: "0.4.0" + version: "0.5.3" custom_lint_builder: dependency: "direct main" description: name: custom_lint_builder - sha256: "73d09c9848e9f6d5c3e0a1809eac841a8d7ea123d0849feefa040e1ad60b6d06" + sha256: "3537d50202568994a6f42b1f2953aed6292fc5ecf83e45237af73f64aff2be72" url: "https://pub.dev" source: hosted - version: "0.4.0" + version: "0.5.3" custom_lint_core: dependency: transitive description: name: custom_lint_core - sha256: "9170d9db2daf774aa2251a3bc98e4ba903c7702ab07aa438bc83bd3c9a0de57f" + sha256: "3bdebdd52a42b4d6e5be9cd833ad1ecfbbc23e1020ca537060e54085497aea9c" url: "https://pub.dev" source: hosted - version: "0.4.0" + version: "0.5.3" dart_style: dependency: transitive description: name: dart_style - sha256: "5be16bf1707658e4c03078d4a9b90208ded217fb02c163e207d334082412f2fb" + sha256: "1efa911ca7086affd35f463ca2fc1799584fb6aa89883cf0af8e3664d6a02d55" url: "https://pub.dev" source: hosted - version: "2.2.5" + version: "2.3.2" file: dependency: transitive description: name: file - sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" + sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c" url: "https://pub.dev" source: hosted - version: "6.1.4" + version: "7.0.0" freezed_annotation: dependency: transitive description: name: freezed_annotation - sha256: aeac15850ef1b38ee368d4c53ba9a847e900bb2c53a4db3f6881cbb3cb684338 + sha256: c3fd9336eb55a38cc1bbd79ab17573113a8deccd0ecbbf926cca3c62803b5c2d url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.4.1" glob: dependency: transitive description: @@ -173,10 +173,10 @@ packages: dependency: "direct dev" description: name: lint - sha256: "03369e5af39b115ef89872b764ff1ac5e5858ab0227776d036d8fe43844221e8" + sha256: f4bd4dbaa39f4ae8836f2d1275f2f32bc68b3a8cce0a0735dd1f7a601f06682a url: "https://pub.dev" source: hosted - version: "2.0.20" + version: "2.1.2" logging: dependency: transitive description: @@ -197,10 +197,10 @@ packages: dependency: transitive description: name: meta - sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" + sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e url: "https://pub.dev" source: hosted - version: "1.9.1" + version: "1.10.0" package_config: dependency: transitive description: @@ -253,18 +253,18 @@ packages: dependency: transitive description: name: stack_trace - sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" url: "https://pub.dev" source: hosted - version: "1.11.0" + version: "1.11.1" stream_channel: dependency: transitive description: name: stream_channel - sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" stream_transform: dependency: transitive description: @@ -293,10 +293,10 @@ packages: dependency: transitive description: name: test_api - sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8" + sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" url: "https://pub.dev" source: hosted - version: "0.6.0" + version: "0.6.1" typed_data: dependency: transitive description: @@ -317,18 +317,18 @@ packages: dependency: transitive description: name: vm_service - sha256: f3743ca475e0c9ef71df4ba15eb2d7684eecd5c8ba20a462462e4e8b561b2e11 + sha256: c538be99af830f478718b51630ec1b6bee5e74e52c8a802d328d9e71d35d2583 url: "https://pub.dev" source: hosted - version: "11.6.0" + version: "11.10.0" watcher: - dependency: transitive + dependency: "direct main" description: name: watcher - sha256: "6a7f46926b01ce81bfc339da6a7f20afbe7733eff9846f6d6a5466aa4c6667c0" + sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8" url: "https://pub.dev" source: hosted - version: "1.0.2" + version: "1.1.0" yaml: dependency: transitive description: @@ -338,4 +338,4 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=2.19.0 <3.0.0" + dart: ">=3.0.0 <3.13.0" diff --git a/talawa_lint/pubspec.yaml b/talawa_lint/pubspec.yaml index 986c941a2e..7fe37f8867 100644 --- a/talawa_lint/pubspec.yaml +++ b/talawa_lint/pubspec.yaml @@ -1,18 +1,19 @@ # pubspec.yaml name: talawa_lint environment: - sdk: ">=2.16.0 <3.0.0" + sdk: ">=2.12.0 <3.13.0" dev_dependencies: lint: ^2.0.1 dependencies: # we will use analyzer for inspecting Dart files - _fe_analyzer_shared: ^60.0.0 + _fe_analyzer_shared: ^61.0.0 analyzer: analyzer_plugin: args: custom_lint: # custom_lint_builder will give us tools for writing lints - custom_lint_builder: ^0.4.0 + custom_lint_builder: ^0.5.3 + watcher: ^1.1.0