Beispiel #1
0
 def do_profile(self, name: str):
     if self.client is None:
         self.info('login first')
         return
     facebook = g_messenger.facebook
     user = facebook.current_user
     profile = None
     if name is None:
         identifier = user.identifier
     elif name.startswith('{') and name.endswith('}'):
         identifier = user.identifier
         profile = json_decode(data=utf8_encode(string=name))
     else:
         identifier = ID.parse(identifier=name)
         if identifier is None:
             self.info('I don\'t understand.')
             return
     if profile:
         private_key = facebook.private_key_for_signature(identifier=identifier)
         assert private_key is not None, 'failed to get private key for client: %s' % self.client
         # create new profile and set all properties
         tai = Document.create(doc_type=Document.VISA, identifier=identifier)
         for key in profile:
             tai.set_property(key, profile.get(key))
         tai.sign(private_key=private_key)
         cmd = DocumentCommand.response(identifier=identifier, document=tai)
     else:
         cmd = DocumentCommand.query(identifier=identifier)
     self.client.send_command(cmd=cmd)
Beispiel #2
0
 def generate_meta(self, key: SignKey, seed: Optional[str] = None) -> Meta:
     if seed is None or len(seed) == 0:
         fingerprint = None
     else:
         fingerprint = key.sign(data=utf8_encode(string=seed))
     assert isinstance(key, PrivateKey), 'private key error: %s' % key
     return self.create_meta(key=key.public_key,
                             seed=seed,
                             fingerprint=fingerprint)
Beispiel #3
0
 def __post(self, text: str) -> dict:
     request = self.__request(text=text)
     headers = {'content-type': 'application/json'}
     http_post = urllib.request.Request(self.api_url,
                                        data=utf8_encode(string=request),
                                        headers=headers)
     response = urllib.request.urlopen(http_post)
     data: bytes = response.read()
     if data is not None and len(data) > 0:
         # assert data[0] == ord('{') and data[-1] == ord('}'), 'response error: %s' % data
         return json.loads(data)
Beispiel #4
0
 def __post(self, text: str) -> str:
     request = self.__request(text=text)
     headers = {
         'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
         'X-Auth': self.__auth(),
     }
     http_post = urllib.request.Request(self.api_url,
                                        data=utf8_encode(string=request),
                                        headers=headers)
     response = urllib.request.urlopen(http_post)
     data: bytes = response.read()
     if data is not None:
         return data.decode('utf-8')
Beispiel #5
0
 def __load_messages(self, path: str) -> List[ReliableMessage]:
     text = self.read_text(path=path)
     lines = text.splitlines()
     self.debug('read %d line(s) from %s' % (len(lines), path))
     messages = []
     for line in lines:
         msg = line.strip()
         if len(msg) == 0:
             self.warning('skip empty line')
             continue
         try:
             msg = json_decode(data=utf8_encode(string=msg))
             msg = ReliableMessage.parse(msg=msg)
             messages.append(msg)
         except Exception as error:
             self.error('message package error %s, %s' % (error, line))
     return messages
Beispiel #6
0
def sha_hex(string: str) -> str:
    return hex_encode(data=sha1(data=utf8_encode(string=string)))
Beispiel #7
0
    def test_register(self):
        print('\n---------------- %s' % self)

        #
        #  prepare register parameters
        #
        cmd = 3
        if cmd == 1:
            # generate SP
            seed = 'gsp'
            network = NetworkType.PROVIDER
            print('*** registering SP (%s)' % seed)
        elif cmd == 2:
            # generate Station
            seed = 'gsp-s002'
            network = NetworkType.STATION
            print('*** registering station (%s)' % seed)
        elif cmd == 3:
            # generate robot
            seed = 'chatroom-admin'
            network = NetworkType.ROBOT
            print('*** registering robot (%s)' % seed)
        else:
            # generate User
            seed = 'moky'
            network = NetworkType.MAIN
            print('*** registering account (%s)' % seed)

        # seed
        data = utf8_encode(string=seed)

        for index in range(0, 10000):

            # generate private key
            sk = PrivateKey.parse(key={'algorithm': 'RSA'})
            ct = sk.sign(data)
            # generate address
            address = BTCAddress.generate(fingerprint=ct, network=network)

            print('[% 5d] %s@%s' % (index, seed, address))

            meta = {
                'version': MetaType.DEFAULT.value,
                'seed': seed,
                'key': sk.public_key.dictionary,
                'fingerprint': base64_encode(ct),
            }
            meta = Meta.parse(meta=meta)
            id1 = meta.generate_identifier(network=network)
            print('[% 5d] %s' % (index, id1))

            choice = ''
            while choice not in ['y', 'n']:
                choice = input('Save it (y/n)? ')

            if choice == 'y':
                print('---- Mission Accomplished! ----')
                print('**** ID:', id1)
                print('**** meta:\n', meta)
                print('**** private key:\n', sk)

                g_facebook.save_meta(identifier=id1, meta=meta)
                g_facebook.save_private_key(identifier=id1, key=sk)
                break