{"id":16099952,"url":"https://github.com/fooock/shodand","last_synced_at":"2025-03-18T07:31:12.034Z","repository":{"id":128383053,"uuid":"86372351","full_name":"fooock/shodand","owner":"fooock","description":"Console and Android native Shodan application. Developed using MVP architecture, RxJava, Butterknife, zxing and more! Looking for collaborators, join now! :metal:","archived":false,"fork":false,"pushed_at":"2017-08-03T21:38:17.000Z","size":282,"stargazers_count":5,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-02-28T08:05:25.244Z","etag":null,"topics":["android","android-application","butterknife","mvp","mvp-android","mvp-architecture","retrofit2","rxjava-android","rxjava2","shodan","shodan-api"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fooock.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-03-27T18:51:36.000Z","updated_at":"2021-10-18T00:56:05.000Z","dependencies_parsed_at":null,"dependency_job_id":"b9216c8d-2218-47a8-885e-346ccca7b989","html_url":"https://github.com/fooock/shodand","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fooock%2Fshodand","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fooock%2Fshodand/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fooock%2Fshodand/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fooock%2Fshodand/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fooock","download_url":"https://codeload.github.com/fooock/shodand/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243910780,"owners_count":20367544,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","android-application","butterknife","mvp","mvp-android","mvp-architecture","retrofit2","rxjava-android","rxjava2","shodan","shodan-api"],"created_at":"2024-10-09T18:44:36.728Z","updated_at":"2025-03-18T07:31:12.029Z","avatar_url":"https://github.com/fooock.png","language":"Java","readme":"# Shodand\nShodand is a console and native Android application developed to consume Shodan data. \nIt is developed following the principles of MVP architecture. It uses the [jShodan library](https://github.com/fooock/jshodan) (created by me! :smile:) to make the network requests.You can find a complete list of the app dependencies divided by modules in the following file, located at the repository root level:\n```bash\nbuildsystem/libraries.gradle\n```\n**Important**: Note that this application is under heavy development, \nfeel free to contribute! :heart: \n \n### Prerequisites\nThis application works in Android devices ```15+```\n### Permissions\nThis app uses the following **permissions**:\n```xml\n\u003cuses-permission android:name=\"android.permission.INTERNET\" /\u003e\n\u003cuses-permission android:name=\"android.permission.CAMERA\" /\u003e\n```\n### Uses feature\nThe application uses the camera, but **is not required**. This is only required if you want to scan your Shodan API key from the QR code provided in your Shodan account. If you don't want to grant this permission you can copy paste your API key.\n```xml\n\u003cuses-feature\n        android:name=\"android.hardware.camera\"\n        android:required=\"false\" /\u003e\n```\n\n## Structure\nThe application is divided in three modules:\n* **app**: Contains all views and Android classes. This is the only Android module.\n* **domain**: This module contains all business logic. This is a Java module\n* **data**: Contains all classes and interfaces to transform and retrieve data from different datasources. This is a Java module.\n* **console**: This module contains the Java console application to query Shodan. It uses the domain and data modules.\n\nAll modules can be tested separately. Also if you want to create a Java console application, you can reuse the **data** and **domain** modules!\n\n## Views\nAll views need to implement the [BaseView](https://github.com/fooock/shodand/blob/master/app/src/main/java/com/fooock/app/shodand/view/BaseView.java) interface.\n```java\npublic interface FakeView extends BaseView {\n    ...\n}\n```\nYou can use it in ```Fragment``` or ```Activity```\n```java\npublic class FakeFragment implements FakeView {\n    ...\n}\n```\n## Presenters\nAll presenters must extends the [BasePresenter](https://github.com/fooock/shodand/blob/master/app/src/main/java/com/fooock/app/shodand/presenter/BasePresenter.java) class and pass to it the view type. Imagine you have a view ```FakeView``` that extends the ```BaseView``` interface:\n```java\npublic class FakePresenter extends BasePresenter\u003cFakeView\u003e {\n    ....\n}\n```\nYou need to attach the presenter to the view. \n```java\npublic class FakeFragment implements FakeView {\n    private FakePresenter presenter;\n    \n    @Override\n    public View onCreateView(...) {\n        ....\n        presenter.attachView(this);\n        ...\n        return view;\n    }\n    \n    @Override\n    public void onDestroy() {\n        presenter.detachView();\n        super.onDestroy();\n    }\n}\n```\n\n## Interactors\nInteractors are use cases. All interactors must extends the ```BaseInteractor``` class. All interactors receive:\n* The type of the result\n* The interactor params \n\nImagine you want to create an use case that returns a list of ```String```s and no need params:\n```java\npublic class FakeInteractor extends BaseInteractor\u003cList\u003cString\u003e, Void\u003e {\n\n    @Override\n    protected Observable\u003cList\u003cString\u003e\u003e result(Void params) {\n        return ...\n    }\n}\n\n```\nAll logic is implemented in the ```result(...)``` method.\n\n## Contributing\nOuuh yeah! Feel free to create issues and send PR's :heart:\n\n## License\n```\nCopyright 2017 newhouse (nhitbh at gmail dot com)\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n```\n\n[//]: # (These are reference links used in the body of this note and get stripped out when the markdown processor does its job. There is no need to format nicely because it shouldn't be seen. Thanks SO - http://stackoverflow.com/questions/4823468/store-comments-in-markdown-syntax)\n\n\n   [dill]: \u003chttps://github.com/joemccann/dillinger\u003e\n   [git-repo-url]: \u003chttps://github.com/joemccann/dillinger.git\u003e\n   [john gruber]: \u003chttp://daringfireball.net\u003e\n   [df1]: \u003chttp://daringfireball.net/projects/markdown/\u003e\n   [markdown-it]: \u003chttps://github.com/markdown-it/markdown-it\u003e\n   [Ace Editor]: \u003chttp://ace.ajax.org\u003e\n   [node.js]: \u003chttp://nodejs.org\u003e\n   [Twitter Bootstrap]: \u003chttp://twitter.github.com/bootstrap/\u003e\n   [jQuery]: \u003chttp://jquery.com\u003e\n   [@tjholowaychuk]: \u003chttp://twitter.com/tjholowaychuk\u003e\n   [express]: \u003chttp://expressjs.com\u003e\n   [AngularJS]: \u003chttp://angularjs.org\u003e\n   [Gulp]: \u003chttp://gulpjs.com\u003e\n\n   [PlDb]: \u003chttps://github.com/joemccann/dillinger/tree/master/plugins/dropbox/README.md\u003e\n   [PlGh]: \u003chttps://github.com/joemccann/dillinger/tree/master/plugins/github/README.md\u003e\n   [PlGd]: \u003chttps://github.com/joemccann/dillinger/tree/master/plugins/googledrive/README.md\u003e\n   [PlOd]: \u003chttps://github.com/joemccann/dillinger/tree/master/plugins/onedrive/README.md\u003e\n   [PlMe]: \u003chttps://github.com/joemccann/dillinger/tree/master/plugins/medium/README.md\u003e\n   [PlGa]: \u003chttps://github.com/RahulHP/dillinger/blob/master/plugins/googleanalytics/README.md\u003e\n","funding_links":[],"categories":["Mobile Apps and SDK"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffooock%2Fshodand","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffooock%2Fshodand","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffooock%2Fshodand/lists"}