Initial commit
Signed-off-by: Julien Riou <julien@riou.xyz>
This commit is contained in:
parent
0ae98bb072
commit
2a54cafff7
4 changed files with 189 additions and 1 deletions
28
.pre-commit-config.yaml
Normal file
28
.pre-commit-config.yaml
Normal file
|
@ -0,0 +1,28 @@
|
|||
---
|
||||
repos:
|
||||
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||
rev: v3.4.0
|
||||
hooks:
|
||||
- id: check-executables-have-shebangs
|
||||
- id: check-merge-conflict
|
||||
- id: double-quote-string-fixer
|
||||
- id: end-of-file-fixer
|
||||
- id: fix-encoding-pragma
|
||||
args: ['--remove']
|
||||
- id: requirements-txt-fixer
|
||||
- id: trailing-whitespace
|
||||
- repo: https://gitlab.com/pycqa/flake8
|
||||
rev: 3.8.4
|
||||
hooks:
|
||||
- id: flake8
|
||||
args: ['--max-line-length=120']
|
||||
- repo: https://github.com/FalconSocial/pre-commit-python-sorter
|
||||
rev: master
|
||||
hooks:
|
||||
- id: python-import-sorter
|
||||
args: ['--silent-overwrite']
|
||||
- repo: https://github.com/chewse/pre-commit-mirrors-pydocstyle
|
||||
rev: v2.1.1
|
||||
hooks:
|
||||
- id: pydocstyle
|
||||
args: ['--config=.pydocstyle', '--match="(?!test_).*\.py"']
|
77
README.md
77
README.md
|
@ -1,2 +1,77 @@
|
|||
# twitter-login
|
||||
Grant a Twitter application to use your Twitter account on your behalf
|
||||
|
||||
Grant a Twitter application to use your Twitter account on your behalf.
|
||||
|
||||
## Description
|
||||
|
||||
If you have a `CONSUMER_KEY` and a `CONSUMER_SECRET`, you would like to have an `ACCESS_TOKEN` and an
|
||||
`ACCESS_TOKEN_SECRET`, you are at the right place!
|
||||
|
||||
## Create consumer tokens
|
||||
|
||||
Go to the [developper portal](https://developer.twitter.com/en/portal/dashboard) to create a Twitter application. Go to
|
||||
"*Keys and tokens*", then "*Consumer keys*" and "*API key & secret*". Those keys are `CONSUMER_KEY` and
|
||||
`CONSUMER_SECRET` settings.
|
||||
|
||||
## Create access tokens
|
||||
|
||||
Clone this repository:
|
||||
|
||||
```
|
||||
git clone https://github.com/jouir/twitter-login.git
|
||||
```
|
||||
|
||||
Setup the Python virtual environment:
|
||||
|
||||
```
|
||||
sudo apt install python3-virtualenv
|
||||
virtualenv venv
|
||||
source venv/bin/activate
|
||||
```
|
||||
|
||||
Install requirements:
|
||||
|
||||
```
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
Read consumer keys:
|
||||
|
||||
```
|
||||
read -s CONSUMER_KEY
|
||||
read -s CONSUMER_SECRET
|
||||
```
|
||||
|
||||
Execute the script:
|
||||
|
||||
```
|
||||
python3 main.py --consumer-key ${CONSUMER_KEY} --consumer-secret ${CONSUMER_SECRET}
|
||||
```
|
||||
|
||||
Open the URL to click on "Authorize app". Go back to the console and write the generated code.
|
||||
|
||||
```
|
||||
Please go to https://api.twitter.com/oauth/authorize?oauth_token=xxxxx
|
||||
Code: 0000000
|
||||
Generated tokens:
|
||||
ACCESS_TOKEN = *****
|
||||
ACCESS_TOKEN_SECRET = *****
|
||||
```
|
||||
|
||||
Done.
|
||||
|
||||
## How to contribute
|
||||
|
||||
Please check issues to ensure the feature or bug you are facing is not already known.
|
||||
|
||||
Pull requests are highly appreciated.
|
||||
|
||||
Ensure to lint the code before submitting a pull-request:
|
||||
|
||||
```
|
||||
docker run -it -v $(pwd):/mnt/ --rm debian:10 bash
|
||||
apt-get update && apt-get upgrade -y && apt-get install -y python3-pip git
|
||||
pip3 install pre-commit
|
||||
cd /mnt
|
||||
pre-commit run --all-files
|
||||
```
|
||||
|
|
58
main.py
Normal file
58
main.py
Normal file
|
@ -0,0 +1,58 @@
|
|||
#!/usr/bin/env python3
|
||||
from urllib.parse import urlparse
|
||||
|
||||
import argparse
|
||||
import tweepy
|
||||
import logging
|
||||
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def main():
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('-d', '--debug', dest='loglevel', action='store_const', const=logging.DEBUG,
|
||||
default=logging.INFO, help='print more output')
|
||||
parser.add_argument('--consumer-key', help='twitter consumer key', required=True)
|
||||
parser.add_argument('--consumer-secret', help='twitter consumer secret', required=True)
|
||||
args = parser.parse_args()
|
||||
|
||||
logging.basicConfig(format='%(message)s', level=args.loglevel)
|
||||
|
||||
auth = tweepy.OAuthHandler(args.consumer_key, args.consumer_secret)
|
||||
|
||||
try:
|
||||
redirect_url = auth.get_authorization_url()
|
||||
logger.info(f'Please go to {redirect_url}')
|
||||
except tweepy.TweepError as err:
|
||||
logger.error('Cannot get request token')
|
||||
logger.debug(str(err))
|
||||
return
|
||||
|
||||
token = urlparse(redirect_url).query.split('=')[1]
|
||||
|
||||
try:
|
||||
verifier = input('Code: ')
|
||||
except KeyboardInterrupt:
|
||||
return
|
||||
|
||||
auth.request_token = {'oauth_token': token, 'oauth_token_secret': verifier}
|
||||
|
||||
try:
|
||||
auth.get_access_token(verifier)
|
||||
except tweepy.TweepError as err:
|
||||
logger.error('Cannot get access token')
|
||||
logger.debug(str(err))
|
||||
return
|
||||
|
||||
access_token = auth.access_token
|
||||
access_token_secret = auth.access_token_secret
|
||||
|
||||
logger.info('Generated tokens:')
|
||||
logger.info(f'ACCESS_TOKEN = {access_token}')
|
||||
logger.info(f'ACCESS_TOKEN_SECRET = {access_token_secret}')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
27
requirements.txt
Normal file
27
requirements.txt
Normal file
|
@ -0,0 +1,27 @@
|
|||
appdirs==1.4.3
|
||||
CacheControl==0.12.6
|
||||
certifi==2019.11.28
|
||||
chardet==3.0.4
|
||||
colorama==0.4.3
|
||||
contextlib2==0.6.0
|
||||
distlib==0.3.0
|
||||
distro==1.4.0
|
||||
html5lib==1.0.1
|
||||
idna==2.8
|
||||
ipaddr==2.2.0
|
||||
lockfile==0.12.2
|
||||
msgpack==0.6.2
|
||||
oauthlib==3.1.0
|
||||
packaging==20.3
|
||||
pep517==0.8.2
|
||||
progress==1.5
|
||||
pyparsing==2.4.6
|
||||
PySocks==1.7.1
|
||||
pytoml==0.1.21
|
||||
requests==2.22.0
|
||||
requests-oauthlib==1.3.0
|
||||
retrying==1.3.3
|
||||
six==1.14.0
|
||||
tweepy==3.10.0
|
||||
urllib3==1.25.8
|
||||
webencodings==0.5.1
|
Loading…
Reference in a new issue