comrad update!

master
marxzuckerburg 4 years ago
parent 6304d6051e
commit 78bd5f727a

@ -1,6 +1,6 @@
ANTI-CAPITALIST SOFTWARE LICENSE (v 1.4)
Copyright © 2020 Comrads
Copyright © 2020 Comrad Collective
This is anti-capitalist software, released for free use by individuals and organizations that do not operate by capitalist principles.

@ -67,19 +67,19 @@ We present a simplified set of social media features drawn from everything that'
## How is this different from ...?
See ["Comparison of alternative social networks" on the wiki](https://github.com/Comrad/Comrad/wiki/Comparison-of-alternative-social-networks) for an attempt at a systematic comparison. (And please help edit, if you can! The data there is a little incomplete and probably a little inaccurate.) But here are some imagined differences:
See ["Comparison of alternative social networks" on the wiki](https://github.com/ComradOrg/Comrad/wiki/Comparison-of-alternative-social-networks) for an attempt at a systematic comparison. (And please help edit, if you can! The data there is a little incomplete and probably a little inaccurate.) But here are some imagined differences:
* **It's not (fully) decentralized.** Who's afraid of a little central planning? In contrast to [Secure Scuttlebutt](https://scuttlebutt.nz/) and [Cabal Chat](https://cabal.chat/), which are 100% decentralized, subsisting only through peer-to-peer connections, Comrad sticks with the old, client/server model. Why?
* **It *is* anonymous.** Because P2P networks almost always expose your IP address: they privilege decentralization over anonymity -- and, potentially, safety. By contrast, lying hidden within the deep web of Tor, accessible only from this application and its built-in Tor client, Comrad will never reveal who is accessing it and its encrypted information. This is important for comrads organizing protests against the surveillance state, and to protect our social media traffic from being harvested and monetized by surveillance capitalism.
* **It *is* anonymous.** Because P2P networks almost always expose your IP address: they privilege decentralization over anonymity -- and, potentially, safety. By contrast, lying hidden within the deep web of Tor, accessible only from this application and its built-in Tor client, Comrad will never reveal who is accessing it and its encrypted information. This is important for comrades organizing protests against the surveillance state, and to protect our social media traffic from being harvested and monetized by surveillance capitalism.
* **It's 100% end-to-end encrypted.** Unlike [Mastodon](https://joinmastodon.org/) or [Diaspora](https://diasporafoundation.org/), direct messages between users and within groups remain encrypted 1:1 end-to-end among users. Posts to the public are encrypted to @comrads, a special account which automatically re-encrypts its messages back to any key-registered requester of them.
* **It's 100% end-to-end encrypted.** Unlike [Mastodon](https://joinmastodon.org/) or [Diaspora](https://diasporafoundation.org/), direct messages between users and within groups remain encrypted 1:1 end-to-end among users. Posts to the public are encrypted to @Comrades, a special account which automatically re-encrypts its messages back to any key-registered requester of them.
* **It verifies identities.** Comrad's server, "The Operator", keeps a permanent record of one thing only: every comrad's name and public key, and requires that new comrads choose a unique name. Whenever you send or receive mail, the Operator will make sure that the name and public key on the letter matches what it has on file, verifying the identity of both parties.
* **It verifies identities.** Comrad's server, "The Operator", keeps a permanent record of one thing only: every comrad's name and public key, and requires that new comrades choose a unique name. Whenever you send or receive mail, the Operator will make sure that the name and public key on the letter matches what it has on file, verifying the identity of both parties.
* **It's (semi-)ephemeral.** Data, like all natural things, should not last forever. Direct messages auto-delete from the server as soon as they are downloaded. Group messages are sent as direct messages through the "web of trust" of the group membership network. Posts to the world auto-delete in however many days you specify. By contrast, data on both [SSB](https://scuttlebutt.nz/) and [Matrix](https://matrix.org/) is undeletable.
* **It's easy to use.** No invitation or server is needed on startup, unlike [SSB](https://scuttlebutt.nz/), [Mastodon](https://joinmastodon.org/), [Diaspora](https://diasporafoundation.org/), or [Briar](https://briarproject.org/). It's basically a Twitter clone, but one where you can also post to a universal feed shared by the entire world (@comrads), so that you can make yourself known, participate in general discussions, find new contacts, and organize new groups.
* **It's easy to use.** No invitation or server is needed on startup, unlike [SSB](https://scuttlebutt.nz/), [Mastodon](https://joinmastodon.org/), [Diaspora](https://diasporafoundation.org/), or [Briar](https://briarproject.org/). It's basically a Twitter clone, but one where you can also post to a universal feed shared by the entire world (@Comrades), so that you can make yourself known, participate in general discussions, find new contacts, and organize new groups.
@ -122,7 +122,7 @@ See ["Comparison of alternative social networks" on the wiki](https://github.com
#### ...on Mac OSX
Download and run [this installer](https://github.com/Comrad/Comrad/raw/master/script/InstallComrad.app.zip).
Download and run [this installer](https://github.com/ComradOrg/Comrad/raw/master/script/InstallComrad.app.zip).
#### ...on Linux or Windows
@ -132,7 +132,7 @@ Open a terminal in Linux, or a [Cygwin shell](https://cygwin.com/install.html) i
bash <(curl -s https://comrad.app/run)
```
[That](https://comrad.app/run)'s a shortcut to [this auto-installer script](https://github.com/Comrad/Comrad/blob/master/script/install). It installs Comrad in a virtual Python environment in the folder "comrad" in your home directory.
[That](https://comrad.app/run)'s a shortcut to [this auto-installer script](https://github.com/ComradOrg/Comrad/blob/master/script/install). It installs Comrad in a virtual Python environment in the folder "comrad" in your home directory.
### Run
@ -231,7 +231,7 @@ Crypto-related code is primarily in:
* [comrad/backend/keymaker.py](comrad/backend/keymaker.py)
* [comrad/backend/comrads.py](comrad/backend/comrads.py)
* [comrad/backend/comrades.py](comrad/backend/comrades.py)
* [comrad/backend/phonelines.py](comrad/backend/phonelines.py)

@ -726,7 +726,7 @@ class MainApp(MDApp, Logger):
self.msg_dialog.card = postcard = PostCardPopup({
'author':comrad_name,
'author_prefix':'@',
'author_prefix':'Comrad @',
'to_name':'me',
'content':msg,
'timestamp':time.time(),

@ -276,7 +276,7 @@ class ProfileScreen(ProtectedScreen):
## Followers
self.follower_layout = FollowerLayout()
# self.author_followers = AuthorFollowers(label='13 followers',icon='account-arrow-left')
self.author_following = AuthorFollowing(label='13 comrads',icon='account-multiple')
self.author_following = AuthorFollowing(label='13 comrades',icon='account-multiple')
## add to layout

@ -15,7 +15,7 @@ from .callers import *
from .phonelines import *
from .messages import *
from .comrads import *
from .comrades import *
## define default entities
OPERATOR = None

@ -154,7 +154,7 @@ class ComradX(Caller):
# do_pause()
# clear_screen()
logfunc(f'Excellent. But to communicate with comrads securely, you must first cut your public & private encryption keys.',pause=True,clear=True)
logfunc(f'Excellent. But to communicate with comrades securely, you must first cut your public & private encryption keys.',pause=True,clear=True)
# do_pause()
## 2) Make pub public/private keys
keypair = ComradAsymmetricKey()

@ -476,7 +476,7 @@ class Keymaker(Logger):
keys_saved_d={}
for keyname in keys_to_save:
if not '_' in keyname and keyname!='pubkey':
self.log('there is no private property in a socialist network! all keys must be split between comrads',keyname)
self.log('there is no private property in a socialist network! all keys must be split between comrades',keyname)
if keyname in keychain:
# uri = uri_id
uri = uri_id if keyname!='pubkey' else name

@ -113,12 +113,12 @@ on: {timestr}
@property
def from_whom(self):
# from comrad.backend.comrads import Comrad
# from comrad.backend.comrades import Comrad
return Comrad(self.from_name, pubkey=self.from_pubkey)
@property
def to_whom(self):
# from comrad.backend.comrads import Comrad
# from comrad.backend.comrades import Comrad
return Comrad(self.to_name, pubkey=self.to_pubkey)

@ -18,7 +18,7 @@ def Comrad(name=None,pubkey=None,*x,**y):
from comrad.backend.the_operator import TheOperator
from comrad.backend.the_telephone import TheTelephone
from comrad.backend.comrads import ComradX
from comrad.backend.comrades import ComradX
global PHONEBOOK
# already have?
@ -224,7 +224,7 @@ class Operator(Keymaker):
# time to turn around and encrypt
# @unsure?``
# from comrad.backend.comrads import Comrad
# from comrad.backend.comrades import Comrad
# if self != self.phone and type(self)!=Comrad:
# # if client, let the request rest
# return msg_obj

@ -45,7 +45,7 @@ class TheTelephone(Operator):
# assert that people can speak only with operator in their first enclosed message!
# if so, dropping the "to"
if msg_d['to'] != self.op.pubkey.data:
raise ComradException('Comrads must communicate securely with Operator first.')
raise ComradException('Comrades must communicate securely with Operator first.')
# opp = Operator(pubkey=msg_d['to'])
# self.log('got opp:',opp.pubkey.data == msg_d['to'], self.op.pubkey.data == msg_d['to'])

@ -26,7 +26,7 @@ CLI_HEIGHT = get_terminal_size().lines-1
class CLI(Logger):
ROUTES = {
'help':'seek help',
'register':'join the comrads',
'register':'join the comrades',
'login':'log back in',
'meet':'meet a comrad',
'who':'show contacts or info',

@ -49,7 +49,7 @@ BSEP3=b'##########'
OPERATOR_NAME = 'Operator'
TELEPHONE_NAME = 'Telephone'
WORLD_NAME = 'comrads'
WORLD_NAME = 'Comrades'
PATH_REPO = os.path.abspath(
os.path.join(
os.path.dirname(__file__),

@ -30,7 +30,7 @@
## Create encryption keys
```
@Keymaker: Excellent. But to communicate with comrads
@Keymaker: Excellent. But to communicate with comrades
securely, you must first cut your public &
private encryption keys.
@ -134,14 +134,14 @@ __________________ __ __ ____ _______________________________
## Post to all @comrads
## Post to all @Comrades
Posts are end-to-encrypted between the @Operator (server) and you: by request, messages to @comrads are decrypted by that account on the server, and then re-encrypted on the fly back to the requester.
Posts are end-to-encrypted between the @Operator (server) and you: by request, messages to @Comrades are decrypted by that account on the server, and then re-encrypted on the fly back to the requester.
```
############################################################
from: @marxxx
to: @comrads
to: @Comrades
############################################################
Nature builds no machines, ... These are products of human

@ -40,7 +40,7 @@
<h3 id="unmonetizable">Unmonetizable</h3>
<p>What's untraceable is also unmonetizable: your data can't be harvested by technology companies and used for advertising algorithms. You're protected from both surveillance capitalism and the surveillance state.</p>
<h3 id="democratized">Democratized</h3>
<p>Group accounts or 'collectives', like <span class="citation">@portland</span> or <span class="citation">@socialists</span>, grow as existing members 'vouch for' new ones, forming webs of trust. Other comrads can see how many times a given person has been vouched for, both within a group and overall, but not who has vouched for them. In order to join a group, at least one member must vouch for you; this minimum (or 'quorum') may grow as the group grows.</p>
<p>Group accounts or 'collectives', like <span class="citation">@portland</span> or <span class="citation">@socialists</span>, grow as existing members 'vouch for' new ones, forming webs of trust. Other comrades can see how many times a given person has been vouched for, both within a group and overall, but not who has vouched for them. In order to join a group, at least one member must vouch for you; this minimum (or 'quorum') may grow as the group grows.</p>
<h3 id="semi-decentralized">(Semi-)decentralized</h3>
<p>Data is deleted as soon as possible from Comrad. Comrad's &quot;Operator&quot; simply sorts and holds the mail temporarily: as soon as users log in to download their mail, the messages are deleted from the server and network forever.</p>
<h3 id="anti-profit">Anti-profit</h3>
@ -237,7 +237,7 @@
<p>Plain old object-oriented code in Python. The root entity is a &quot;Keymaker&quot;: anyone from <span class="citation">@Telephone</span>, to <span class="citation">@Operator</span>, to users, to groups, who has a public/private key pair. The database uses a simple file-based key-value store, written in Python (<a href="https://github.com/mbr/simplekv">simplekv</a>). Code is in <a href="comrad/backend" class="uri">comrad/backend</a>.</p>
<h4 id="cryptography">Cryptography</h4>
<p>We are using <a href="https://github.com/cossacklabs/themis">Themis</a>, a high-level cross-platform cryptography library, for all cryptographic functions, rather than handling any primitives ourselves.</p>
<p>Code is primarily in: * <a href="comrad/backend/keymaker.py" class="uri">comrad/backend/keymaker.py</a> * <a href="comrad/backend/comrads.py" class="uri">comrad/backend/comrads.py</a> * <a href="comrad/backend/phonelines.py" class="uri">comrad/backend/phonelines.py</a></p>
<p>Code is primarily in: * <a href="comrad/backend/keymaker.py" class="uri">comrad/backend/keymaker.py</a> * <a href="comrad/backend/comrades.py" class="uri">comrad/backend/comrades.py</a> * <a href="comrad/backend/phonelines.py" class="uri">comrad/backend/phonelines.py</a></p>
</div>
</body>

Loading…
Cancel
Save