diff --git a/LICENSE b/LICENSE index e62ac62..f942777 100644 --- a/LICENSE +++ b/LICENSE @@ -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. diff --git a/README.md b/README.md index 6d07ebe..d9a6166 100644 --- a/README.md +++ b/README.md @@ -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) diff --git a/comrad/app/main.py b/comrad/app/main.py index a17b0ed..f42661f 100644 --- a/comrad/app/main.py +++ b/comrad/app/main.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(), diff --git a/comrad/app/screens/profile/profile.py b/comrad/app/screens/profile/profile.py index e7ec48c..53a3918 100644 --- a/comrad/app/screens/profile/profile.py +++ b/comrad/app/screens/profile/profile.py @@ -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 diff --git a/comrad/backend/__init__.py b/comrad/backend/__init__.py index 596837f..07276b1 100644 --- a/comrad/backend/__init__.py +++ b/comrad/backend/__init__.py @@ -15,7 +15,7 @@ from .callers import * from .phonelines import * from .messages import * -from .comrads import * +from .comrades import * ## define default entities OPERATOR = None diff --git a/comrad/backend/comrads.py b/comrad/backend/comrades.py similarity index 99% rename from comrad/backend/comrads.py rename to comrad/backend/comrades.py index b7c8947..59f80e4 100644 --- a/comrad/backend/comrads.py +++ b/comrad/backend/comrades.py @@ -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() diff --git a/comrad/backend/keymaker.py b/comrad/backend/keymaker.py index b009809..7d4f3c2 100644 --- a/comrad/backend/keymaker.py +++ b/comrad/backend/keymaker.py @@ -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 diff --git a/comrad/backend/messages.py b/comrad/backend/messages.py index f60a6a7..a91902d 100644 --- a/comrad/backend/messages.py +++ b/comrad/backend/messages.py @@ -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) diff --git a/comrad/backend/operators.py b/comrad/backend/operators.py index 81db721..de88545 100644 --- a/comrad/backend/operators.py +++ b/comrad/backend/operators.py @@ -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 diff --git a/comrad/backend/the_telephone.py b/comrad/backend/the_telephone.py index 3cbd076..835e14e 100644 --- a/comrad/backend/the_telephone.py +++ b/comrad/backend/the_telephone.py @@ -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']) diff --git a/comrad/cli/cli.py b/comrad/cli/cli.py index 6da9f27..83a854a 100644 --- a/comrad/cli/cli.py +++ b/comrad/cli/cli.py @@ -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', diff --git a/comrad/constants.py b/comrad/constants.py index 16a17a4..b5ee99f 100644 --- a/comrad/constants.py +++ b/comrad/constants.py @@ -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__), diff --git a/docs/www/README-static.md b/docs/www/README-static.md index 5b16bfb..4245f79 100644 --- a/docs/www/README-static.md +++ b/docs/www/README-static.md @@ -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 diff --git a/docs/www/index.html b/docs/www/index.html index 35eda6a..4938614 100644 --- a/docs/www/index.html +++ b/docs/www/index.html @@ -40,7 +40,7 @@

Unmonetizable

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.

Democratized

-

Group accounts or 'collectives', like @portland or @socialists, 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.

+

Group accounts or 'collectives', like @portland or @socialists, 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.

(Semi-)decentralized

Data is deleted as soon as possible from Comrad. Comrad's "Operator" 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.

Anti-profit

@@ -237,7 +237,7 @@

Plain old object-oriented code in Python. The root entity is a "Keymaker": anyone from @Telephone, to @Operator, to users, to groups, who has a public/private key pair. The database uses a simple file-based key-value store, written in Python (simplekv). Code is in comrad/backend.

Cryptography

We are using Themis, a high-level cross-platform cryptography library, for all cryptographic functions, rather than handling any primitives ourselves.

-

Code is primarily in: * comrad/backend/keymaker.py * comrad/backend/comrads.py * comrad/backend/phonelines.py

+

Code is primarily in: * comrad/backend/keymaker.py * comrad/backend/comrades.py * comrad/backend/phonelines.py