├── src ├── backend │ ├── tools │ │ ├── py.ML │ │ │ ├── CHANGES.rst │ │ │ ├── README.rst │ │ │ ├── requirements.deps │ │ │ ├── setup.cfg │ │ │ └── caliopen_climl │ │ │ │ └── __init__.py │ │ ├── py.CLI │ │ │ ├── caliopen_cli │ │ │ │ ├── utils │ │ │ │ │ └── __init__.py │ │ │ │ ├── __init__.py │ │ │ │ └── commands │ │ │ │ │ └── setup.py │ │ │ ├── requirements.deps │ │ │ ├── CHANGES.rst │ │ │ └── setup.cfg │ │ ├── py.doc │ │ │ ├── CHANGES.rst │ │ │ ├── caliopen_api_doc │ │ │ │ ├── __init__.py │ │ │ │ └── swagger-ui │ │ │ │ │ ├── images │ │ │ │ │ ├── expand.gif │ │ │ │ │ ├── caliopen.png │ │ │ │ │ ├── collapse.gif │ │ │ │ │ ├── favicon.ico │ │ │ │ │ ├── throbber.gif │ │ │ │ │ ├── logo_small.png │ │ │ │ │ ├── wordnik_api.png │ │ │ │ │ ├── favicon-16x16.png │ │ │ │ │ ├── favicon-32x32.png │ │ │ │ │ ├── pet_store_api.png │ │ │ │ │ └── explorer_icons.png │ │ │ │ │ ├── fonts │ │ │ │ │ ├── DroidSans.ttf │ │ │ │ │ └── DroidSans-Bold.ttf │ │ │ │ │ └── lib │ │ │ │ │ └── jquery.slideto.min.js │ │ │ └── setup.cfg │ │ └── py.migrate │ │ │ ├── CHANGES.rst │ │ │ ├── caliopen_migrate │ │ │ └── __init__.py │ │ │ ├── setup.cfg │ │ │ └── README.rst │ ├── components │ │ ├── py.data │ │ │ ├── requirements.deps │ │ │ ├── CHANGES.rst │ │ │ ├── setup.cfg │ │ │ └── caliopen_data │ │ │ │ └── __init__.py │ │ ├── py.pi │ │ │ ├── requirements.deps │ │ │ ├── caliopen_pi │ │ │ │ ├── features │ │ │ │ │ └── helpers │ │ │ │ │ │ └── __init__.py │ │ │ │ └── __init__.py │ │ │ ├── CHANGES.rst │ │ │ ├── setup.cfg │ │ │ └── README.rst │ │ ├── py.tag │ │ │ ├── requirements.deps │ │ │ ├── CHANGES.rst │ │ │ ├── caliopen_tag │ │ │ │ ├── __init__.py │ │ │ │ ├── taggers │ │ │ │ │ └── __init__.py │ │ │ │ ├── utils.py │ │ │ │ └── models_manager │ │ │ │ │ └── __init__.py │ │ │ ├── setup.cfg │ │ │ └── README.rst │ │ └── py.pgp │ │ │ ├── CHANGES.rst │ │ │ ├── README.rst │ │ │ ├── MANIFEST.in │ │ │ └── caliopen_pgp │ │ │ └── __init__.py │ ├── main │ │ ├── py.main │ │ │ ├── caliopen_main │ │ │ │ ├── common │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── helpers │ │ │ │ │ │ └── __init__.py │ │ │ │ │ ├── objects │ │ │ │ │ │ └── __init__.py │ │ │ │ │ ├── store │ │ │ │ │ │ └── __init__.py │ │ │ │ │ ├── parameters │ │ │ │ │ │ ├── __init__.py │ │ │ │ │ │ └── tag.py │ │ │ │ │ └── core │ │ │ │ │ │ └── __init__.py │ │ │ │ ├── contact │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── parsers │ │ │ │ │ │ └── __init__.py │ │ │ │ │ └── objects │ │ │ │ │ │ └── __init__.py │ │ │ │ ├── device │ │ │ │ │ └── __init__.py │ │ │ │ ├── message │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── parsers │ │ │ │ │ │ └── __init__.py │ │ │ │ │ ├── objects │ │ │ │ │ │ └── __init__.py │ │ │ │ │ ├── core │ │ │ │ │ │ └── __init__.py │ │ │ │ │ └── parameters │ │ │ │ │ │ └── __init__.py │ │ │ │ ├── tests │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── parsers │ │ │ │ │ │ └── __init__.py │ │ │ │ │ └── fixtures │ │ │ │ │ │ └── vcard │ │ │ │ │ │ ├── rfc2426-3.vcard │ │ │ │ │ │ ├── rfc2426-4.vcard │ │ │ │ │ │ ├── rfc2426-2.vcard │ │ │ │ │ │ ├── rfc2426-5.vcard │ │ │ │ │ │ ├── rfc2426-1.vcard │ │ │ │ │ │ ├── rfc2425-1.vcard │ │ │ │ │ │ └── rfc2425-2.vcard │ │ │ │ ├── discussion │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── core │ │ │ │ │ │ └── __init__.py │ │ │ │ │ ├── objects │ │ │ │ │ │ └── __init__.py │ │ │ │ │ ├── parameters │ │ │ │ │ │ └── __init__.py │ │ │ │ │ └── store │ │ │ │ │ │ └── __init__.py │ │ │ │ ├── notification │ │ │ │ │ └── __init__.py │ │ │ │ ├── participant │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── objects │ │ │ │ │ │ └── __init__.py │ │ │ │ │ ├── parameters │ │ │ │ │ │ └── __init__.py │ │ │ │ │ ├── store │ │ │ │ │ │ └── __init__.py │ │ │ │ │ └── core │ │ │ │ │ │ └── __init__.py │ │ │ │ ├── protocol │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── core │ │ │ │ │ │ ├── __init__.py │ │ │ │ │ │ └── provider.py │ │ │ │ │ └── store │ │ │ │ │ │ └── __init__.py │ │ │ │ ├── user │ │ │ │ │ ├── helpers │ │ │ │ │ │ └── __init__.py │ │ │ │ │ ├── objects │ │ │ │ │ │ ├── __init__.py │ │ │ │ │ │ └── device.py │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── core │ │ │ │ │ │ └── __init__.py │ │ │ │ ├── __init__.py │ │ │ │ └── pi │ │ │ │ │ └── __init__.py │ │ │ ├── MANIFEST.in │ │ │ ├── requirements.deps │ │ │ ├── setup.cfg │ │ │ ├── CHANGES.rst │ │ │ └── README.rst │ │ ├── py.storage │ │ │ ├── caliopen_storage │ │ │ │ ├── returns.py │ │ │ │ ├── helpers │ │ │ │ │ └── __init__.py │ │ │ │ ├── __init__.py │ │ │ │ ├── core │ │ │ │ │ ├── registry.py │ │ │ │ │ └── __init__.py │ │ │ │ └── store │ │ │ │ │ └── __init__.py │ │ │ ├── MANIFEST.in │ │ │ ├── CHANGES.rst │ │ │ └── setup.cfg │ │ ├── go.backends │ │ │ ├── store │ │ │ │ ├── cassandra │ │ │ │ │ └── discussions_test.go │ │ │ │ └── object_store │ │ │ │ │ └── attachments.go │ │ │ ├── UrisInterface.go │ │ │ ├── AttachmentsInterfaces.go │ │ │ └── TagsInterfaces.go │ │ └── go.main │ │ │ ├── helpers │ │ │ └── misc.go │ │ │ └── facilities │ │ │ └── REST │ │ │ └── username.go │ ├── interfaces │ │ ├── NATS │ │ │ └── py.client │ │ │ │ ├── requirements.deps │ │ │ │ ├── MANIFEST.in │ │ │ │ ├── CHANGES.rst │ │ │ │ └── caliopen_nats │ │ │ │ └── __init__.py │ │ └── REST │ │ │ ├── py.server │ │ │ ├── MANIFEST.in │ │ │ ├── requirements.deps │ │ │ ├── CHANGES.rst │ │ │ └── caliopen_api │ │ │ │ ├── user │ │ │ │ ├── __init__.py │ │ │ │ └── util.py │ │ │ │ ├── discussion │ │ │ │ ├── __init__.py │ │ │ │ └── config.py │ │ │ │ ├── message │ │ │ │ └── __init__.py │ │ │ │ └── base │ │ │ │ └── deserializer.py │ │ │ └── go.server │ │ │ └── middlewares │ │ │ └── config.go │ ├── defs │ │ ├── rest-api │ │ │ ├── objects │ │ │ │ ├── PrivacyFeatures.yaml │ │ │ │ ├── Email.yaml │ │ │ │ ├── ExternalReferences.yaml │ │ │ │ ├── IM.yaml │ │ │ │ ├── PIMessage.yaml │ │ │ │ ├── PostalAddress.yaml │ │ │ │ ├── NewTag.yaml │ │ │ │ ├── SocialIdentity.yaml │ │ │ │ ├── PI.yaml │ │ │ │ ├── DefaultDevice.yaml │ │ │ │ ├── NewSocialIdentity.yaml │ │ │ │ ├── Phone.yaml │ │ │ │ ├── Organization.yaml │ │ │ │ ├── NewPublicKey.yaml │ │ │ │ ├── NewPhone.yaml │ │ │ │ ├── Error.yaml │ │ │ │ ├── NewEmail.yaml │ │ │ │ ├── Identity.yaml │ │ │ │ ├── Tag.yaml │ │ │ │ ├── NewIM.yaml │ │ │ │ ├── Authentication.yaml │ │ │ │ ├── ShortContact.yaml │ │ │ │ ├── NewOrganization.yaml │ │ │ │ ├── Actions.yaml │ │ │ │ ├── ECKey.yaml │ │ │ │ ├── DeviceLocation.yaml │ │ │ │ ├── NewMessage.yaml │ │ │ │ └── NewPostalAddress.yaml │ │ │ └── paths │ │ │ │ └── raws.yaml │ │ ├── notifiers │ │ │ └── templates │ │ │ │ └── assets │ │ │ │ ├── search_en.png │ │ │ │ ├── search_fr.png │ │ │ │ ├── compose_en.png │ │ │ │ ├── compose_fr.png │ │ │ │ ├── identity_en.png │ │ │ │ ├── identity_fr.png │ │ │ │ ├── participants.png │ │ │ │ ├── ext_account_en.png │ │ │ │ ├── ext_account_fr.png │ │ │ │ ├── new_contact_en.png │ │ │ │ ├── new_contact_fr.png │ │ │ │ ├── compose_button_en.png │ │ │ │ └── compose_button_fr.png │ │ ├── nats-messages │ │ │ ├── SMTPqueue_ack_msg.yaml │ │ │ ├── UpdateContactPI_msg.yaml │ │ │ ├── IMAPworkers_FetchOrder.yaml │ │ │ ├── outboundSMTP_deliver_msg.yaml │ │ │ └── inboundSMTP_deliver_msg.yaml │ │ └── go-objects │ │ │ ├── privacy_features.go │ │ │ └── actions_payload.go │ ├── vendor │ │ └── README.md │ ├── protocols │ │ └── go.smtp │ │ │ └── cmd │ │ │ └── caliopen_lmtpd │ │ │ └── main.go │ ├── Dockerfile.caliopen-python │ └── Dockerfile.caliopen-go └── frontend │ ├── web_application │ ├── .dockerignore │ ├── __mocks__ │ │ ├── styleMock.js │ │ └── fileMock.js │ ├── .prettierrc.js │ ├── server │ │ ├── auth │ │ │ ├── lib │ │ │ │ ├── redirect.ts │ │ │ │ └── seal.ts │ │ │ ├── middlewares │ │ │ │ └── index.ts │ │ │ └── router │ │ │ │ └── index.js │ │ ├── error │ │ │ ├── consts.ts │ │ │ └── index.js │ │ ├── logger │ │ │ └── index.js │ │ ├── ssr │ │ │ └── index.js │ │ ├── api │ │ │ └── lib │ │ │ │ └── sub-request-manager.js │ │ ├── express-react │ │ │ └── index.js │ │ └── assets │ │ │ └── index.js │ ├── src │ │ ├── global.d.ts │ │ ├── modules │ │ │ ├── a11y │ │ │ │ ├── index.js │ │ │ │ └── services │ │ │ │ │ └── tabIndexes.js │ │ │ ├── draftIdentity │ │ │ │ └── index.ts │ │ │ ├── contact │ │ │ │ ├── store │ │ │ │ │ ├── index.ts │ │ │ │ │ └── selectors.ts │ │ │ │ ├── services │ │ │ │ │ ├── identityTypes.js │ │ │ │ │ └── form.ts │ │ │ │ ├── consts.ts │ │ │ │ └── actions │ │ │ │ │ └── loadMoreContacts.ts │ │ │ ├── control │ │ │ │ ├── index.js │ │ │ │ └── components │ │ │ │ │ ├── ComposeContactButton │ │ │ │ │ └── index.js │ │ │ │ │ ├── PageActions │ │ │ │ │ ├── action-btns.scss │ │ │ │ │ └── style.scss │ │ │ │ │ └── ComposeButton │ │ │ │ │ └── style.scss │ │ │ ├── search │ │ │ │ ├── index.js │ │ │ │ └── components │ │ │ │ │ └── SearchField │ │ │ │ │ └── index.js │ │ │ ├── tags │ │ │ │ ├── store │ │ │ │ │ ├── index.ts │ │ │ │ │ └── selectors.ts │ │ │ │ ├── components │ │ │ │ │ └── TagItem │ │ │ │ │ │ └── style.scss │ │ │ │ └── hoc │ │ │ │ │ └── withTags │ │ │ │ │ └── index.jsx │ │ │ ├── user │ │ │ │ ├── store │ │ │ │ │ ├── index.ts │ │ │ │ │ └── selectors.ts │ │ │ │ ├── services │ │ │ │ │ ├── usernameNormalizer │ │ │ │ │ │ └── index.js │ │ │ │ │ ├── signup │ │ │ │ │ │ └── index.js │ │ │ │ │ └── isAuthenticated │ │ │ │ │ │ └── index.js │ │ │ │ ├── selectors │ │ │ │ │ └── userSelector.ts │ │ │ │ ├── components │ │ │ │ │ └── UserMenu │ │ │ │ │ │ ├── next-feature-button.scss │ │ │ │ │ │ └── style.scss │ │ │ │ └── actions │ │ │ │ │ └── getUser.js │ │ │ ├── i18n │ │ │ │ ├── services │ │ │ │ │ └── getLanguage.js │ │ │ │ └── index.js │ │ │ ├── userNotify │ │ │ │ └── index.js │ │ │ ├── tab │ │ │ │ ├── services │ │ │ │ │ └── getTabUrl.js │ │ │ │ ├── hooks │ │ │ │ │ ├── useCurentTab.ts │ │ │ │ │ └── useCloseTab.ts │ │ │ │ ├── contexts │ │ │ │ │ └── TabContext.js │ │ │ │ ├── model │ │ │ │ │ └── Tab.js │ │ │ │ ├── hoc │ │ │ │ │ ├── withUpdateTab.jsx │ │ │ │ │ └── withCurrentTab.jsx │ │ │ │ └── index.js │ │ │ ├── pi │ │ │ │ ├── components │ │ │ │ │ ├── MultidimensionalPi │ │ │ │ │ │ └── index.js │ │ │ │ │ └── BackgroundImage │ │ │ │ │ │ ├── assets │ │ │ │ │ │ └── co_bg_secure.jpg │ │ │ │ │ │ ├── style.scss │ │ │ │ │ │ └── o-background-image.scss │ │ │ │ └── index.jsx │ │ │ ├── publicKey │ │ │ │ └── index.js │ │ │ ├── device │ │ │ │ ├── services │ │ │ │ │ └── status.js │ │ │ │ ├── actions │ │ │ │ │ ├── requestDevices.js │ │ │ │ │ ├── requestDevice.js │ │ │ │ │ ├── verifyDevice.js │ │ │ │ │ └── revokeDevice.js │ │ │ │ ├── index.ts │ │ │ │ └── hooks │ │ │ │ │ └── useDevice.ts │ │ │ ├── remoteIdentity │ │ │ │ ├── components │ │ │ │ │ └── ProviderIcon │ │ │ │ │ │ └── style.scss │ │ │ │ ├── selectors │ │ │ │ │ ├── identityStateSelector.js │ │ │ │ │ ├── identitySelector.js │ │ │ │ │ └── identitiesSelector.js │ │ │ │ └── services │ │ │ │ │ └── getProvider.js │ │ │ ├── file │ │ │ │ └── index.js │ │ │ ├── routing │ │ │ │ ├── contexts │ │ │ │ │ └── RoutingContext.js │ │ │ │ ├── services │ │ │ │ │ ├── url │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ └── buildURL.js │ │ │ │ │ ├── findTabbableRouteConfig.js │ │ │ │ │ ├── flattenRouteConfig.js │ │ │ │ │ └── getRouterHistory.js │ │ │ │ └── hooks │ │ │ │ │ └── useSearchParams.ts │ │ │ ├── scroll │ │ │ │ ├── services │ │ │ │ │ ├── getTop.js │ │ │ │ │ ├── getViewPortTop.js │ │ │ │ │ └── scrollTop.js │ │ │ │ └── index.js │ │ │ ├── view │ │ │ │ ├── index.js │ │ │ │ ├── actions │ │ │ │ │ └── requestMessages.js │ │ │ │ └── config.js │ │ │ ├── draftMessage │ │ │ │ ├── components │ │ │ │ │ ├── Recipient │ │ │ │ │ │ └── index.js │ │ │ │ │ └── AttachmentManager │ │ │ │ │ │ └── index.js │ │ │ │ ├── services │ │ │ │ │ └── getIdentityProtocol.js │ │ │ │ └── index.js │ │ │ ├── settings │ │ │ │ ├── selectors │ │ │ │ │ └── settings.ts │ │ │ │ └── index.js │ │ │ ├── message │ │ │ │ ├── services │ │ │ │ │ ├── getLastMessageFromArray.js │ │ │ │ │ ├── findUserParticipant.js │ │ │ │ │ ├── isUserParticipant.js │ │ │ │ │ └── sortMessages.js │ │ │ │ ├── actions │ │ │ │ │ ├── getMessages.js │ │ │ │ │ ├── getParentMessage.js │ │ │ │ │ ├── requestMessages.js │ │ │ │ │ └── setMessageRead.js │ │ │ │ ├── types.d.ts │ │ │ │ └── selectors │ │ │ │ │ └── messageSelector.js │ │ │ ├── pwa │ │ │ │ ├── index.js │ │ │ │ └── contexts │ │ │ │ │ └── InstallPromptContext.ts │ │ │ ├── notification │ │ │ │ ├── index.js │ │ │ │ └── selectors │ │ │ │ │ └── messageNotificationsSelector.js │ │ │ ├── encryption │ │ │ │ ├── selectors │ │ │ │ │ └── publicKey.js │ │ │ │ ├── components │ │ │ │ │ └── AskPassphraseForm │ │ │ │ │ │ └── style.scss │ │ │ │ ├── actions │ │ │ │ │ └── fetchRemoteKeys.js │ │ │ │ └── index.js │ │ │ ├── discussion │ │ │ │ ├── selectors │ │ │ │ │ ├── discussionsSelector.ts │ │ │ │ │ └── discussionIdSelector.js │ │ │ │ └── index.js │ │ │ ├── avatar │ │ │ │ ├── index.js │ │ │ │ ├── services │ │ │ │ │ └── stylesheet-helper │ │ │ │ │ │ └── index.js │ │ │ │ └── components │ │ │ │ │ ├── ContactAvatarLetter │ │ │ │ │ └── index.spec.jsx │ │ │ │ │ └── AvatarLetter │ │ │ │ │ └── services │ │ │ │ │ └── stylesheet-helper │ │ │ │ │ └── index.js │ │ │ ├── form │ │ │ │ └── services │ │ │ │ │ └── validators.ts │ │ │ └── identity │ │ │ │ └── index.js │ │ ├── store │ │ │ ├── selectors │ │ │ │ ├── device.js │ │ │ │ ├── provider.js │ │ │ │ ├── timeline.js │ │ │ │ ├── settings.js │ │ │ │ └── getModuleStateSelector.js │ │ │ └── middlewares │ │ │ │ └── crash-reporter-middleware.js │ │ ├── styles │ │ │ ├── vendor │ │ │ │ ├── bootstrap_react-redux-notify.scss │ │ │ │ ├── bootstrap_font-awesome.scss │ │ │ │ ├── bootstrap_foundation-sites.scss │ │ │ │ └── foundation-sites │ │ │ │ │ └── _flex-grid.scss │ │ │ ├── object │ │ │ │ ├── o-pi-border.scss │ │ │ │ ├── o-navigation.scss │ │ │ │ └── o-hidden-element.scss │ │ │ ├── common.scss │ │ │ └── util │ │ │ │ ├── breakpoint.scss │ │ │ │ └── flex-grid.scss │ │ ├── layouts │ │ │ ├── Page │ │ │ │ ├── components │ │ │ │ │ ├── TakeATour │ │ │ │ │ │ ├── style.scss │ │ │ │ │ │ └── index.js │ │ │ │ │ ├── Navbar │ │ │ │ │ │ └── components │ │ │ │ │ │ │ ├── ApplicationTab │ │ │ │ │ │ │ └── application-tab.scss │ │ │ │ │ │ │ ├── ItemLink │ │ │ │ │ │ │ └── style.scss │ │ │ │ │ │ │ └── ItemButton │ │ │ │ │ │ │ └── style.scss │ │ │ │ │ ├── Navigation │ │ │ │ │ │ └── withTabs.jsx │ │ │ │ │ └── NotificationCenter │ │ │ │ │ │ └── index.jsx │ │ │ │ └── style.scss │ │ │ ├── User │ │ │ │ ├── index.js │ │ │ │ └── styles.scss │ │ │ ├── Settings │ │ │ │ ├── index.js │ │ │ │ └── style.scss │ │ │ └── SearchResults │ │ │ │ ├── index.js │ │ │ │ └── style.scss │ │ ├── components │ │ │ ├── PiBar │ │ │ │ └── index.js │ │ │ ├── MessageDate │ │ │ │ ├── index.js │ │ │ │ └── style.scss │ │ │ ├── FieldGroup │ │ │ │ └── style.scss │ │ │ ├── Label │ │ │ │ └── style.scss │ │ │ ├── Callout │ │ │ │ └── style.scss │ │ │ ├── PlaceholderList │ │ │ │ └── index.scss │ │ │ ├── Fieldset │ │ │ │ └── style.scss │ │ │ ├── CheckboxFieldGroup │ │ │ │ └── style.scss │ │ │ ├── Confirm │ │ │ │ └── style.scss │ │ │ ├── MenuBar │ │ │ │ └── style.scss │ │ │ ├── Icon │ │ │ │ ├── __snapshots__ │ │ │ │ │ └── index.spec.tsx.snap │ │ │ │ ├── index.spec.tsx │ │ │ │ └── style.scss │ │ │ ├── BlockList │ │ │ │ ├── style.scss │ │ │ │ └── index.spec.tsx │ │ │ ├── FieldErrors │ │ │ │ └── style.scss │ │ │ ├── Textarea │ │ │ │ └── style.scss │ │ │ ├── Subtitle │ │ │ │ └── index.spec.tsx │ │ │ ├── Badge │ │ │ │ └── index.spec.tsx │ │ │ ├── DropdownMenu │ │ │ │ └── style.scss │ │ │ ├── TextareaFieldGroup │ │ │ │ └── style.scss │ │ │ ├── DatePickerGroup │ │ │ │ └── index.jsx │ │ │ ├── TextList │ │ │ │ └── style.scss │ │ │ ├── Link │ │ │ │ └── index.spec.tsx │ │ │ └── TextBlock │ │ │ │ └── style.scss │ │ ├── image.d.ts │ │ ├── scenes │ │ │ ├── Signin.tsx │ │ │ ├── Signup.tsx │ │ │ ├── View │ │ │ │ ├── components │ │ │ │ │ ├── MessageItem │ │ │ │ │ │ └── index.js │ │ │ │ │ └── MessageSelector │ │ │ │ │ │ └── style.scss │ │ │ │ └── style.scss │ │ │ ├── Discussion │ │ │ │ └── components │ │ │ │ │ ├── MessageList │ │ │ │ │ ├── index.js │ │ │ │ │ └── style.scss │ │ │ │ │ ├── TagList │ │ │ │ │ └── style.scss │ │ │ │ │ ├── InstantMessage │ │ │ │ │ ├── instant-message-aside.scss │ │ │ │ │ ├── instant-message-participants.scss │ │ │ │ │ └── instant-message-author.scss │ │ │ │ │ ├── AddParticipantsToContactBook │ │ │ │ │ └── add-participants-dropdown.scss │ │ │ │ │ ├── ReplyExcerpt │ │ │ │ │ └── style.scss │ │ │ │ │ └── QuickDraftForm │ │ │ │ │ └── components │ │ │ │ │ └── ToggleAdvancedFormButton │ │ │ │ │ └── toggle-advanced-draft-button.scss │ │ │ ├── NewDraft │ │ │ │ ├── components │ │ │ │ │ └── DraftMessage │ │ │ │ │ │ └── draft-message-placeholder.scss │ │ │ │ └── style.scss │ │ │ ├── RemoteIdentitySettings │ │ │ │ └── components │ │ │ │ │ ├── AuthButton │ │ │ │ │ └── style.scss │ │ │ │ │ ├── RemoteIdentityDetails │ │ │ │ │ └── style.scss │ │ │ │ │ ├── NewIdentity │ │ │ │ │ ├── provider-email-button.scss │ │ │ │ │ ├── provider-list.scss │ │ │ │ │ └── new-identity.scss │ │ │ │ │ └── RemoteIdentityEmail │ │ │ │ │ └── style.scss │ │ │ ├── contact │ │ │ │ ├── ContactBook │ │ │ │ │ └── components │ │ │ │ │ │ ├── ImportContact │ │ │ │ │ │ └── index.js │ │ │ │ │ │ ├── ImportContactForm │ │ │ │ │ │ └── index.jsx │ │ │ │ │ │ └── TagList │ │ │ │ │ │ └── style.scss │ │ │ │ ├── components │ │ │ │ │ ├── AddressDetails │ │ │ │ │ │ └── style.scss │ │ │ │ │ ├── ContactTitleField │ │ │ │ │ │ └── style.scss │ │ │ │ │ ├── OrgaForm │ │ │ │ │ │ └── style.scss │ │ │ │ │ ├── AddFormFieldForm │ │ │ │ │ │ └── style.scss │ │ │ │ │ ├── PublicKeyForm │ │ │ │ │ │ └── style.scss │ │ │ │ │ └── BirthdayDetails │ │ │ │ │ │ └── index.tsx │ │ │ │ └── contact-action-bar.scss │ │ │ ├── ForgotPassword │ │ │ │ ├── index.js │ │ │ │ ├── components │ │ │ │ │ └── ForgotPasswordForm │ │ │ │ │ │ └── index.jsx │ │ │ │ └── presenter.spec.jsx │ │ │ ├── ResetPassword │ │ │ │ ├── index.js │ │ │ │ └── components │ │ │ │ │ └── ResetPasswordForm │ │ │ │ │ └── index.jsx │ │ │ ├── SettingsSignatures │ │ │ │ ├── index.jsx │ │ │ │ └── components │ │ │ │ │ └── SignatureForm │ │ │ │ │ └── index.jsx │ │ │ ├── ApplicationSettings │ │ │ │ └── components │ │ │ │ │ ├── ContactSettings │ │ │ │ │ └── index.js │ │ │ │ │ ├── InterfaceSettings │ │ │ │ │ └── index.js │ │ │ │ │ ├── MessageSettings │ │ │ │ │ └── index.js │ │ │ │ │ ├── NotificationSettings │ │ │ │ │ └── index.js │ │ │ │ │ └── DesktopNotificationSettings │ │ │ │ │ ├── index.js │ │ │ │ │ └── style.scss │ │ │ ├── DevicesSettings │ │ │ │ └── components │ │ │ │ │ └── VerifyDevice │ │ │ │ │ └── style.scss │ │ │ ├── ContactAssociation │ │ │ │ └── contact-association.scss │ │ │ ├── UserSecurity │ │ │ │ └── components │ │ │ │ │ └── OpenPGPForm.scss │ │ │ ├── Timeline │ │ │ │ ├── timeline-action-bar.scss │ │ │ │ └── components │ │ │ │ │ └── DiscussionSelector │ │ │ │ │ └── style.scss │ │ │ ├── SearchResults │ │ │ │ └── components │ │ │ │ │ └── Highlights │ │ │ │ │ └── style.scss │ │ │ ├── ValidateDevice │ │ │ │ └── style.scss │ │ │ ├── UserProfile │ │ │ │ └── components │ │ │ │ │ └── ProfileForm │ │ │ │ │ └── style.scss │ │ │ └── TagsSettings │ │ │ │ └── components │ │ │ │ └── TagSearch │ │ │ │ └── style.scss │ │ ├── services │ │ │ ├── capitalize.js │ │ │ ├── openpgp-manager │ │ │ │ ├── index.ts │ │ │ │ ├── index.spec.ts │ │ │ │ └── errors.ts │ │ │ ├── api-location │ │ │ │ └── index.js │ │ │ ├── importance-level │ │ │ │ └── index.js │ │ │ ├── api-client │ │ │ │ └── types.d.ts │ │ │ ├── event-manager │ │ │ │ └── index.js │ │ │ ├── asciify.js │ │ │ ├── username-utils │ │ │ │ └── username-availability.ts │ │ │ └── asciify.spec.js │ │ └── fonts │ │ │ └── OpenSans │ │ │ ├── Bold │ │ │ ├── OpenSans-Bold.eot │ │ │ ├── OpenSans-Bold.ttf │ │ │ ├── OpenSans-Bold.woff │ │ │ └── OpenSans-Bold.woff2 │ │ │ ├── Regular │ │ │ ├── OpenSans-Regular.eot │ │ │ ├── OpenSans-Regular.ttf │ │ │ ├── OpenSans-Regular.woff │ │ │ └── OpenSans-Regular.woff2 │ │ │ └── Semibold │ │ │ ├── OpenSans-Semibold.eot │ │ │ ├── OpenSans-Semibold.ttf │ │ │ ├── OpenSans-Semibold.woff │ │ │ └── OpenSans-Semibold.woff2 │ ├── .prettierignore │ ├── bin │ │ └── server │ ├── postcss.config.js │ ├── public │ │ └── favicon.ico │ ├── assets │ │ ├── caliopen-icon.png │ │ └── caliopen-logo.png │ ├── test │ │ ├── msw-handlers │ │ │ ├── user.ts │ │ │ └── tags.ts │ │ ├── fixtures │ │ │ ├── user │ │ │ │ └── index.ts │ │ │ ├── contacts │ │ │ │ └── index.ts │ │ │ └── device │ │ │ │ └── index.ts │ │ ├── functional │ │ │ └── utils │ │ │ │ └── timeline.js │ │ └── server.ts │ ├── .gitignore │ ├── template │ │ ├── index.ejs │ │ └── index.html │ └── CONTRIBUTING.md │ └── maintenance │ ├── src │ └── assets │ │ ├── img │ │ ├── favicon.ico │ │ ├── timeline.png │ │ ├── device-1-new.png │ │ ├── device-2-new.png │ │ ├── caliopen_capture1.jpg │ │ ├── caliopen_capture2.jpg │ │ ├── caliopen_capture3.jpg │ │ ├── cropped-caliopen-logo-32x32.png │ │ ├── cropped-caliopen-logo-180x180.png │ │ └── cropped-caliopen-logo-192x192.png │ │ ├── css │ │ ├── OpenSans-Bold.ttf │ │ ├── OpenSans-Regular.ttf │ │ ├── OpenSans-ExtraBold.ttf │ │ └── OpenSans-Semibold.ttf │ │ └── scss │ │ └── style.scss │ ├── package.json │ ├── Dockerfile │ └── config │ └── nginx-config-maintenance.conf ├── devtools ├── api-mock │ ├── oauth-mock │ │ └── data.json │ ├── remote_identities │ │ └── data.json │ ├── collection-middleware │ │ └── index.js │ ├── settings │ │ └── data.json │ ├── local_identities │ │ └── data.json │ ├── devices │ │ └── data.json │ ├── authentications │ │ └── data.json │ └── bin │ │ └── start ├── stop.sh ├── storybook │ ├── stories │ │ ├── Guideline │ │ │ └── style.scss │ │ ├── assets │ │ │ └── example.png │ │ ├── presenters │ │ │ ├── index.js │ │ │ └── Code.jsx │ │ └── Changelog.jsx │ ├── .storybook │ │ ├── addons.js │ │ └── config.js │ └── README.md ├── migrations │ ├── add_temp_id_to_attachment_type.cql │ └── add_delivered_column_to_raw-message_table.cql ├── registry.conf.template ├── kubernetes │ ├── clean-minikube.sh │ ├── services │ │ ├── apiv1-service.yaml │ │ ├── lmtpd-service.yaml │ │ ├── minio-service.yaml │ │ ├── nats-service.yaml │ │ ├── redis-service.yaml │ │ ├── frontend-service.yaml │ │ ├── apiv2-service.yaml │ │ ├── elasticsearch-service.yaml │ │ ├── smtp-service.yaml │ │ ├── external-python-service.yaml │ │ └── cassandra-service.yaml │ ├── volumeclaims │ │ ├── db-persistentvolumeclaim.yaml │ │ ├── store-persistentvolumeclaim.yaml │ │ └── index-persistentvolumeclaim.yaml │ └── deployments │ │ ├── redis-deployment.yaml │ │ └── nats-deployment.yaml ├── manage_package-requirements.txt ├── fixtures │ ├── vcard │ │ ├── rfc2426-3.vcard │ │ ├── rfc2426-4.vcard │ │ ├── rfc2426-5.vcard │ │ ├── rfc2426-2.vcard │ │ ├── rfc2426-1.vcard │ │ ├── rfc2425-1.vcard │ │ ├── rfc2425-2.vcard │ │ └── multi.vcf │ ├── raw_inbound_msg.cql │ └── raw_emails │ │ └── simple ├── drone │ ├── test_front.sh │ ├── build_images.sh │ ├── test_go.sh │ └── test_py.sh └── clean-dev-storage.sh ├── doc ├── specifications │ ├── email-protocol │ │ ├── assets │ │ │ ├── email-delivery-outbound.puml │ │ │ ├── email-delivery-inbound_20161229.pdf │ │ │ ├── email-inbound-delivery_20170104.png │ │ │ ├── email-inbound-delivery-poc_20161229_act.pdf │ │ │ ├── email-inbound-delivery-poc_20161229_seq.pdf │ │ │ └── smtp-delivery-inbound-closeup-20170101.png │ │ └── index.md │ ├── attachments │ │ ├── index.md │ │ └── assets │ │ │ └── management_2017-06-01.png │ ├── pwa │ │ └── assets │ │ │ └── sequence.png │ ├── contact │ │ ├── index.md │ │ └── assets │ │ │ └── discover_contact_from_email.png │ ├── discussions │ │ └── assets │ │ │ └── delete_discussion.png │ ├── notification │ │ ├── frontend.md │ │ └── assets │ │ │ └── client-message-sequence.png │ ├── message │ │ └── assets │ │ │ ├── message-create-save-send-20170202.png │ │ │ └── message_discussion_association-20190327.png │ └── user-and-device-identification │ │ └── assets │ │ ├── authenticate_new_device.png │ │ ├── create_user_and_device.png │ │ ├── user_update_credential.png │ │ └── user_and_device_authentication.png ├── assets │ └── caliopen_ui.jpg ├── architecture │ └── assets │ │ ├── Stack Caliopen_2017-03-02.pdf │ │ ├── docker-compose_2017-03-09.png │ │ └── stack_frontend_dev_2017-03-09.png ├── index.md └── welcome.md ├── .gitattributes └── .git-crypt ├── keys └── default │ └── 0 │ ├── 3A1172187EF7406FCBCECFA60E68C4F85D04D8FC.gpg │ ├── A08EA82ED095FCD8575AB3742DC613553716A878.gpg │ ├── E6711893CE02FDEEA5B1F79FF3D83146E5111526.gpg │ └── EA440246DFB690B5B1FB4032CE011C4615DB040A.gpg └── .gitattributes /src/backend/tools/py.ML/CHANGES.rst: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/backend/tools/py.ML/README.rst: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /devtools/api-mock/oauth-mock/data.json: -------------------------------------------------------------------------------- 1 | [] 2 | -------------------------------------------------------------------------------- /src/backend/components/py.data/requirements.deps: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /devtools/api-mock/remote_identities/data.json: -------------------------------------------------------------------------------- 1 | [] 2 | -------------------------------------------------------------------------------- /src/backend/tools/py.ML/requirements.deps: -------------------------------------------------------------------------------- 1 | caliopen_tag -------------------------------------------------------------------------------- /src/backend/components/py.pi/requirements.deps: -------------------------------------------------------------------------------- 1 | caliopen_pgp -------------------------------------------------------------------------------- /src/backend/main/py.main/caliopen_main/common/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/backend/main/py.main/caliopen_main/contact/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/backend/main/py.main/caliopen_main/device/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/backend/main/py.main/caliopen_main/message/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/backend/main/py.main/caliopen_main/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/backend/main/py.storage/caliopen_storage/returns.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/backend/tools/py.CLI/caliopen_cli/utils/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/backend/components/py.tag/requirements.deps: -------------------------------------------------------------------------------- 1 | caliopen_data -------------------------------------------------------------------------------- /src/backend/main/py.main/caliopen_main/discussion/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/backend/main/py.main/caliopen_main/notification/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/backend/main/py.main/caliopen_main/participant/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/backend/main/py.main/caliopen_main/protocol/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/backend/main/py.main/caliopen_main/user/helpers/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/backend/main/py.main/caliopen_main/user/objects/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/backend/main/py.main/caliopen_main/user/objects/device.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/backend/interfaces/NATS/py.client/requirements.deps: -------------------------------------------------------------------------------- 1 | caliopen_main -------------------------------------------------------------------------------- /src/backend/main/py.main/caliopen_main/common/helpers/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/backend/main/py.main/caliopen_main/common/objects/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/backend/main/py.main/caliopen_main/message/parsers/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/backend/main/py.main/caliopen_main/tests/parsers/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/backend/main/py.storage/caliopen_storage/helpers/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/frontend/web_application/.dockerignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | -------------------------------------------------------------------------------- /devtools/stop.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | docker-compose stop 5 | -------------------------------------------------------------------------------- /doc/specifications/email-protocol/assets/email-delivery-outbound.puml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/backend/components/py.pi/caliopen_pi/features/helpers/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/backend/main/py.main/MANIFEST.in: -------------------------------------------------------------------------------- 1 | include *.cfg *.rst *.template 2 | -------------------------------------------------------------------------------- /src/backend/tools/py.CLI/requirements.deps: -------------------------------------------------------------------------------- 1 | caliopen_pi 2 | caliopen_nats -------------------------------------------------------------------------------- /src/backend/main/py.main/requirements.deps: -------------------------------------------------------------------------------- 1 | caliopen_storage 2 | caliopen_pi -------------------------------------------------------------------------------- /src/backend/main/py.storage/MANIFEST.in: -------------------------------------------------------------------------------- 1 | include *.cfg *.rst *.template 2 | -------------------------------------------------------------------------------- /src/frontend/web_application/__mocks__/styleMock.js: -------------------------------------------------------------------------------- 1 | module.exports = {}; 2 | -------------------------------------------------------------------------------- /devtools/storybook/stories/Guideline/style.scss: -------------------------------------------------------------------------------- 1 | .typo { 2 | color: red; 3 | } 4 | -------------------------------------------------------------------------------- /src/backend/interfaces/NATS/py.client/MANIFEST.in: -------------------------------------------------------------------------------- 1 | include *.txt *.ini *.cfg *.rst -------------------------------------------------------------------------------- /src/backend/interfaces/REST/py.server/MANIFEST.in: -------------------------------------------------------------------------------- 1 | include *.txt *.ini *.cfg *.rst -------------------------------------------------------------------------------- /src/backend/main/go.backends/store/cassandra/discussions_test.go: -------------------------------------------------------------------------------- 1 | package store 2 | -------------------------------------------------------------------------------- /src/backend/main/py.main/caliopen_main/user/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | devtools/kubernetes/secrets/*.yaml filter=git-crypt diff=git-crypt 2 | -------------------------------------------------------------------------------- /src/backend/main/py.storage/CHANGES.rst: -------------------------------------------------------------------------------- 1 | 0.0.1 2 | ----- 3 | 4 | - Initial version 5 | -------------------------------------------------------------------------------- /src/backend/tools/py.CLI/CHANGES.rst: -------------------------------------------------------------------------------- 1 | 0.0.1 2 | ----- 3 | 4 | - Initial version 5 | -------------------------------------------------------------------------------- /src/backend/tools/py.doc/CHANGES.rst: -------------------------------------------------------------------------------- 1 | 0.0.2 2 | ----- 3 | 4 | - Initial version 5 | -------------------------------------------------------------------------------- /src/backend/tools/py.migrate/CHANGES.rst: -------------------------------------------------------------------------------- 1 | 0.0.1 2 | ----- 3 | 4 | - Initial version 5 | -------------------------------------------------------------------------------- /src/backend/tools/py.migrate/caliopen_migrate/__init__.py: -------------------------------------------------------------------------------- 1 | 2 | __version__ = '0.0.1' 3 | -------------------------------------------------------------------------------- /src/backend/components/py.pgp/CHANGES.rst: -------------------------------------------------------------------------------- 1 | 0.0.1 2 | ----- 3 | 4 | - Initial version 5 | -------------------------------------------------------------------------------- /src/backend/components/py.pi/CHANGES.rst: -------------------------------------------------------------------------------- 1 | 0.0.1 2 | ----- 3 | 4 | - Initial version 5 | 6 | -------------------------------------------------------------------------------- /src/backend/interfaces/NATS/py.client/CHANGES.rst: -------------------------------------------------------------------------------- 1 | 0.0.1 2 | ----- 3 | - initial version 4 | -------------------------------------------------------------------------------- /src/backend/interfaces/REST/py.server/requirements.deps: -------------------------------------------------------------------------------- 1 | caliopen_storage 2 | caliopen_main -------------------------------------------------------------------------------- /src/frontend/web_application/__mocks__/fileMock.js: -------------------------------------------------------------------------------- 1 | module.exports = 'test-file-stub'; 2 | -------------------------------------------------------------------------------- /src/backend/components/py.data/CHANGES.rst: -------------------------------------------------------------------------------- 1 | 0.0.1 2 | ----- 3 | 4 | - Initial version 5 | 6 | -------------------------------------------------------------------------------- /src/backend/components/py.tag/CHANGES.rst: -------------------------------------------------------------------------------- 1 | 0.0.1 2 | ----- 3 | 4 | - Initial version 5 | 6 | -------------------------------------------------------------------------------- /src/frontend/web_application/.prettierrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | singleQuote: true, 3 | }; 4 | -------------------------------------------------------------------------------- /src/frontend/web_application/server/auth/lib/redirect.ts: -------------------------------------------------------------------------------- 1 | export const DEFAULT_REDIRECT = '/'; 2 | -------------------------------------------------------------------------------- /src/frontend/web_application/server/auth/middlewares/index.ts: -------------------------------------------------------------------------------- 1 | export * from './decode-cookie'; 2 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/global.d.ts: -------------------------------------------------------------------------------- 1 | declare const BUILD_TARGET: 'server' | 'browser'; 2 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/a11y/index.js: -------------------------------------------------------------------------------- 1 | export * from './services/tabIndexes'; 2 | -------------------------------------------------------------------------------- /devtools/migrations/add_temp_id_to_attachment_type.cql: -------------------------------------------------------------------------------- 1 | ALTER TYPE message_attachment ADD temp_id uuid; -------------------------------------------------------------------------------- /devtools/registry.conf.template: -------------------------------------------------------------------------------- 1 | DOCKER_REPO="registry.caliopen.org" 2 | REPO_USER="" 3 | REPO_PASS="" -------------------------------------------------------------------------------- /src/backend/defs/rest-api/objects/PrivacyFeatures.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | type: object 3 | properties: {} 4 | 5 | -------------------------------------------------------------------------------- /src/frontend/web_application/.prettierignore: -------------------------------------------------------------------------------- 1 | dist/ 2 | locale/ 3 | node_modules/ 4 | tsconfig.json 5 | -------------------------------------------------------------------------------- /src/frontend/web_application/bin/server: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | require('../dist/server'); 4 | -------------------------------------------------------------------------------- /doc/assets/caliopen_ui.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/doc/assets/caliopen_ui.jpg -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/a11y/services/tabIndexes.js: -------------------------------------------------------------------------------- 1 | export const draftExcerptIndex = 0; 2 | -------------------------------------------------------------------------------- /devtools/migrations/add_delivered_column_to_raw-message_table.cql: -------------------------------------------------------------------------------- 1 | ALTER TABLE raw_message ADD delivered boolean; -------------------------------------------------------------------------------- /src/backend/components/py.pi/caliopen_pi/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | __version__ = '0.23.0' 4 | -------------------------------------------------------------------------------- /src/backend/main/py.main/caliopen_main/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | __version__ = '0.23.0' 4 | -------------------------------------------------------------------------------- /devtools/kubernetes/clean-minikube.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | minikube stop 4 | minikube delete 5 | kubeadm reset 6 | -------------------------------------------------------------------------------- /devtools/manage_package-requirements.txt: -------------------------------------------------------------------------------- 1 | gitdb2==2.0.5 2 | GitPython==2.1.11 3 | PyYAML==5.4 4 | smmap2==2.0.5 5 | -------------------------------------------------------------------------------- /doc/specifications/attachments/index.md: -------------------------------------------------------------------------------- 1 | # Attachments 2 | 3 | ![management](./assets/management_2017-06-01.png) 4 | -------------------------------------------------------------------------------- /src/backend/components/py.tag/caliopen_tag/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | __version__ = '0.23.0' 4 | -------------------------------------------------------------------------------- /src/backend/main/py.storage/caliopen_storage/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | __version__ = '0.23.0' 4 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/draftIdentity/index.ts: -------------------------------------------------------------------------------- 1 | export * from './hooks/useAvailableIdentities'; 2 | -------------------------------------------------------------------------------- /doc/specifications/email-protocol/index.md: -------------------------------------------------------------------------------- 1 | # Email protocol 2 | 3 | cf. [assets directory](./assets/) for uml pdf etc. 4 | -------------------------------------------------------------------------------- /src/backend/interfaces/NATS/py.client/caliopen_nats/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | __version__ = '0.23.0' 4 | -------------------------------------------------------------------------------- /src/frontend/web_application/server/error/consts.ts: -------------------------------------------------------------------------------- 1 | export class ServerError extends Error { 2 | status = 500; 3 | } 4 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/store/selectors/device.js: -------------------------------------------------------------------------------- 1 | export const deviceStateSelector = (state) => state.device; 2 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/styles/vendor/bootstrap_react-redux-notify.scss: -------------------------------------------------------------------------------- 1 | @import 'components/Notify/Notify'; 2 | -------------------------------------------------------------------------------- /devtools/fixtures/vcard/rfc2426-3.vcard: -------------------------------------------------------------------------------- 1 | BEGIN:VCARD 2 | FN:Osamu Koura 3 | N:Koura;Osamu 4 | SORT-STRING:Koura 5 | END:VCARD 6 | -------------------------------------------------------------------------------- /src/frontend/web_application/postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | autoprefixer: {}, 4 | }, 5 | }; 6 | -------------------------------------------------------------------------------- /src/frontend/web_application/server/logger/index.js: -------------------------------------------------------------------------------- 1 | export * from './middlewares/httpLog'; 2 | export * from './getLogger'; 3 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/layouts/Page/components/TakeATour/style.scss: -------------------------------------------------------------------------------- 1 | .m-take-a-tour { 2 | text-align: left; 3 | } 4 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/contact/store/index.ts: -------------------------------------------------------------------------------- 1 | export * from './reducer'; 2 | export * from './selectors'; 3 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/control/index.js: -------------------------------------------------------------------------------- 1 | export { default as PageActions } from './components/PageActions'; 2 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/search/index.js: -------------------------------------------------------------------------------- 1 | export { default as SearchField } from './components/SearchField'; 2 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/tags/store/index.ts: -------------------------------------------------------------------------------- 1 | export * from './reducer'; 2 | export * from './selectors'; 3 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/user/store/index.ts: -------------------------------------------------------------------------------- 1 | export * from './reducer'; 2 | export * from './selectors'; 3 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/store/selectors/provider.js: -------------------------------------------------------------------------------- 1 | export const providerStateSelector = (state) => state.provider; 2 | -------------------------------------------------------------------------------- /src/backend/components/py.pgp/README.rst: -------------------------------------------------------------------------------- 1 | caliopen.pgp 2 | ================== 3 | 4 | PGP utilities for Caliopen backend 5 | 6 | -------------------------------------------------------------------------------- /src/backend/main/py.main/caliopen_main/message/objects/__init__.py: -------------------------------------------------------------------------------- 1 | from .message import Message 2 | 3 | __all__ = ['Message'] 4 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/layouts/User/index.js: -------------------------------------------------------------------------------- 1 | import Presenter from './presenter'; 2 | 3 | export default Presenter; 4 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/i18n/services/getLanguage.js: -------------------------------------------------------------------------------- 1 | export const getLanguage = (locale) => locale.slice(0, 2); 2 | -------------------------------------------------------------------------------- /doc/specifications/pwa/assets/sequence.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/doc/specifications/pwa/assets/sequence.png -------------------------------------------------------------------------------- /src/frontend/web_application/src/components/PiBar/index.js: -------------------------------------------------------------------------------- 1 | import Presenter from './presenter'; 2 | 3 | export default Presenter; 4 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/image.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.svg' { 2 | const path: string; 3 | 4 | export default path; 5 | } 6 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/layouts/Settings/index.js: -------------------------------------------------------------------------------- 1 | import Presenter from './presenter'; 2 | 3 | export default Presenter; 4 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/Signin.tsx: -------------------------------------------------------------------------------- 1 | import { SigninForm } from '../modules/user'; 2 | 3 | export default SigninForm; 4 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/Signup.tsx: -------------------------------------------------------------------------------- 1 | import { SignupForm } from '../modules/user'; 2 | 3 | export default SignupForm; 4 | -------------------------------------------------------------------------------- /devtools/fixtures/vcard/rfc2426-4.vcard: -------------------------------------------------------------------------------- 1 | BEGIN:VCARD 2 | FN:Oscar del Pozo 3 | N:del Pozo Triscon;Oscar 4 | SORT-STRING:Pozo 5 | END:VCARD 6 | -------------------------------------------------------------------------------- /devtools/fixtures/vcard/rfc2426-5.vcard: -------------------------------------------------------------------------------- 1 | BEGIN:VCARD 2 | FN:Chistine d'Aboville 3 | N:d'Aboville;Christine 4 | SORT-STRING:Aboville 5 | END:VCARD -------------------------------------------------------------------------------- /devtools/storybook/stories/assets/example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/devtools/storybook/stories/assets/example.png -------------------------------------------------------------------------------- /src/backend/main/py.main/caliopen_main/participant/objects/__init__.py: -------------------------------------------------------------------------------- 1 | from .participant import Participant 2 | 3 | __all__ = ['Participant'] -------------------------------------------------------------------------------- /src/frontend/web_application/src/components/MessageDate/index.js: -------------------------------------------------------------------------------- 1 | import Presenter from './presenter'; 2 | 3 | export default Presenter; 4 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/layouts/SearchResults/index.js: -------------------------------------------------------------------------------- 1 | import Presenter from './presenter'; 2 | 3 | export default Presenter; 4 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/userNotify/index.js: -------------------------------------------------------------------------------- 1 | export * from './actions/notify'; 2 | export * from './hoc/withNotification'; 3 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/store/selectors/timeline.js: -------------------------------------------------------------------------------- 1 | export const timelineFilterSelector = (state) => state.message.timelineFilter; 2 | -------------------------------------------------------------------------------- /devtools/fixtures/vcard/rfc2426-2.vcard: -------------------------------------------------------------------------------- 1 | BEGIN:VCARD 2 | FN:Robert Pau Shou Chang 3 | N:Pau;Shou Chang;Robert 4 | SORT-STRING:Pau 5 | END:VCARD 6 | -------------------------------------------------------------------------------- /src/backend/main/py.main/caliopen_main/participant/parameters/__init__.py: -------------------------------------------------------------------------------- 1 | from .participant import Participant 2 | 3 | __all__ = ['Participant'] -------------------------------------------------------------------------------- /src/frontend/web_application/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/frontend/web_application/public/favicon.ico -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/tab/services/getTabUrl.js: -------------------------------------------------------------------------------- 1 | export const getTabUrl = ({ pathname, search }) => `${pathname}${search}`; 2 | -------------------------------------------------------------------------------- /src/backend/tools/py.doc/caliopen_api_doc/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | __version__ = '0.0.2' 4 | 5 | from .config import includeme 6 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/user/services/usernameNormalizer/index.js: -------------------------------------------------------------------------------- 1 | export const usernameNormalizer = (username) => username.trim(); 2 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/View/components/MessageItem/index.js: -------------------------------------------------------------------------------- 1 | import Presenter from './presenter'; 2 | 3 | export default Presenter; 4 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/services/capitalize.js: -------------------------------------------------------------------------------- 1 | export const capitalize = (str) => 2 | `${str.charAt(0).toUpperCase()}${str.slice(1)}`; 3 | -------------------------------------------------------------------------------- /doc/specifications/contact/index.md: -------------------------------------------------------------------------------- 1 | # Contacts 2 | 3 | ## discover contact informations 4 | 5 | ![discover](./assets/discover_contact_from_email.png) 6 | -------------------------------------------------------------------------------- /src/backend/main/py.main/setup.cfg: -------------------------------------------------------------------------------- 1 | [nosetests] 2 | match = ^test 3 | nocapture = 1 4 | cover-package = caliopen 5 | with-coverage = 1 6 | cover-erase = 1 7 | -------------------------------------------------------------------------------- /src/backend/tools/py.CLI/setup.cfg: -------------------------------------------------------------------------------- 1 | [nosetests] 2 | match = ^test 3 | nocapture = 1 4 | cover-package = caliop 5 | with-coverage = 1 6 | cover-erase = 1 7 | -------------------------------------------------------------------------------- /src/backend/tools/py.ML/setup.cfg: -------------------------------------------------------------------------------- 1 | [nosetests] 2 | match = ^test 3 | nocapture = 1 4 | cover-package = caliopen 5 | with-coverage = 1 6 | cover-erase = 1 7 | -------------------------------------------------------------------------------- /src/backend/tools/py.doc/setup.cfg: -------------------------------------------------------------------------------- 1 | [nosetests] 2 | match = ^test 3 | nocapture = 1 4 | cover-package = caliopen 5 | with-coverage = 1 6 | cover-erase = 1 7 | -------------------------------------------------------------------------------- /src/frontend/maintenance/src/assets/img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/frontend/maintenance/src/assets/img/favicon.ico -------------------------------------------------------------------------------- /src/frontend/maintenance/src/assets/img/timeline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/frontend/maintenance/src/assets/img/timeline.png -------------------------------------------------------------------------------- /src/frontend/web_application/src/components/FieldGroup/style.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/common'; 2 | 3 | .m-field-group { 4 | &__errors { 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/components/Label/style.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/common'; 2 | 3 | .m-label { 4 | color: $co-color__primary; 5 | } 6 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/pi/components/MultidimensionalPi/index.js: -------------------------------------------------------------------------------- 1 | import Presenter from './presenter'; 2 | 3 | export default Presenter; 4 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/search/components/SearchField/index.js: -------------------------------------------------------------------------------- 1 | import Presenter from './presenter'; 2 | 3 | export default Presenter; 4 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/Discussion/components/MessageList/index.js: -------------------------------------------------------------------------------- 1 | import Presenter from './presenter'; 2 | 3 | export default Presenter; 4 | -------------------------------------------------------------------------------- /devtools/fixtures/vcard/rfc2426-1.vcard: -------------------------------------------------------------------------------- 1 | BEGIN:VCARD 2 | FN:Rene van der Harten 3 | N:van der Harten;Rene;J.;Sir;R.D.O.N. 4 | SORT-STRING:Harten 5 | END:VCARD 6 | -------------------------------------------------------------------------------- /doc/architecture/assets/Stack Caliopen_2017-03-02.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/doc/architecture/assets/Stack Caliopen_2017-03-02.pdf -------------------------------------------------------------------------------- /doc/architecture/assets/docker-compose_2017-03-09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/doc/architecture/assets/docker-compose_2017-03-09.png -------------------------------------------------------------------------------- /src/backend/components/py.data/setup.cfg: -------------------------------------------------------------------------------- 1 | [nosetests] 2 | match = ^test 3 | nocapture = 1 4 | cover-package = caliopen 5 | with-coverage = 1 6 | cover-erase = 1 7 | -------------------------------------------------------------------------------- /src/backend/components/py.pi/setup.cfg: -------------------------------------------------------------------------------- 1 | [nosetests] 2 | match = ^test 3 | nocapture = 1 4 | cover-package = caliopen 5 | with-coverage = 1 6 | cover-erase = 1 7 | -------------------------------------------------------------------------------- /src/backend/components/py.tag/setup.cfg: -------------------------------------------------------------------------------- 1 | [nosetests] 2 | match = ^test 3 | nocapture = 1 4 | cover-package = caliopen 5 | with-coverage = 1 6 | cover-erase = 1 7 | -------------------------------------------------------------------------------- /src/backend/main/py.storage/setup.cfg: -------------------------------------------------------------------------------- 1 | [nosetests] 2 | match = ^test 3 | nocapture = 1 4 | cover-package = caliopen 5 | with-coverage = 1 6 | cover-erase = 1 7 | -------------------------------------------------------------------------------- /src/backend/tools/py.migrate/setup.cfg: -------------------------------------------------------------------------------- 1 | [nosetests] 2 | match = ^test 3 | nocapture = 1 4 | cover-package = caliopen 5 | with-coverage = 1 6 | cover-erase = 1 7 | -------------------------------------------------------------------------------- /src/frontend/web_application/assets/caliopen-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/frontend/web_application/assets/caliopen-icon.png -------------------------------------------------------------------------------- /src/frontend/web_application/assets/caliopen-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/frontend/web_application/assets/caliopen-logo.png -------------------------------------------------------------------------------- /src/frontend/web_application/src/components/Callout/style.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/object/o-callout'; 2 | 3 | .m-callout { 4 | @include o-callout; 5 | } 6 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/layouts/User/styles.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/common'; 2 | 3 | .l-user { 4 | background-color: $co-color__fg__back; 5 | } 6 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/publicKey/index.js: -------------------------------------------------------------------------------- 1 | export * from './actions/updatePublicKey'; 2 | export * from './actions/saveUserPublicKeyAction'; 3 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/styles/object/o-pi-border.scss: -------------------------------------------------------------------------------- 1 | @import '../common'; 2 | 3 | $pi-border__size: 3px; 4 | $pi-border__color: $co-color__primary; 5 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/styles/vendor/bootstrap_font-awesome.scss: -------------------------------------------------------------------------------- 1 | $fa-font-path: '~font-awesome/fonts'; 2 | @import '~font-awesome/scss/font-awesome'; 3 | -------------------------------------------------------------------------------- /devtools/fixtures/vcard/rfc2425-1.vcard: -------------------------------------------------------------------------------- 1 | cn:Babs Jensen 2 | cn:Barbara J Jensen 3 | sn:Jensen 4 | email:babs@umich.edu 5 | phone:+1 313 747-4454 6 | x-id:1234567890 7 | -------------------------------------------------------------------------------- /doc/architecture/assets/stack_frontend_dev_2017-03-09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/doc/architecture/assets/stack_frontend_dev_2017-03-09.png -------------------------------------------------------------------------------- /src/backend/defs/notifiers/templates/assets/search_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/backend/defs/notifiers/templates/assets/search_en.png -------------------------------------------------------------------------------- /src/backend/defs/notifiers/templates/assets/search_fr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/backend/defs/notifiers/templates/assets/search_fr.png -------------------------------------------------------------------------------- /src/backend/main/py.main/caliopen_main/tests/fixtures/vcard/rfc2426-3.vcard: -------------------------------------------------------------------------------- 1 | BEGIN:VCARD 2 | FN:Osamu Koura 3 | N:Koura;Osamu 4 | SORT-STRING:Koura 5 | END:VCARD 6 | -------------------------------------------------------------------------------- /src/frontend/maintenance/src/assets/css/OpenSans-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/frontend/maintenance/src/assets/css/OpenSans-Bold.ttf -------------------------------------------------------------------------------- /src/frontend/maintenance/src/assets/img/device-1-new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/frontend/maintenance/src/assets/img/device-1-new.png -------------------------------------------------------------------------------- /src/frontend/maintenance/src/assets/img/device-2-new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/frontend/maintenance/src/assets/img/device-2-new.png -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/device/services/status.js: -------------------------------------------------------------------------------- 1 | export const STATUS_VERIFIED = 'verified'; 2 | export const STATUS_UNVERIFIED = 'unverified'; 3 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/remoteIdentity/components/ProviderIcon/style.scss: -------------------------------------------------------------------------------- 1 | .m-provider-icon { 2 | &--normal { 3 | height: 1rem; 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/remoteIdentity/selectors/identityStateSelector.js: -------------------------------------------------------------------------------- 1 | export const identityStateSelector = (state) => state.remoteIdentity; 2 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/NewDraft/components/DraftMessage/draft-message-placeholder.scss: -------------------------------------------------------------------------------- 1 | .m-draft-message-placeholder { 2 | height: 3.438rem; 3 | } 4 | -------------------------------------------------------------------------------- /doc/specifications/discussions/assets/delete_discussion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/doc/specifications/discussions/assets/delete_discussion.png -------------------------------------------------------------------------------- /src/backend/defs/notifiers/templates/assets/compose_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/backend/defs/notifiers/templates/assets/compose_en.png -------------------------------------------------------------------------------- /src/backend/defs/notifiers/templates/assets/compose_fr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/backend/defs/notifiers/templates/assets/compose_fr.png -------------------------------------------------------------------------------- /src/backend/defs/notifiers/templates/assets/identity_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/backend/defs/notifiers/templates/assets/identity_en.png -------------------------------------------------------------------------------- /src/backend/defs/notifiers/templates/assets/identity_fr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/backend/defs/notifiers/templates/assets/identity_fr.png -------------------------------------------------------------------------------- /src/backend/defs/notifiers/templates/assets/participants.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/backend/defs/notifiers/templates/assets/participants.png -------------------------------------------------------------------------------- /src/frontend/maintenance/src/assets/css/OpenSans-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/frontend/maintenance/src/assets/css/OpenSans-Regular.ttf -------------------------------------------------------------------------------- /src/frontend/web_application/src/layouts/Settings/style.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/common'; 2 | 3 | .l-settings { 4 | background-color: $co-color__fg__back; 5 | } 6 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/RemoteIdentitySettings/components/AuthButton/style.scss: -------------------------------------------------------------------------------- 1 | .m-oauth-button { 2 | &__logo { 3 | height: 2rem; 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/contact/ContactBook/components/ImportContact/index.js: -------------------------------------------------------------------------------- 1 | import Presenter from './presenter'; 2 | 3 | export default Presenter; 4 | -------------------------------------------------------------------------------- /doc/specifications/notification/frontend.md: -------------------------------------------------------------------------------- 1 | # Notifications 2 | 3 | ## Frontend 4 | 5 | Sequences schema 6 | 7 | ![client sequences](./assets/client-message-sequence.png) 8 | -------------------------------------------------------------------------------- /src/backend/components/py.pgp/MANIFEST.in: -------------------------------------------------------------------------------- 1 | include *.txt *.ini *.cfg *.rst 2 | recursive-include caliop *.ico *.png *.css *.gif *.jpg *.pt *.txt *.mak *.mako *.js *.html *.xml 3 | -------------------------------------------------------------------------------- /src/backend/components/py.pi/README.rst: -------------------------------------------------------------------------------- 1 | Caliopen PI package 2 | ============= 3 | 4 | This package contain all logic related to privacy index used in Caliopen platform 5 | 6 | -------------------------------------------------------------------------------- /src/backend/defs/notifiers/templates/assets/ext_account_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/backend/defs/notifiers/templates/assets/ext_account_en.png -------------------------------------------------------------------------------- /src/backend/defs/notifiers/templates/assets/ext_account_fr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/backend/defs/notifiers/templates/assets/ext_account_fr.png -------------------------------------------------------------------------------- /src/backend/defs/notifiers/templates/assets/new_contact_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/backend/defs/notifiers/templates/assets/new_contact_en.png -------------------------------------------------------------------------------- /src/backend/defs/notifiers/templates/assets/new_contact_fr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/backend/defs/notifiers/templates/assets/new_contact_fr.png -------------------------------------------------------------------------------- /src/backend/interfaces/REST/py.server/CHANGES.rst: -------------------------------------------------------------------------------- 1 | 0.0.1 2 | ----- 3 | 4 | - Initial version 5 | 6 | 0.0.2 7 | ----- 8 | - routes « threads » renamed to « discussions » 9 | -------------------------------------------------------------------------------- /src/backend/main/py.main/caliopen_main/tests/fixtures/vcard/rfc2426-4.vcard: -------------------------------------------------------------------------------- 1 | BEGIN:VCARD 2 | FN:Oscar del Pozo 3 | N:del Pozo Triscon;Oscar 4 | SORT-STRING:Pozo 5 | END:VCARD 6 | -------------------------------------------------------------------------------- /src/frontend/maintenance/src/assets/css/OpenSans-ExtraBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/frontend/maintenance/src/assets/css/OpenSans-ExtraBold.ttf -------------------------------------------------------------------------------- /src/frontend/maintenance/src/assets/css/OpenSans-Semibold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/frontend/maintenance/src/assets/css/OpenSans-Semibold.ttf -------------------------------------------------------------------------------- /src/frontend/maintenance/src/assets/img/caliopen_capture1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/frontend/maintenance/src/assets/img/caliopen_capture1.jpg -------------------------------------------------------------------------------- /src/frontend/maintenance/src/assets/img/caliopen_capture2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/frontend/maintenance/src/assets/img/caliopen_capture2.jpg -------------------------------------------------------------------------------- /src/frontend/maintenance/src/assets/img/caliopen_capture3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/frontend/maintenance/src/assets/img/caliopen_capture3.jpg -------------------------------------------------------------------------------- /src/frontend/web_application/server/error/index.js: -------------------------------------------------------------------------------- 1 | import catchError from './middlewares/catch-error'; 2 | 3 | export default (app) => { 4 | app.use(catchError); 5 | }; 6 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/contact/ContactBook/components/ImportContactForm/index.jsx: -------------------------------------------------------------------------------- 1 | import Presenter from './presenter'; 2 | 3 | export default Presenter; 4 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/styles/common.scss: -------------------------------------------------------------------------------- 1 | // --- Config --- 2 | @import 'config/config'; 3 | 4 | // @import 'config/theme/dark'; 5 | @import 'config/theme/light'; 6 | -------------------------------------------------------------------------------- /doc/specifications/attachments/assets/management_2017-06-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/doc/specifications/attachments/assets/management_2017-06-01.png -------------------------------------------------------------------------------- /doc/specifications/contact/assets/discover_contact_from_email.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/doc/specifications/contact/assets/discover_contact_from_email.png -------------------------------------------------------------------------------- /src/backend/defs/notifiers/templates/assets/compose_button_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/backend/defs/notifiers/templates/assets/compose_button_en.png -------------------------------------------------------------------------------- /src/backend/defs/notifiers/templates/assets/compose_button_fr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/backend/defs/notifiers/templates/assets/compose_button_fr.png -------------------------------------------------------------------------------- /src/backend/main/py.main/caliopen_main/tests/fixtures/vcard/rfc2426-2.vcard: -------------------------------------------------------------------------------- 1 | BEGIN:VCARD 2 | FN:Robert Pau Shou Chang 3 | N:Pau;Shou Chang;Robert 4 | SORT-STRING:Pau 5 | END:VCARD 6 | -------------------------------------------------------------------------------- /src/backend/main/py.main/caliopen_main/tests/fixtures/vcard/rfc2426-5.vcard: -------------------------------------------------------------------------------- 1 | BEGIN:VCARD 2 | FN:Chistine d'Aboville 3 | N:d'Aboville;Christine 4 | SORT-STRING:Aboville 5 | END:VCARD -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/contact/services/identityTypes.js: -------------------------------------------------------------------------------- 1 | export const IDENTITY_TYPE_TWITTER = 'twitter'; 2 | export const IDENTITY_TYPE_MASTODON = 'mastodon'; 3 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/services/openpgp-manager/index.ts: -------------------------------------------------------------------------------- 1 | export * from './errors'; 2 | export default () => import(/* webpackChunkName: "openpgp-wrapper" */ './api'); 3 | -------------------------------------------------------------------------------- /devtools/storybook/.storybook/addons.js: -------------------------------------------------------------------------------- 1 | import '@kadira/storybook/addons'; 2 | import '@kadira/storybook-addon-knobs/register'; 3 | import 'react-storybook-addon-backgrounds/register'; 4 | -------------------------------------------------------------------------------- /doc/specifications/notification/assets/client-message-sequence.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/doc/specifications/notification/assets/client-message-sequence.png -------------------------------------------------------------------------------- /src/backend/components/py.tag/README.rst: -------------------------------------------------------------------------------- 1 | Caliopen Tagger package 2 | ======================= 3 | 4 | This package contain all logic related to the tagger in Caliopen platform 5 | 6 | -------------------------------------------------------------------------------- /src/backend/main/py.storage/caliopen_storage/core/registry.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """Caliop core registry.""" 3 | 4 | 5 | core_registry = {} # registry for all core classes 6 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/styles/vendor/bootstrap_foundation-sites.scss: -------------------------------------------------------------------------------- 1 | @import 'foundation-sites/config'; 2 | @import 'foundation-sites/flex-grid'; 3 | @import 'foundation'; 4 | -------------------------------------------------------------------------------- /.git-crypt/keys/default/0/3A1172187EF7406FCBCECFA60E68C4F85D04D8FC.gpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/.git-crypt/keys/default/0/3A1172187EF7406FCBCECFA60E68C4F85D04D8FC.gpg -------------------------------------------------------------------------------- /.git-crypt/keys/default/0/A08EA82ED095FCD8575AB3742DC613553716A878.gpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/.git-crypt/keys/default/0/A08EA82ED095FCD8575AB3742DC613553716A878.gpg -------------------------------------------------------------------------------- /.git-crypt/keys/default/0/E6711893CE02FDEEA5B1F79FF3D83146E5111526.gpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/.git-crypt/keys/default/0/E6711893CE02FDEEA5B1F79FF3D83146E5111526.gpg -------------------------------------------------------------------------------- /.git-crypt/keys/default/0/EA440246DFB690B5B1FB4032CE011C4615DB040A.gpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/.git-crypt/keys/default/0/EA440246DFB690B5B1FB4032CE011C4615DB040A.gpg -------------------------------------------------------------------------------- /devtools/storybook/stories/presenters/index.js: -------------------------------------------------------------------------------- 1 | import Code from './Code'; 2 | import ComponentWrapper from './ComponentWrapper'; 3 | 4 | export { 5 | Code, 6 | ComponentWrapper, 7 | }; 8 | -------------------------------------------------------------------------------- /src/backend/tools/py.doc/caliopen_api_doc/swagger-ui/images/expand.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/backend/tools/py.doc/caliopen_api_doc/swagger-ui/images/expand.gif -------------------------------------------------------------------------------- /src/frontend/web_application/src/fonts/OpenSans/Bold/OpenSans-Bold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/frontend/web_application/src/fonts/OpenSans/Bold/OpenSans-Bold.eot -------------------------------------------------------------------------------- /src/frontend/web_application/src/fonts/OpenSans/Bold/OpenSans-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/frontend/web_application/src/fonts/OpenSans/Bold/OpenSans-Bold.ttf -------------------------------------------------------------------------------- /src/frontend/web_application/src/layouts/SearchResults/style.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/common'; 2 | 3 | .l-search-results { 4 | &__panel { 5 | padding-top: $co-margin; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/file/index.js: -------------------------------------------------------------------------------- 1 | export * from './services'; 2 | export * from './actions/deleteDraftAttachment'; 3 | export * from './actions/uploadDraftAttachments'; 4 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/RemoteIdentitySettings/components/RemoteIdentityDetails/style.scss: -------------------------------------------------------------------------------- 1 | .m-remote-identity { 2 | &__provider-logo { 3 | height: 1rem; 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/styles/util/breakpoint.scss: -------------------------------------------------------------------------------- 1 | @import '../vendor/bootstrap_foundation-sites'; 2 | 3 | // path related to foundation-sites 4 | // @import 'util/breakpoint'; 5 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/styles/util/flex-grid.scss: -------------------------------------------------------------------------------- 1 | @import '../vendor/bootstrap_foundation-sites'; 2 | 3 | // path related to foundation-sites 4 | // @import 'grid/flex-grid'; 5 | -------------------------------------------------------------------------------- /doc/specifications/message/assets/message-create-save-send-20170202.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/doc/specifications/message/assets/message-create-save-send-20170202.png -------------------------------------------------------------------------------- /src/backend/main/py.main/caliopen_main/tests/fixtures/vcard/rfc2426-1.vcard: -------------------------------------------------------------------------------- 1 | BEGIN:VCARD 2 | FN:Rene van der Harten 3 | N:van der Harten;Rene;J.;Sir;R.D.O.N. 4 | SORT-STRING:Harten 5 | END:VCARD 6 | -------------------------------------------------------------------------------- /src/backend/tools/py.doc/caliopen_api_doc/swagger-ui/fonts/DroidSans.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/backend/tools/py.doc/caliopen_api_doc/swagger-ui/fonts/DroidSans.ttf -------------------------------------------------------------------------------- /src/backend/tools/py.doc/caliopen_api_doc/swagger-ui/images/caliopen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/backend/tools/py.doc/caliopen_api_doc/swagger-ui/images/caliopen.png -------------------------------------------------------------------------------- /src/backend/tools/py.doc/caliopen_api_doc/swagger-ui/images/collapse.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/backend/tools/py.doc/caliopen_api_doc/swagger-ui/images/collapse.gif -------------------------------------------------------------------------------- /src/backend/tools/py.doc/caliopen_api_doc/swagger-ui/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/backend/tools/py.doc/caliopen_api_doc/swagger-ui/images/favicon.ico -------------------------------------------------------------------------------- /src/backend/tools/py.doc/caliopen_api_doc/swagger-ui/images/throbber.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/backend/tools/py.doc/caliopen_api_doc/swagger-ui/images/throbber.gif -------------------------------------------------------------------------------- /src/frontend/maintenance/src/assets/img/cropped-caliopen-logo-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/frontend/maintenance/src/assets/img/cropped-caliopen-logo-32x32.png -------------------------------------------------------------------------------- /src/frontend/web_application/src/fonts/OpenSans/Bold/OpenSans-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/frontend/web_application/src/fonts/OpenSans/Bold/OpenSans-Bold.woff -------------------------------------------------------------------------------- /src/frontend/web_application/src/fonts/OpenSans/Bold/OpenSans-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/frontend/web_application/src/fonts/OpenSans/Bold/OpenSans-Bold.woff2 -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/user/selectors/userSelector.ts: -------------------------------------------------------------------------------- 1 | import { RootState } from 'src/store/reducer'; 2 | 3 | export const userSelector = (state: RootState) => state.user.user; 4 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/ForgotPassword/index.js: -------------------------------------------------------------------------------- 1 | import { withI18n } from '@lingui/react'; 2 | import Presenter from './presenter'; 3 | 4 | export default withI18n()(Presenter); 5 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/ResetPassword/index.js: -------------------------------------------------------------------------------- 1 | import { withI18n } from '@lingui/react'; 2 | import Presenter from './presenter'; 3 | 4 | export default withI18n()(Presenter); 5 | -------------------------------------------------------------------------------- /src/backend/main/py.main/caliopen_main/tests/fixtures/vcard/rfc2425-1.vcard: -------------------------------------------------------------------------------- 1 | cn:Babs Jensen 2 | cn:Barbara J Jensen 3 | sn:Jensen 4 | email:babs@umich.edu 5 | phone:+1 313 747-4454 6 | x-id:1234567890 7 | -------------------------------------------------------------------------------- /src/backend/tools/py.doc/caliopen_api_doc/swagger-ui/images/logo_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/backend/tools/py.doc/caliopen_api_doc/swagger-ui/images/logo_small.png -------------------------------------------------------------------------------- /src/backend/tools/py.doc/caliopen_api_doc/swagger-ui/images/wordnik_api.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/backend/tools/py.doc/caliopen_api_doc/swagger-ui/images/wordnik_api.png -------------------------------------------------------------------------------- /src/frontend/maintenance/src/assets/img/cropped-caliopen-logo-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/frontend/maintenance/src/assets/img/cropped-caliopen-logo-180x180.png -------------------------------------------------------------------------------- /src/frontend/maintenance/src/assets/img/cropped-caliopen-logo-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/frontend/maintenance/src/assets/img/cropped-caliopen-logo-192x192.png -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/routing/contexts/RoutingContext.js: -------------------------------------------------------------------------------- 1 | import { createContext } from 'react'; 2 | 3 | export const RoutingContext = createContext({ 4 | routes: [], 5 | }); 6 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/scroll/services/getTop.js: -------------------------------------------------------------------------------- 1 | export const HEADER_HEIGHT = 120; 2 | export const getTop = (domNode) => 3 | domNode.getBoundingClientRect().top - HEADER_HEIGHT; 4 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/SettingsSignatures/index.jsx: -------------------------------------------------------------------------------- 1 | import { withI18n } from '@lingui/react'; 2 | import Presenter from './presenter'; 3 | 4 | export default withI18n()(Presenter); 5 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/View/style.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/common'; 2 | 3 | .s-view { 4 | &__message { 5 | border-top: 2px solid $co-color__fg__border--higher; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /.git-crypt/.gitattributes: -------------------------------------------------------------------------------- 1 | # Do not edit this file. To specify the files to encrypt, create your own 2 | # .gitattributes file in the directory where your files are. 3 | * !filter !diff 4 | *.gpg binary 5 | -------------------------------------------------------------------------------- /doc/specifications/email-protocol/assets/email-delivery-inbound_20161229.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/doc/specifications/email-protocol/assets/email-delivery-inbound_20161229.pdf -------------------------------------------------------------------------------- /doc/specifications/email-protocol/assets/email-inbound-delivery_20170104.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/doc/specifications/email-protocol/assets/email-inbound-delivery_20170104.png -------------------------------------------------------------------------------- /doc/specifications/message/assets/message_discussion_association-20190327.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/doc/specifications/message/assets/message_discussion_association-20190327.png -------------------------------------------------------------------------------- /src/backend/tools/py.doc/caliopen_api_doc/swagger-ui/fonts/DroidSans-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/backend/tools/py.doc/caliopen_api_doc/swagger-ui/fonts/DroidSans-Bold.ttf -------------------------------------------------------------------------------- /src/backend/tools/py.doc/caliopen_api_doc/swagger-ui/images/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/backend/tools/py.doc/caliopen_api_doc/swagger-ui/images/favicon-16x16.png -------------------------------------------------------------------------------- /src/backend/tools/py.doc/caliopen_api_doc/swagger-ui/images/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/backend/tools/py.doc/caliopen_api_doc/swagger-ui/images/favicon-32x32.png -------------------------------------------------------------------------------- /src/backend/tools/py.doc/caliopen_api_doc/swagger-ui/images/pet_store_api.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/backend/tools/py.doc/caliopen_api_doc/swagger-ui/images/pet_store_api.png -------------------------------------------------------------------------------- /src/frontend/web_application/src/components/PlaceholderList/index.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/common'; 2 | 3 | .m-placeholder-list__item { 4 | border-top: 2px solid $co-color__fg__border--higher; 5 | } 6 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/fonts/OpenSans/Regular/OpenSans-Regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/frontend/web_application/src/fonts/OpenSans/Regular/OpenSans-Regular.eot -------------------------------------------------------------------------------- /src/frontend/web_application/src/fonts/OpenSans/Regular/OpenSans-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/frontend/web_application/src/fonts/OpenSans/Regular/OpenSans-Regular.ttf -------------------------------------------------------------------------------- /src/frontend/web_application/src/fonts/OpenSans/Regular/OpenSans-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/frontend/web_application/src/fonts/OpenSans/Regular/OpenSans-Regular.woff -------------------------------------------------------------------------------- /src/backend/interfaces/REST/py.server/caliopen_api/user/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import absolute_import, print_function, unicode_literals 3 | 4 | from .config import includeme 5 | -------------------------------------------------------------------------------- /src/backend/tools/py.doc/caliopen_api_doc/swagger-ui/images/explorer_icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/backend/tools/py.doc/caliopen_api_doc/swagger-ui/images/explorer_icons.png -------------------------------------------------------------------------------- /src/frontend/web_application/src/components/Fieldset/style.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/common'; 2 | 3 | .m-fieldset { 4 | &__legend { 5 | margin-bottom: map_get($co-form__spacing, 'small'); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/fonts/OpenSans/Regular/OpenSans-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/frontend/web_application/src/fonts/OpenSans/Regular/OpenSans-Regular.woff2 -------------------------------------------------------------------------------- /src/frontend/web_application/src/fonts/OpenSans/Semibold/OpenSans-Semibold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/frontend/web_application/src/fonts/OpenSans/Semibold/OpenSans-Semibold.eot -------------------------------------------------------------------------------- /src/frontend/web_application/src/fonts/OpenSans/Semibold/OpenSans-Semibold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/frontend/web_application/src/fonts/OpenSans/Semibold/OpenSans-Semibold.ttf -------------------------------------------------------------------------------- /src/frontend/web_application/src/fonts/OpenSans/Semibold/OpenSans-Semibold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/frontend/web_application/src/fonts/OpenSans/Semibold/OpenSans-Semibold.woff -------------------------------------------------------------------------------- /src/frontend/web_application/src/fonts/OpenSans/Semibold/OpenSans-Semibold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/frontend/web_application/src/fonts/OpenSans/Semibold/OpenSans-Semibold.woff2 -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/view/index.js: -------------------------------------------------------------------------------- 1 | export * from './actions/requestMessages'; 2 | export { default as WithViewModel } from './components/WithViewModel'; 3 | export * from './models/View'; 4 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/services/api-location/index.js: -------------------------------------------------------------------------------- 1 | import getClient from '../api-client'; 2 | 3 | export default function fetchLocation(location) { 4 | return getClient().get(location); 5 | } 6 | -------------------------------------------------------------------------------- /src/backend/interfaces/REST/py.server/caliopen_api/discussion/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import absolute_import, print_function, unicode_literals 3 | 4 | from .config import includeme 5 | -------------------------------------------------------------------------------- /src/backend/interfaces/REST/py.server/caliopen_api/message/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import absolute_import, print_function, unicode_literals 3 | 4 | from .config import includeme 5 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/layouts/Page/components/Navbar/components/ApplicationTab/application-tab.scss: -------------------------------------------------------------------------------- 1 | .m-application-tab { 2 | width: 3.75rem; 3 | font-size: 1.25rem; 4 | text-align: center; 5 | } 6 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/draftMessage/components/Recipient/index.js: -------------------------------------------------------------------------------- 1 | import { withI18n } from '@lingui/react'; 2 | import Presenter from './presenter'; 3 | 4 | export default withI18n()(Presenter); 5 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/i18n/index.js: -------------------------------------------------------------------------------- 1 | export { default as I18nLoader } from './components/I18nLoader'; 2 | export * from './services/getBestLocale'; 3 | export * from './services/getUserLocales'; 4 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/user/services/signup/index.js: -------------------------------------------------------------------------------- 1 | import getClient from '../../../../services/api-client'; 2 | 3 | export const signup = (params) => getClient().post('/auth/signup', params); 4 | -------------------------------------------------------------------------------- /doc/specifications/email-protocol/assets/email-inbound-delivery-poc_20161229_act.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/doc/specifications/email-protocol/assets/email-inbound-delivery-poc_20161229_act.pdf -------------------------------------------------------------------------------- /doc/specifications/email-protocol/assets/email-inbound-delivery-poc_20161229_seq.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/doc/specifications/email-protocol/assets/email-inbound-delivery-poc_20161229_seq.pdf -------------------------------------------------------------------------------- /doc/specifications/email-protocol/assets/smtp-delivery-inbound-closeup-20170101.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/doc/specifications/email-protocol/assets/smtp-delivery-inbound-closeup-20170101.png -------------------------------------------------------------------------------- /doc/specifications/user-and-device-identification/assets/authenticate_new_device.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/doc/specifications/user-and-device-identification/assets/authenticate_new_device.png -------------------------------------------------------------------------------- /doc/specifications/user-and-device-identification/assets/create_user_and_device.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/doc/specifications/user-and-device-identification/assets/create_user_and_device.png -------------------------------------------------------------------------------- /doc/specifications/user-and-device-identification/assets/user_update_credential.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/doc/specifications/user-and-device-identification/assets/user_update_credential.png -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/scroll/services/getViewPortTop.js: -------------------------------------------------------------------------------- 1 | import { getTop } from './getTop'; 2 | 3 | export const getViewPortTop = (domNode, target = window) => 4 | getTop(domNode) + target.scrollY; 5 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/user/components/UserMenu/next-feature-button.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../styles/common'; 2 | 3 | .m-next-feature-button { 4 | background-color: $co-color__next-feature; 5 | } 6 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/SettingsSignatures/components/SignatureForm/index.jsx: -------------------------------------------------------------------------------- 1 | import { withI18n } from '@lingui/react'; 2 | import Presenter from './presenter'; 3 | 4 | export default withI18n()(Presenter); 5 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/contact/components/AddressDetails/style.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../styles/common'; 2 | 3 | .m-address-details { 4 | &__postal-address { 5 | display: inline-block; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/backend/defs/rest-api/objects/Email.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | type: object 3 | properties: 4 | "$ref": NewEmail.yaml#/properties 5 | email_id: 6 | type: string 7 | required: 8 | - address 9 | additionalProperties: false 10 | -------------------------------------------------------------------------------- /src/backend/defs/rest-api/objects/ExternalReferences.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | type: object 3 | properties: 4 | ancestors_id: 5 | type: string 6 | message_id: 7 | type: string 8 | parent_id: 9 | type: string 10 | 11 | -------------------------------------------------------------------------------- /src/backend/defs/rest-api/objects/IM.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | type: object 3 | properties: 4 | "$ref": NewIM.yaml#/properties 5 | im_id: 6 | type: string 7 | required: 8 | - address 9 | additionalProperties: false 10 | 11 | -------------------------------------------------------------------------------- /src/backend/main/py.main/caliopen_main/pi/__init__.py: -------------------------------------------------------------------------------- 1 | 2 | from .parameters import PIParameter 3 | from .objects import PIModel, PIIndexModel, PIObject 4 | 5 | __all__ = ['PIParameter', 'PIModel', 'PIIndexModel', 'PIObject'] 6 | -------------------------------------------------------------------------------- /src/backend/tools/py.migrate/README.rst: -------------------------------------------------------------------------------- 1 | caliopen.migrate 2 | ============ 3 | 4 | Caliopen migration utilities 5 | ============================ 6 | 7 | Python package for utilities related to data migration in Caliopen. 8 | 9 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/components/CheckboxFieldGroup/style.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/common'; 2 | 3 | .m-checkbox-field-group { 4 | &__label { 5 | padding-left: map_get($co-form__spacing, 'small'); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/settings/selectors/settings.ts: -------------------------------------------------------------------------------- 1 | import { RootState } from 'src/store/reducer'; 2 | 3 | export const settingsSelector = (state: RootState): RootState['settings'] => 4 | state.settings; 5 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/ApplicationSettings/components/ContactSettings/index.js: -------------------------------------------------------------------------------- 1 | import { withI18n } from '@lingui/react'; 2 | import Presenter from './presenter'; 3 | 4 | export default withI18n()(Presenter); 5 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/ApplicationSettings/components/InterfaceSettings/index.js: -------------------------------------------------------------------------------- 1 | import { withI18n } from '@lingui/react'; 2 | import Presenter from './presenter'; 3 | 4 | export default withI18n()(Presenter); 5 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/ApplicationSettings/components/MessageSettings/index.js: -------------------------------------------------------------------------------- 1 | import { withI18n } from '@lingui/react'; 2 | import Presenter from './presenter'; 3 | 4 | export default withI18n()(Presenter); 5 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/ForgotPassword/components/ForgotPasswordForm/index.jsx: -------------------------------------------------------------------------------- 1 | import { withI18n } from '@lingui/react'; 2 | 3 | import Presenter from './presenter'; 4 | 5 | export default withI18n()(Presenter); 6 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/ResetPassword/components/ResetPasswordForm/index.jsx: -------------------------------------------------------------------------------- 1 | import { withI18n } from '@lingui/react'; 2 | 3 | import Presenter from './presenter'; 4 | 5 | export default withI18n()(Presenter); 6 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/services/importance-level/index.js: -------------------------------------------------------------------------------- 1 | export const IL_MIN = -10; 2 | export const IL_MAX = 10; 3 | 4 | export const importanceLevelHeader = { 5 | 'X-Caliopen-IL': `${IL_MIN};${IL_MAX}`, 6 | }; 7 | -------------------------------------------------------------------------------- /doc/specifications/user-and-device-identification/assets/user_and_device_authentication.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/doc/specifications/user-and-device-identification/assets/user_and_device_authentication.png -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/message/services/getLastMessageFromArray.js: -------------------------------------------------------------------------------- 1 | import { sortMessages } from './sortMessages'; 2 | 3 | export const getLastMessageFromArray = (messages) => 4 | sortMessages(messages, true)[0]; 5 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/pwa/index.js: -------------------------------------------------------------------------------- 1 | export { default as InstallPromptProvider } from './components/InstallPromptProvider'; 2 | export { default as InstallPromptConsumer } from './components/InstallPromptConsumer'; 3 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/ApplicationSettings/components/NotificationSettings/index.js: -------------------------------------------------------------------------------- 1 | import { withI18n } from '@lingui/react'; 2 | import Presenter from './presenter'; 3 | 4 | export default withI18n()(Presenter); 5 | -------------------------------------------------------------------------------- /devtools/fixtures/raw_inbound_msg.cql: -------------------------------------------------------------------------------- 1 | USE caliopen; 2 | 3 | DROP TABLE IF EXISTS raw_inbound_msg; 4 | 5 | CREATE TABLE raw_inbound_message ( 6 | raw_msg_id uuid, 7 | data blob, 8 | PRIMARY KEY(raw_msg_id) 9 | ); 10 | -------------------------------------------------------------------------------- /src/backend/main/py.main/caliopen_main/contact/parsers/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """Caliopen contact format parsers.""" 3 | 4 | from .vcard import VcardContact, VcardParser 5 | 6 | __all__ = ['VcardParser', 'VcardContact'] 7 | -------------------------------------------------------------------------------- /src/backend/main/py.main/caliopen_main/protocol/core/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import absolute_import, print_function, unicode_literals 3 | 4 | from .provider import Provider 5 | 6 | __all__ = [ 'Provider' ] 7 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/components/Confirm/style.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/common'; 2 | 3 | .m-confirm { 4 | display: inline-block; 5 | 6 | &__actions { 7 | padding-top: $co-component__spacing; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/components/MenuBar/style.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/common'; 2 | 3 | .m-menu-bar { 4 | background: $co-color__fg__back; 5 | 6 | &__navlist { 7 | padding-left: $co-margin; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/pi/components/BackgroundImage/assets/co_bg_secure.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaliOpen/Caliopen/HEAD/src/frontend/web_application/src/modules/pi/components/BackgroundImage/assets/co_bg_secure.jpg -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/ApplicationSettings/components/DesktopNotificationSettings/index.js: -------------------------------------------------------------------------------- 1 | import { withI18n } from '@lingui/react'; 2 | import Presenter from './presenter'; 3 | 4 | export default withI18n()(Presenter); 5 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/store/selectors/settings.js: -------------------------------------------------------------------------------- 1 | // @deprecated cf. settings module 2 | export const settingsStateSelector = (state) => state.settings; 3 | export const settingsSelector = (state) => state.settings.settings; 4 | -------------------------------------------------------------------------------- /src/backend/defs/rest-api/objects/PIMessage.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | type: object 3 | properties: 4 | content: 5 | type: integer 6 | transport: 7 | type: integer 8 | social: 9 | type: integer 10 | additionalProperties: false 11 | -------------------------------------------------------------------------------- /src/backend/main/py.main/caliopen_main/protocol/store/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import absolute_import, print_function, unicode_literals 3 | 4 | from .provider import Provider 5 | 6 | __all__ = [ 'Provider' ] 7 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/control/components/ComposeContactButton/index.js: -------------------------------------------------------------------------------- 1 | import Presenter from './presenter'; 2 | import { withNotification } from '../../../userNotify'; 3 | 4 | export default withNotification()(Presenter); 5 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/routing/services/url/index.js: -------------------------------------------------------------------------------- 1 | // FIXME or remove 2 | export { default as URLSearchParams } from './CrappyURLSearchParams'; 3 | export * from './buildURL'; 4 | export * from './QueryStringSerializer'; 5 | -------------------------------------------------------------------------------- /src/backend/defs/rest-api/objects/PostalAddress.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | type: object 3 | properties: 4 | "$ref": NewPostalAddress.yaml#/properties 5 | address_id: 6 | type: string 7 | required: 8 | - city 9 | additionalProperties: false 10 | 11 | -------------------------------------------------------------------------------- /src/backend/main/py.main/caliopen_main/discussion/core/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import absolute_import, print_function, unicode_literals 3 | 4 | from .discussion import Discussion 5 | 6 | __all__ = ['Discussion'] 7 | -------------------------------------------------------------------------------- /src/backend/main/py.main/caliopen_main/discussion/objects/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import absolute_import, print_function, unicode_literals 3 | 4 | from .discussion import Discussion 5 | 6 | __all__ = {'Discussion'} 7 | -------------------------------------------------------------------------------- /src/backend/main/py.main/caliopen_main/message/core/__init__.py: -------------------------------------------------------------------------------- 1 | from .raw import RawMessage, UserRawLookup 2 | from .external_references import MessageExternalRefLookup 3 | 4 | __all__ = ['RawMessage', 'UserRawLookup', 'MessageExternalRefLookup'] 5 | -------------------------------------------------------------------------------- /src/backend/main/py.storage/caliopen_storage/core/__init__.py: -------------------------------------------------------------------------------- 1 | from .registry import core_registry 2 | from .base import BaseCore 3 | from .mixin import MixinCoreRelation 4 | 5 | __all__ = [ 6 | 'core_registry', 'BaseCore', 'MixinCoreRelation'] 7 | -------------------------------------------------------------------------------- /src/frontend/web_application/server/ssr/index.js: -------------------------------------------------------------------------------- 1 | import cookieParser from 'cookie-parser'; 2 | import ssrMiddleware from './ssr-middleware'; 3 | 4 | export default (app) => { 5 | app.use(cookieParser()); 6 | app.get('*', ssrMiddleware); 7 | }; 8 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/notification/index.js: -------------------------------------------------------------------------------- 1 | export { default as NotificationProvider } from './components/NotificationProvider'; 2 | export { default as MessageNotificationHandler } from './components/MessageNotificationHandler'; 3 | -------------------------------------------------------------------------------- /src/backend/defs/nats-messages/SMTPqueue_ack_msg.yaml: -------------------------------------------------------------------------------- 1 | # this is the model of the json payload that must be sent to 'SMTPqueue' on NATS to acknowledge a request 2 | error: "error message" # omit this field if there is no error 3 | message: "response message" -------------------------------------------------------------------------------- /src/backend/defs/rest-api/objects/NewTag.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | type: object 3 | properties: 4 | label: 5 | type: string 6 | importance_level: 7 | type: integer 8 | format: int32 9 | required: 10 | - label 11 | additionalProperties: false 12 | -------------------------------------------------------------------------------- /src/backend/defs/rest-api/objects/SocialIdentity.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | type: object 3 | properties: 4 | "$ref": NewSocialIdentity.yaml#/properties 5 | social_id: 6 | type: string 7 | required: 8 | - name 9 | additionalProperties: false 10 | 11 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/layouts/Page/components/TakeATour/index.js: -------------------------------------------------------------------------------- 1 | import { compose } from 'redux'; 2 | import { withI18n } from '@lingui/react'; 3 | import Presenter from './presenter'; 4 | 5 | export default compose(withI18n())(Presenter); 6 | -------------------------------------------------------------------------------- /devtools/drone/test_front.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | if [ "$SRC_CHANGED" = "false" ]; 5 | then 6 | echo "No changes to frontend" 7 | return 8 | fi 9 | 10 | cd src/frontend/web_application 11 | yarn 12 | yarn lingui compile 13 | yarn test 14 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/components/Icon/__snapshots__/index.spec.tsx.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`component Icon render 1`] = ` 4 |
5 | 8 |
9 | `; 10 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/view/actions/requestMessages.js: -------------------------------------------------------------------------------- 1 | import { fetchMessages } from '../../message'; 2 | 3 | export const requestMessages = 4 | ({ view }) => 5 | (dispatch) => 6 | dispatch(fetchMessages(view.getRequestParams())); 7 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/services/openpgp-manager/index.spec.ts: -------------------------------------------------------------------------------- 1 | import * as openPGPManager from './index'; 2 | 3 | describe('Service OpenPGPManager', () => { 4 | it('init', () => { 5 | expect(openPGPManager).toBeDefined(); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /src/backend/main/py.main/caliopen_main/discussion/parameters/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import absolute_import, print_function, unicode_literals 3 | 4 | from .discussion import Discussion 5 | 6 | __all__ = [ 7 | 'Discussion' 8 | ] 9 | -------------------------------------------------------------------------------- /src/backend/vendor/README.md: -------------------------------------------------------------------------------- 1 | ##### Golang vendoring 2 | 3 | 4 | This vendor directory is for managing golang dependencies for the Caliopen's go packages. 5 | 6 | After the command `$GOPATH/bin/govendor sync` has been ran, all golang dependencies will be copied here. -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/pwa/contexts/InstallPromptContext.ts: -------------------------------------------------------------------------------- 1 | import { createContext } from 'react'; 2 | 3 | export const InstallPromptContext = createContext<{ 4 | defferedPrompt: undefined | Event; 5 | }>({ 6 | defferedPrompt: undefined, 7 | }); 8 | -------------------------------------------------------------------------------- /src/backend/defs/rest-api/objects/PI.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | type: object 3 | properties: 4 | technic: 5 | type: integer 6 | context: 7 | type: integer 8 | comportment: 9 | type: integer 10 | version: 11 | type: integer 12 | additionalProperties: true 13 | -------------------------------------------------------------------------------- /src/backend/main/py.main/caliopen_main/contact/objects/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """Caliopen contact classes.""" 3 | from __future__ import absolute_import, print_function, unicode_literals 4 | 5 | from .contact import Contact 6 | 7 | __all__ = ['Contact'] 8 | -------------------------------------------------------------------------------- /src/backend/tools/py.ML/caliopen_climl/__init__.py: -------------------------------------------------------------------------------- 1 | __version__ = '0.23.0' 2 | 3 | try: 4 | import pkg_resources 5 | pkg_resources.declare_namespace(__name__) 6 | except ImportError: 7 | import pkgutil 8 | __path__ = pkgutil.extend_path(__path__, __name__) 9 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/encryption/selectors/publicKey.js: -------------------------------------------------------------------------------- 1 | export const selectKeys = (state, contactId) => { 2 | if (state.publicKey && state.publicKey[contactId]) { 3 | return state.publicKey[contactId].keys; 4 | } 5 | 6 | return null; 7 | }; 8 | -------------------------------------------------------------------------------- /src/backend/defs/rest-api/objects/DefaultDevice.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | type: object 3 | properties: 4 | device_id: 5 | type: string 6 | ecdsa_key: 7 | type: object 8 | "$ref": ECKey.yaml 9 | required: 10 | - device_id 11 | - ecdsa_key 12 | additionalProperties: false -------------------------------------------------------------------------------- /src/backend/main/py.main/caliopen_main/discussion/store/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import absolute_import, print_function, unicode_literals 3 | 4 | from .discussion_index import DiscussionIndexManager 5 | 6 | __all__ = ['DiscussionIndexManager'] 7 | -------------------------------------------------------------------------------- /src/backend/main/py.main/caliopen_main/participant/store/__init__.py: -------------------------------------------------------------------------------- 1 | from .participant import Participant, ParticipantHash, HashLookup 2 | from .participant_index import IndexedParticipant 3 | 4 | __all__ = ['Participant', 'ParticipantHash', 'IndexedParticipant', 'HashLookup'] 5 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/services/api-client/types.d.ts: -------------------------------------------------------------------------------- 1 | import { AxiosError } from 'axios'; 2 | 3 | export interface ErrorResponse { 4 | errors: [{ code: number; message: string; name: string }]; 5 | } 6 | 7 | export type APIAxiosError = AxiosError; 8 | -------------------------------------------------------------------------------- /src/backend/defs/rest-api/objects/NewSocialIdentity.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | type: object 3 | properties: 4 | infos: 5 | type: object 6 | name: 7 | type: string 8 | type: 9 | type: string 10 | required: 11 | - name 12 | - type 13 | additionalProperties: false 14 | 15 | -------------------------------------------------------------------------------- /src/backend/defs/rest-api/objects/Phone.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | type: object 3 | properties: 4 | "$ref": NewPhone.yaml#/properties 5 | phone_id: 6 | type: string 7 | normalized_number: 8 | type: string 9 | required: 10 | - number 11 | additionalProperties: false 12 | 13 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/message/actions/getMessages.js: -------------------------------------------------------------------------------- 1 | import { getMessage } from './getMessage'; 2 | 3 | export const getMessages = (messageids) => (dispatch) => 4 | Promise.all( 5 | messageids.map((messageId) => dispatch(getMessage({ messageId }))) 6 | ); 7 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/contact/contact-action-bar.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/common'; 2 | @import '../../styles/vendor/bootstrap_foundation-sites'; 3 | 4 | .s-contact-action-bar { 5 | padding-right: map_get($co-margin_, 'xsmall'); 6 | text-align: right; 7 | } 8 | -------------------------------------------------------------------------------- /src/backend/components/py.tag/caliopen_tag/taggers/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """Caliopen tagging model qualifier""" 3 | from __future__ import absolute_import, print_function, unicode_literals 4 | 5 | from .tagger import MessageTagger 6 | 7 | __all__ = ['MessageTagger'] 8 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/DevicesSettings/components/VerifyDevice/style.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../styles/common'; 2 | 3 | .m-device-verify { 4 | text-align: center; 5 | 6 | &__button { 7 | margin-bottom: map_get($co-form__spacing, 'small'); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/contact/components/ContactTitleField/style.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../styles/common'; 2 | @import '../../../../styles/object/o-form-element'; 3 | 4 | .s-contact-title-field { 5 | @include o-form-element; 6 | @include o-form-element--light; 7 | } 8 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/services/event-manager/index.js: -------------------------------------------------------------------------------- 1 | export const addEventListener = (type, eventListener, ref = window) => { 2 | ref.addEventListener(type, eventListener, false); 3 | 4 | return () => { 5 | ref.removeEventListener(type, eventListener); 6 | }; 7 | }; 8 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/services/openpgp-manager/errors.ts: -------------------------------------------------------------------------------- 1 | export const ERROR_UNABLE_READ_PUBLIC_KEY = 'unable-read-public-key'; 2 | export const ERROR_UNABLE_READ_PRIVATE_KEY = 'unable-read-private-key'; 3 | export const ERROR_FINGERPRINTS_NOT_MATCH = 'fingerprints-not-match'; 4 | -------------------------------------------------------------------------------- /devtools/kubernetes/services/apiv1-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: apiv1 5 | spec: 6 | type: NodePort 7 | selector: 8 | app: apiv1 9 | ports: 10 | - name: "apiv1" 11 | port: 6543 12 | targetPort: 6543 13 | nodePort: 6543 14 | -------------------------------------------------------------------------------- /devtools/kubernetes/services/lmtpd-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: lmtpd 5 | spec: 6 | type: NodePort 7 | selector: 8 | app: lmtpd 9 | ports: 10 | - name: "lmtpd" 11 | port: 2525 12 | targetPort: 2525 13 | nodePort: 2525 14 | -------------------------------------------------------------------------------- /devtools/kubernetes/services/minio-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: minio 5 | spec: 6 | type: NodePort 7 | selector: 8 | app: minio 9 | ports: 10 | - name: "minio" 11 | port: 9090 12 | targetPort: 9090 13 | nodePort: 9090 14 | -------------------------------------------------------------------------------- /devtools/kubernetes/services/nats-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: nats 5 | spec: 6 | type: NodePort 7 | selector: 8 | app: nats 9 | ports: 10 | - name: "nats" 11 | port: 4222 12 | targetPort: 4222 13 | nodePort: 4222 14 | -------------------------------------------------------------------------------- /devtools/kubernetes/services/redis-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: redis 5 | spec: 6 | type: NodePort 7 | selector: 8 | app: redis 9 | ports: 10 | - name: "redis" 11 | port: 6379 12 | targetPort: 6379 13 | nodePort: 6379 14 | -------------------------------------------------------------------------------- /src/backend/defs/rest-api/objects/Organization.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | type: object 3 | properties: 4 | "$ref": NewOrganization.yaml#/properties 5 | deleted: 6 | type: boolean 7 | organization_id: 8 | type: string 9 | required: 10 | - name 11 | additionalProperties: false 12 | 13 | -------------------------------------------------------------------------------- /src/backend/main/py.main/CHANGES.rst: -------------------------------------------------------------------------------- 1 | 0.0.1 2 | ----- 3 | 4 | - Initial version 5 | 6 | 0.0.2 7 | ----- 8 | 9 | - Code refactoring into a single repository. Caliopen platform is made of 3 python packages : caliopen.main, caliopen_storage. and caliopen.server (ie the REST HTTP API) 10 | -------------------------------------------------------------------------------- /src/backend/main/py.main/caliopen_main/common/store/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """Caliopen common store classes classes.""" 3 | from __future__ import absolute_import, print_function, unicode_literals 4 | 5 | 6 | from .pubkey import PublicKey 7 | 8 | __all__ = ['PublicKey'] 9 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/components/BlockList/style.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/common'; 2 | 3 | .m-block-list { 4 | list-style-type: none; 5 | margin: 0; 6 | padding: 0; 7 | 8 | &__item { 9 | border-top: 1px solid $co-color__fg__border--higher; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/discussion/selectors/discussionsSelector.ts: -------------------------------------------------------------------------------- 1 | import { getModuleStateSelector } from '../../../store/selectors/getModuleStateSelector'; 2 | 3 | export const isFetchingSelector = (state) => 4 | getModuleStateSelector('discussion')(state).isFetching; 5 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/encryption/components/AskPassphraseForm/style.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../styles/common'; 2 | @import '../../../../styles/vendor/bootstrap_foundation-sites'; 3 | 4 | .m-ask-passphrase { 5 | &--input-fingerprint { 6 | display: none; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/services/asciify.js: -------------------------------------------------------------------------------- 1 | // remove non ascii chars, leave chars from 32 to 126 of the ascii table 2 | // https://duckduckgo.com/?q=ascii+table&t=ffab&ia=answer&iax=answer 3 | export const asciify = (str) => 4 | str.normalize('NFKD').replace(/[^\x20-\x7E]/g, ''); 5 | -------------------------------------------------------------------------------- /src/frontend/web_application/test/msw-handlers/user.ts: -------------------------------------------------------------------------------- 1 | import { rest } from 'msw'; 2 | import user from '../fixtures/user/data.json'; 3 | 4 | export const userHandlers = [ 5 | rest.get('/api/v1/me', (req, res, ctx) => { 6 | return res(ctx.json(user), ctx.status(200)); 7 | }), 8 | ]; 9 | -------------------------------------------------------------------------------- /doc/index.md: -------------------------------------------------------------------------------- 1 | # Caliopen Documentation 2 | 3 | Welcome. 4 | 5 | This is the home of the documentation of Caliopen. 6 | 7 | The code source is available at https://github.com/CaliOpen/Caliopen 8 | 9 | An alpha version is available (registrations are open) at https://alpha.caliopen.org 10 | -------------------------------------------------------------------------------- /src/backend/defs/rest-api/objects/NewPublicKey.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | type: object 3 | properties: 4 | key: 5 | type: string 6 | description : "DER or PEM key, base64 encoded" 7 | label: 8 | type: string 9 | required: 10 | - key 11 | - label 12 | additionalProperties: false 13 | 14 | -------------------------------------------------------------------------------- /src/backend/main/py.main/caliopen_main/participant/core/__init__.py: -------------------------------------------------------------------------------- 1 | from .participant import hash_participants_uri, participants_from_uris, \ 2 | HashLookup, ParticipantHash 3 | 4 | __all__ = ['hash_participants_uri', 'participants_from_uris', 'HashLookup', 5 | 'ParticipantHash'] 6 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/device/actions/requestDevices.js: -------------------------------------------------------------------------------- 1 | import { requestDevices as requestDevicesBase } from '../../../store/modules/device'; 2 | 3 | export const requestDevices = () => (dispatch) => 4 | dispatch(requestDevicesBase()).then((response) => response.payload.data); 5 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/ContactAssociation/contact-association.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/common'; 2 | 3 | .s-contact-association { 4 | background-color: $co-color__fg__back; 5 | 6 | &__action-bar { 7 | padding-right: map_get($co-margin_, 'xsmall'); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/UserSecurity/components/OpenPGPForm.scss: -------------------------------------------------------------------------------- 1 | @import '../../../styles/common'; 2 | 3 | .m-account-openpgp-form { 4 | &__container { 5 | margin-top: $co-margin; 6 | } 7 | 8 | &__field-group { 9 | margin-bottom: $co-margin; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/store/selectors/getModuleStateSelector.js: -------------------------------------------------------------------------------- 1 | export const getModuleStateSelector = (moduleName) => (state) => { 2 | if (!state[moduleName]) { 3 | throw new Error(`"${moduleName}" does not exist in redux store`); 4 | } 5 | 6 | return state[moduleName]; 7 | }; 8 | -------------------------------------------------------------------------------- /devtools/api-mock/collection-middleware/index.js: -------------------------------------------------------------------------------- 1 | const createCollectionMiddleware = entityName => data => (req, res, next) => { 2 | res.data = { 3 | total: data.length, 4 | [entityName]: data, 5 | }; 6 | 7 | next(); 8 | }; 9 | 10 | export default createCollectionMiddleware; 11 | -------------------------------------------------------------------------------- /src/backend/defs/rest-api/objects/NewPhone.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | type: object 3 | properties: 4 | is_primary: 5 | type: boolean 6 | number: 7 | type: string 8 | type: 9 | type: string 10 | uri: 11 | type: string 12 | required: 13 | - number 14 | additionalProperties: false 15 | 16 | -------------------------------------------------------------------------------- /src/frontend/maintenance/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "maintenance", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "license": "MIT", 6 | "scripts": { 7 | "start:dev": "http-server ./src/" 8 | }, 9 | "devDependencies": { 10 | "http-server": "^0.11.1" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/tab/hooks/useCurentTab.ts: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import { TabContext } from '../contexts/TabContext'; 3 | 4 | export function useCurrentTab() { 5 | const { getCurrentTab } = React.useContext(TabContext); 6 | 7 | return getCurrentTab(); 8 | } 9 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/Timeline/timeline-action-bar.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/vendor/bootstrap_foundation-sites'; 2 | 3 | .s-timeline-action-bar { 4 | @include flex-grid-row($size: expand); 5 | 6 | &__filters { 7 | @include flex-grid-column(shrink); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /devtools/drone/build_images.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | if [[ $SRC_CHANGED == "true" ]]; 5 | then 6 | echo "Building changes" 7 | #/usr/local/bin/dockerd-entrypoint.sh & >/dev/null 2>&1 8 | /bin/drone-docker 9 | else 10 | echo "No changes to files, nothing to build" 11 | exit 0 12 | fi 13 | -------------------------------------------------------------------------------- /devtools/kubernetes/services/frontend-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: frontend 5 | spec: 6 | type: NodePort 7 | selector: 8 | app: frontend 9 | ports: 10 | - name: "frontend" 11 | port: 4000 12 | targetPort: 4000 13 | nodePort: 4000 14 | -------------------------------------------------------------------------------- /src/backend/defs/rest-api/objects/Error.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | type: object 3 | properties: 4 | error: 5 | type: object 6 | properties: 7 | message: 8 | type: string 9 | code: 10 | type: integer 11 | format: int32 12 | name: 13 | type: string 14 | 15 | -------------------------------------------------------------------------------- /src/backend/defs/rest-api/objects/NewEmail.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | type: object 3 | properties: 4 | address: 5 | type: string 6 | is_primary: 7 | type: boolean 8 | label: 9 | type: string 10 | type: 11 | type: string 12 | required: 13 | - address 14 | additionalProperties: false 15 | 16 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/Discussion/components/TagList/style.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../styles/common'; 2 | 3 | .m-message-tags-list { 4 | &__tag { 5 | display: inline; 6 | margin-right: $co-component__spacing; 7 | margin-bottom: $co-component__spacing; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /devtools/storybook/.storybook/config.js: -------------------------------------------------------------------------------- 1 | import { configure, setAddon } from '@kadira/storybook'; 2 | import infoAddon from '@kadira/react-storybook-addon-info'; 3 | 4 | setAddon(infoAddon); 5 | 6 | function loadStories() { 7 | require('../stories'); 8 | } 9 | 10 | configure(loadStories, module); 11 | -------------------------------------------------------------------------------- /src/backend/main/py.storage/caliopen_storage/store/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import absolute_import, print_function, unicode_literals 3 | from .model import BaseModel, BaseIndexDocument, BaseUserType 4 | 5 | __all__ = [ 6 | 'BaseModel', 'BaseIndexDocument', 'BaseUserType', 7 | ] 8 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/pi/index.jsx: -------------------------------------------------------------------------------- 1 | export { default as MultidimensionalPi } from './components/MultidimensionalPi'; 2 | export { default as BackgroundImage } from './components/BackgroundImage'; 3 | export { default as PiScore } from './components/PiScore'; 4 | export * from './services/pi'; 5 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/contact/components/OrgaForm/style.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../styles/common'; 2 | @import '../../../../styles/vendor/bootstrap_foundation-sites'; 3 | 4 | .m-orga-form { 5 | &__col-button { 6 | display: flex; 7 | justify-content: flex-end; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/frontend/web_application/test/fixtures/user/index.ts: -------------------------------------------------------------------------------- 1 | import { UserPayload } from 'src/modules/user/types'; 2 | 3 | import data from './data.json'; 4 | 5 | export function generateUser(props: Partial = {}): UserPayload { 6 | return { 7 | ...data, 8 | ...props, 9 | }; 10 | } 11 | -------------------------------------------------------------------------------- /src/backend/defs/rest-api/objects/Identity.yaml: -------------------------------------------------------------------------------- 1 | --- # Identity is a reference embedded in a message 2 | type: object 3 | properties: 4 | identifier: # the 'I' like in URI, ie : the email address for email ; the user's real name for IRC 5 | type: string 6 | type: # local, remote, etc. 7 | type: string 8 | -------------------------------------------------------------------------------- /src/backend/main/go.backends/UrisInterface.go: -------------------------------------------------------------------------------- 1 | package backends 2 | 3 | import ( 4 | . "github.com/CaliOpen/Caliopen/src/backend/defs/go-objects" 5 | ) 6 | 7 | type UrisStorage interface { 8 | LookupHash(user_id UUID, uri string) ([]HashLookup, error) 9 | CreateHashLookup(lookup HashLookup) error 10 | } 11 | -------------------------------------------------------------------------------- /src/backend/main/py.main/caliopen_main/common/parameters/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """Caliopen common parameters classes.""" 3 | from __future__ import absolute_import, print_function, unicode_literals 4 | 5 | from .pubkey import NewPublicKey, PublicKey 6 | 7 | __all__ = ['NewPublicKey', 'PublicKey'] 8 | -------------------------------------------------------------------------------- /src/backend/tools/py.CLI/caliopen_cli/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | __version__ = '0.27.0' 4 | 5 | try: 6 | import pkg_resources 7 | pkg_resources.declare_namespace(__name__) 8 | except ImportError: 9 | import pkgutil 10 | __path__ = pkgutil.extend_path(__path__, __name__) 11 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/control/components/PageActions/action-btns.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../styles/common'; 2 | 3 | .m-action-btns { 4 | display: flex; 5 | 6 | &__btn { 7 | margin-left: $co-margin; 8 | 9 | &:first-child { 10 | margin-left: 0; 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/message/services/findUserParticipant.js: -------------------------------------------------------------------------------- 1 | import { isUserParticipant } from './isUserParticipant'; 2 | 3 | export const findUserParticipant = ({ user, participants }) => 4 | participants && 5 | participants.find((participant) => isUserParticipant({ participant, user })); 6 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/user/store/selectors.ts: -------------------------------------------------------------------------------- 1 | import { RootState } from 'src/store/reducer'; 2 | 3 | export const stateSelector = (state: RootState) => state.user; 4 | 5 | export const shouldFetchSelector = (state: RootState) => 6 | ['idle', 'invalidated'].includes(stateSelector(state).status); 7 | -------------------------------------------------------------------------------- /devtools/kubernetes/services/apiv2-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: apiv2 5 | spec: 6 | type: NodePort 7 | #nodePort: 6543 8 | selector: 9 | app: apiv2 10 | ports: 11 | - name: "apiv2" 12 | port: 31415 13 | targetPort: 31415 14 | nodePort: 31415 15 | -------------------------------------------------------------------------------- /src/backend/components/py.pgp/caliopen_pgp/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | __version__ = '0.23.0' 4 | 5 | try: 6 | import pkg_resources 7 | pkg_resources.declare_namespace(__name__) 8 | except ImportError: 9 | import pkgutil 10 | __path__ = pkgutil.extend_path(__path__, __name__) 11 | -------------------------------------------------------------------------------- /src/backend/defs/rest-api/objects/Tag.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | type: object 3 | properties: 4 | "$ref": NewTag.yaml#/properties 5 | date_insert: 6 | type: string 7 | format: date-time 8 | type: 9 | type: string 10 | enum: 11 | - user 12 | - system 13 | additionalProperties: false 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/backend/interfaces/REST/go.server/middlewares/config.go: -------------------------------------------------------------------------------- 1 | package http_middleware 2 | 3 | const ( 4 | RoutePrefix = "/api/v2" 5 | IdentitiesRoute = "/identities" 6 | TagsRoute = "/tags" 7 | ContactsRoute = "/contacts" 8 | DevicesRoute = "/devices" 9 | ImportsRoute = "/imports" 10 | ) 11 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/contact/store/selectors.ts: -------------------------------------------------------------------------------- 1 | import { RootState } from 'src/store/reducer'; 2 | 3 | export const stateSelector = (state: RootState) => state.contact; 4 | 5 | export const shouldFetchSelector = (state: RootState) => 6 | ['idle', 'invalidated'].includes(stateSelector(state).status); 7 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/routing/hooks/useSearchParams.ts: -------------------------------------------------------------------------------- 1 | import { useLocation } from 'react-router-dom'; 2 | import { getSearchParams } from '../services/getSearchParams'; 3 | 4 | export function useSearchParams() { 5 | const { search } = useLocation(); 6 | 7 | return getSearchParams(search); 8 | } 9 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/tags/components/TagItem/style.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../styles/common'; 2 | @import '../../../../styles/vendor/bootstrap_foundation-sites'; 3 | 4 | .m-tag-item { 5 | margin-right: map_get($co-form__spacing, 'small'); 6 | margin-bottom: map_get($co-form__spacing, 'small'); 7 | } 8 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/SearchResults/components/Highlights/style.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../styles/common'; 2 | 3 | .s-search-results-highlights { 4 | &__term { 5 | display: inline-block; 6 | background: $co-color__bg__back--high; 7 | color: $co-color__fg__text--low; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/frontend/web_application/test/functional/utils/timeline.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | filter: async (type) => { 3 | await element( 4 | by.css('#toggle-timeline-filter_navigation_dropdown') 5 | ).click(); 6 | 7 | return element(by.cssContainingText('.m-button', type)).click(); 8 | }, 9 | }; 10 | -------------------------------------------------------------------------------- /devtools/kubernetes/services/elasticsearch-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: elasticsearch 5 | spec: 6 | type: NodePort 7 | selector: 8 | app: elasticsearch 9 | ports: 10 | - name: "elasticsearch" 11 | port: 9200 12 | targetPort: 9200 13 | nodePort: 9200 14 | -------------------------------------------------------------------------------- /src/backend/interfaces/REST/py.server/caliopen_api/user/util.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import absolute_import, print_function, unicode_literals 3 | 4 | import os 5 | import binascii 6 | 7 | 8 | def create_token(size=40): 9 | return binascii.hexlify(os.urandom(int(size/2))).decode('ascii') 10 | -------------------------------------------------------------------------------- /src/frontend/maintenance/Dockerfile: -------------------------------------------------------------------------------- 1 | # This file creates a container that runs a {package} caliopen frontend 2 | # Important: 3 | # Author: Caliopen 4 | # Date: 2019-05-13 5 | 6 | FROM nginx 7 | MAINTAINER Caliopen 8 | COPY src /opt/caliopen 9 | COPY config/nginx-config-maintenance.conf /etc/nginx/conf.d/default.conf 10 | -------------------------------------------------------------------------------- /src/frontend/maintenance/config/nginx-config-maintenance.conf: -------------------------------------------------------------------------------- 1 | server { 2 | listen 80; 3 | listen [::]:80; 4 | server_name localhost; 5 | 6 | location /assets { 7 | root /opt/caliopen; 8 | } 9 | 10 | location / { 11 | root /opt/caliopen; 12 | rewrite ^(.*)$ /index.html break; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/discussion/index.js: -------------------------------------------------------------------------------- 1 | export * from './actions/requestDiscussionIdForParticipants'; 2 | export * from './hooks/useDiscussion'; 3 | export * from './selectors/discussionDraftSelector'; 4 | export * from './selectors/discussionIdSelector'; 5 | export * from './selectors/discussionSelector'; 6 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/settings/index.js: -------------------------------------------------------------------------------- 1 | export { default as WithSettings } from './components/WithSettings'; 2 | export { default as withSettings } from './hoc/withSettings'; 3 | export * from './selectors/settings'; 4 | export * from './services/getDefaultSettings'; 5 | export * from './hooks/useSettings'; 6 | -------------------------------------------------------------------------------- /devtools/clean-dev-storage.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # DEVELOPMENT ONLY SCRIPT 4 | # 5 | # Clean docker containers and volumes where data are stored 6 | 7 | docker-compose kill cassandra elasticsearch object_store 8 | docker-compose rm -f cassandra elasticsearch object_store 9 | docker volume rm devtools_db devtools_index devtools_store -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/NewDraft/style.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/common'; 2 | 3 | .s-new-draft { 4 | &__form { 5 | padding-top: map_get($co-margin_, 'large'); 6 | background-color: #f6fcff; 7 | } 8 | 9 | &__discussion { 10 | margin-top: map_get($co-margin_, 'large'); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/frontend/web_application/.gitignore: -------------------------------------------------------------------------------- 1 | # dependencies 2 | node_modules 3 | 4 | # testing 5 | coverage 6 | 7 | # production 8 | build 9 | dist 10 | 11 | # misc 12 | .DS_Store 13 | .env 14 | npm-debug.log 15 | 16 | # build targets 17 | .kotatsu 18 | 19 | # lingui 20 | locale/_build 21 | locale/**/*.ts 22 | locale/**/*.d.ts 23 | -------------------------------------------------------------------------------- /src/frontend/web_application/server/auth/lib/seal.ts: -------------------------------------------------------------------------------- 1 | import Iron from 'iron'; 2 | 3 | export function encode(obj: object, secret: string) { 4 | return Iron.seal(obj, secret, Iron.defaults); 5 | } 6 | 7 | export function decode(sealed: string, secret: string) { 8 | return Iron.unseal(sealed, secret, Iron.defaults); 9 | } 10 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/components/FieldErrors/style.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/common'; 2 | 3 | .m-field-errors { 4 | list-style: none; 5 | padding-top: map_get($co-form__spacing, 'xsmall'); 6 | color: map_get($caliopen-palette, 'alert'); 7 | font-size: $co-font__size--xsmall; 8 | font-weight: 700; 9 | } 10 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/store/middlewares/crash-reporter-middleware.js: -------------------------------------------------------------------------------- 1 | export default () => (next) => (action) => { 2 | try { 3 | return next(action); 4 | } catch (err) { 5 | // eslint-disable-next-line no-console 6 | console.error('Caught an exception!', err); 7 | 8 | throw err; 9 | } 10 | }; 11 | -------------------------------------------------------------------------------- /src/backend/defs/rest-api/objects/NewIM.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | type: object 3 | properties: 4 | address: 5 | type: string 6 | is_primary: 7 | type: boolean 8 | label: 9 | type: string 10 | protocol: 11 | type: string 12 | type: 13 | type: string 14 | required: 15 | - address 16 | additionalProperties: false 17 | 18 | -------------------------------------------------------------------------------- /devtools/fixtures/raw_emails/simple: -------------------------------------------------------------------------------- 1 | Date: Fri, 03 May 2019 15:48:47 +0200 2 | Message-ID: 3 | Subject: le sujet est roi 4 | To: dev@caliopen.local 5 | From: someone@elsewhere.earth 6 | Content-Type: text/plain; charset=UTF-8 7 | Content-Transfer-Encoding: quoted-printable 8 | 9 | message body -------------------------------------------------------------------------------- /devtools/storybook/README.md: -------------------------------------------------------------------------------- 1 | # This folder is the react storybook for Caliopen's components 2 | 3 | **// FIXME** 4 | 5 | It is actually in a migration operation, it requires some steps to make it work: 6 | 7 | * [ ] update to [latest storybook](https://storybook.js.org/basics/guide-react/) 8 | * [ ] split caliopen client at lease in UI/client 9 | -------------------------------------------------------------------------------- /src/backend/defs/nats-messages/UpdateContactPI_msg.yaml: -------------------------------------------------------------------------------- 1 | # this is the model of the json payload that must be sent to 'PI' subject on NATS 2 | # to trigger a new PI computation for a contact that has been created or modified. 3 | order: contact_update 4 | user_id: 1aae81ea-2f21-483e-8e68-b4fcf664df5a 5 | contact_id: 1aae81ea-2f21-483e-8e68-b4fcf664df5a -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/draftMessage/components/AttachmentManager/index.js: -------------------------------------------------------------------------------- 1 | import { compose } from 'redux'; 2 | import { withI18n } from '@lingui/react'; 3 | import { withNotification } from '../../../userNotify'; 4 | import Presenter from './presenter'; 5 | 6 | export default compose(withI18n(), withNotification())(Presenter); 7 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/RemoteIdentitySettings/components/NewIdentity/provider-email-button.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../styles/common'; 2 | 3 | .m-provider-email-button { 4 | &__icon { 5 | vertical-align: middle; 6 | height: 2.5rem; 7 | color: $co-color__primary; 8 | font-size: 2.125rem; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/styles/vendor/foundation-sites/_flex-grid.scss: -------------------------------------------------------------------------------- 1 | @mixin flex-grid-size($columns: null) { 2 | flex: flex-grid-column($columns); 3 | 4 | // max-width fixes IE 10/11 not respecting the flex-basis property 5 | @if $columns != null and $columns != shrink { 6 | max-width: grid-column($columns); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/backend/protocols/go.smtp/cmd/caliopen_lmtpd/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "fmt" 5 | "github.com/CaliOpen/Caliopen/src/backend/protocols/go.smtp/cmd/caliopen_lmtpd/cli_cmds" 6 | "os" 7 | ) 8 | 9 | func main() { 10 | if err := cmd.RootCmd.Execute(); err != nil { 11 | fmt.Println(err) 12 | os.Exit(-1) 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/avatar/index.js: -------------------------------------------------------------------------------- 1 | export { default as ContactAvatarLetter } from './components/ContactAvatarLetter'; 2 | export { default as AuthorAvatarLetter } from './components/AuthorAvatarLetter'; 3 | export { default as AvatarLetter } from './components/AvatarLetter'; 4 | export * from './components/AvatarLetterWrapper'; 5 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/device/actions/requestDevice.js: -------------------------------------------------------------------------------- 1 | import { requestDevice as requestDeviceBase } from '../../../store/modules/device'; 2 | 3 | export const requestDevice = 4 | ({ deviceId }) => 5 | (dispatch) => 6 | dispatch(requestDeviceBase({ deviceId })).then( 7 | (response) => response.payload.data 8 | ); 9 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/draftMessage/services/getIdentityProtocol.js: -------------------------------------------------------------------------------- 1 | const IDENTITY_PROTOCOLS = { 2 | email: 'email', 3 | smtp: 'email', 4 | imap: 'email', 5 | twitter: 'twitter', 6 | mastodon: 'mastodon', 7 | }; 8 | 9 | export const getIdentityProtocol = (identity) => 10 | IDENTITY_PROTOCOLS[identity.protocol]; 11 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/Discussion/components/InstantMessage/instant-message-aside.scss: -------------------------------------------------------------------------------- 1 | .m-instant-message-aside { 2 | &__info { 3 | padding-top: 0.5rem; 4 | padding-right: 1rem; 5 | padding-left: 1rem; 6 | } 7 | 8 | &__actions { 9 | white-space: nowrap; 10 | } 11 | 12 | &__tags { 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/frontend/web_application/test/fixtures/contacts/index.ts: -------------------------------------------------------------------------------- 1 | import { Contact } from 'src/modules/contact/types'; 2 | import data from './data.json'; 3 | 4 | const contactBase: Contact = data[0]; 5 | export function generateContact(props: Partial): Contact { 6 | return { 7 | ...contactBase, 8 | ...props, 9 | }; 10 | } 11 | -------------------------------------------------------------------------------- /devtools/kubernetes/volumeclaims/db-persistentvolumeclaim.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | labels: 5 | tier: backend 6 | type: volume 7 | name: dev-db 8 | spec: 9 | accessModes: 10 | - ReadWriteOnce 11 | resources: 12 | requests: 13 | storage: 1000Mi 14 | storageClassName: standard 15 | -------------------------------------------------------------------------------- /devtools/kubernetes/volumeclaims/store-persistentvolumeclaim.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | labels: 5 | tier: backend 6 | type: volume 7 | name: dev-store 8 | spec: 9 | accessModes: 10 | - ReadWriteOnce 11 | resources: 12 | requests: 13 | storage: 1000Mi 14 | storageClassName: standard -------------------------------------------------------------------------------- /src/backend/main/go.backends/AttachmentsInterfaces.go: -------------------------------------------------------------------------------- 1 | package backends 2 | 3 | import ( 4 | "io" 5 | ) 6 | 7 | type AttachmentStorage interface { 8 | StoreAttachment(attachment_id string, file io.Reader) (uri string, size int, err error) 9 | GetAttachment(uri string) (file io.Reader, err error) 10 | DeleteAttachment(uri string) error 11 | } 12 | -------------------------------------------------------------------------------- /src/backend/main/py.main/README.rst: -------------------------------------------------------------------------------- 1 | Entry point 2 | =========== 3 | 4 | This repository is part of CaliOpen platform. For documentation, installation and 5 | contribution instructions, please refer to https://caliopen.github.io 6 | 7 | 8 | Caliopen Main package 9 | ============= 10 | 11 | This is the main entry point for whole application. 12 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/components/MessageDate/style.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/common'; 2 | @import '../../styles/vendor/bootstrap_foundation-sites'; 3 | 4 | .m-message-date { 5 | &__time { 6 | display: block; 7 | } 8 | 9 | @include breakpoint(medium) { 10 | &__time { 11 | display: inline; 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/tab/contexts/TabContext.js: -------------------------------------------------------------------------------- 1 | import { createContext } from 'react'; 2 | 3 | export const TabContext = createContext({ 4 | tabs: [], 5 | removeTab: ({ tab }) => { 6 | // noop 7 | }, 8 | updateTab: () => { 9 | // noop 10 | }, 11 | getCurrentTab: () => { 12 | // noop 13 | }, 14 | }); 15 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/components/Textarea/style.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/common'; 2 | @import '../../styles/object/o-form-element'; 3 | 4 | .m-textarea { 5 | @include o-form-element; 6 | @include o-form-element--light; 7 | 8 | min-height: 3 * $co-component__height; 9 | 10 | &--expanded { 11 | width: 100%; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/ApplicationSettings/components/DesktopNotificationSettings/style.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../styles/common'; 2 | 3 | .m-desktop-notifications { 4 | &--allowed { 5 | color: map_get($caliopen-palette, 'success'); 6 | } 7 | 8 | &--denied { 9 | color: map_get($caliopen-palette, 'alert'); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/ValidateDevice/style.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/common'; 2 | @import '../../styles/vendor/bootstrap_foundation-sites'; 3 | 4 | .s-validate-device { 5 | @include flex-grid-row($size: expand); 6 | 7 | padding: calc($co-margin / 2); 8 | 9 | &__feedback { 10 | @include flex-grid-size(12); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /devtools/fixtures/vcard/rfc2425-2.vcard: -------------------------------------------------------------------------------- 1 | begin:VCARD 2 | source:ldap://cn=bjorn%20Jensen, o=university%20of%20Michigan, c=US 3 | name:Bjorn Jensen 4 | fn:Bj=F8rn Jensen 5 | n:Jensen;Bj=F8rn 6 | email;type=internet:bjorn@umich.edu 7 | tel;type=work,voice,msg:+1 313 747-4454 8 | key;type=x509;encoding=B:dGhpcyBjb3VsZCBiZSAKbXkgY2VydGlmaWNhdGUK 9 | end:VCARD 10 | -------------------------------------------------------------------------------- /devtools/kubernetes/volumeclaims/index-persistentvolumeclaim.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | labels: 5 | tier: backend 6 | type: volume 7 | name: dev-index 8 | spec: 9 | accessModes: 10 | - ReadWriteOnce 11 | resources: 12 | requests: 13 | storage: 1000Mi 14 | storageClassName: standard 15 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/layouts/Page/components/Navbar/components/ItemLink/style.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../../../styles/common'; 2 | 3 | .m-item-link { 4 | display: inline-block; 5 | color: inherit; 6 | 7 | &:hover { 8 | color: $co-color__primary; 9 | } 10 | 11 | &:active { 12 | color: $co-color__primary--lower; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/contact/consts.ts: -------------------------------------------------------------------------------- 1 | import { TSortDir } from './types'; 2 | 3 | export const SORT_VIEW_GIVEN_NAME = 'given_name'; 4 | export const SORT_VIEW_FAMILY_NAME = 'family_name'; 5 | export const SORT_VIEW_TITLE = 'title'; 6 | export const DEFAULT_SORT_VIEW = SORT_VIEW_GIVEN_NAME; 7 | export const DEFAULT_SORT_DIR: TSortDir = 'ASC'; 8 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/pi/components/BackgroundImage/style.scss: -------------------------------------------------------------------------------- 1 | @import './o-background-image'; 2 | 3 | .m-background-image { 4 | @include o-background-image; 5 | 6 | min-height: 100vh; 7 | background-attachment: fixed; 8 | background-repeat: no-repeat; 9 | background-position: top center; 10 | background-size: cover; 11 | } 12 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/tab/model/Tab.js: -------------------------------------------------------------------------------- 1 | import { matchPath } from 'react-router-dom'; 2 | 3 | export class Tab { 4 | constructor({ location, scrollY = 0 }) { 5 | this.location = location; 6 | this.scrollY = scrollY; 7 | } 8 | 9 | getMatch = ({ routeConfig }) => 10 | matchPath(this.location.pathname, routeConfig); 11 | } 12 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/components/Subtitle/index.spec.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { shallow } from 'enzyme'; 3 | import Subtitle from '.'; 4 | 5 | describe('component Subtitle', () => { 6 | it('render', () => { 7 | const comp = shallow(Foo); 8 | 9 | expect(comp.text()).toEqual('Foo'); 10 | }); 11 | }); 12 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/message/actions/getParentMessage.js: -------------------------------------------------------------------------------- 1 | import { getMessage } from './getMessage'; 2 | 3 | export const getParentMessage = 4 | ({ message }) => 5 | (dispatch) => { 6 | if (!message.parent_id) { 7 | return undefined; 8 | } 9 | 10 | return dispatch(getMessage({ messageId: message.parent_id })); 11 | }; 12 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/scroll/services/scrollTop.js: -------------------------------------------------------------------------------- 1 | import scroll from 'scroll'; 2 | import scrollDoc from '../vendors/scroll-doc'; 3 | 4 | export const scrollTop = (y, isAnimated = false) => { 5 | if (isAnimated) { 6 | scroll.top(scrollDoc(), y, { duration: 350 }); 7 | 8 | return; 9 | } 10 | 11 | window.scroll(0, y); 12 | }; 13 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/view/config.js: -------------------------------------------------------------------------------- 1 | export const getConfig = (i18n) => [ 2 | { 3 | id: 'draft', 4 | // this can evolve in `conditions[{ propName, values[], test='equal|lower|in…'}]` 5 | condition: { propertyName: 'is_draft', value: true }, 6 | label: i18n._(/* i18n */ 'view.draft.label', null, { message: 'Drafts' }), 7 | }, 8 | ]; 9 | -------------------------------------------------------------------------------- /src/backend/defs/nats-messages/IMAPworkers_FetchOrder.yaml: -------------------------------------------------------------------------------- 1 | # this is the model of the json payload that must be sent to 'IMAPfetcher' topic on NATS's queue 'IMAPworkers' 2 | Order: fetch 3 | Userid: 1aae81ea-2f21-483e-8e68-b4fcf664df5a 4 | Remoteid: xxxx@xxxx.xxx 5 | # optional fields 6 | Server: imap.gmail.com:993 7 | Mailbox: INBOX 8 | Login: user@gmail.com 9 | Password: xxxx -------------------------------------------------------------------------------- /src/backend/defs/nats-messages/outboundSMTP_deliver_msg.yaml: -------------------------------------------------------------------------------- 1 | # this is the model of the payload that must be sent to 'outboundSMTP' subject on NATS 2 | # to trigger the operations of building a new email from a Caliopen draft message and sending it to the MTA 3 | order: deliver 4 | message_id: 1aae81ea-2f21-483e-8e68-b4fcf664df5a 5 | user_id: 1aae81ea-2f21-483e-8e68-b4fcf664df5a -------------------------------------------------------------------------------- /devtools/kubernetes/services/smtp-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: smtp 5 | spec: 6 | type: NodePort 7 | selector: 8 | app: inbucket 9 | ports: 10 | - name: "smtp" 11 | port: 2500 12 | targetPort: 2500 13 | nodePort: 2500 14 | - name: "smtp1" 15 | port: 8888 16 | targetPort: 8888 17 | nodePort: 8888 -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/message/services/isUserParticipant.js: -------------------------------------------------------------------------------- 1 | export const isUserParticipant = ({ participant, user }) => { 2 | const isUserContactId = (contactId) => contactId === user?.contact.contact_id; 3 | 4 | return ( 5 | (participant.contact_ids && 6 | participant.contact_ids.some(isUserContactId)) || 7 | false 8 | ); 9 | }; 10 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/routing/services/url/buildURL.js: -------------------------------------------------------------------------------- 1 | import { queryStringify } from './QueryStringSerializer'; 2 | 3 | export const buildURL = (url, params) => { 4 | if (params) { 5 | const queryString = queryStringify(params); 6 | 7 | return url + (url.indexOf('?') === -1 ? '?' : '&') + queryString; 8 | } 9 | 10 | return url; 11 | }; 12 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/components/Badge/index.spec.tsx: -------------------------------------------------------------------------------- 1 | import { render, screen } from '@testing-library/react'; 2 | import * as React from 'react'; 3 | import Badge from '.'; 4 | 5 | describe('component Badge', () => { 6 | it('render', () => { 7 | render(Foo); 8 | 9 | expect(screen.getByText('Foo')).toBeInTheDocument(); 10 | }); 11 | }); 12 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/components/Icon/index.spec.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import { render } from '@testing-library/react'; 3 | import Icon from '.'; 4 | 5 | describe('component Icon', () => { 6 | it('render', () => { 7 | const { container } = render(); 8 | 9 | expect(container).toMatchSnapshot(); 10 | }); 11 | }); 12 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/scroll/index.js: -------------------------------------------------------------------------------- 1 | export { default as ScrollDetector } from './components/ScrollDetector'; 2 | export * from './hoc/withScrollManager'; 3 | export * from './hoc/withScrollTarget'; 4 | export * from './hooks/useScrollToMe'; 5 | export * from './services/getTop'; 6 | export * from './services/getViewPortTop'; 7 | export * from './services/scrollTop'; 8 | -------------------------------------------------------------------------------- /src/frontend/web_application/template/index.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
%MARKUP%
11 | 12 | 13 | -------------------------------------------------------------------------------- /src/backend/defs/rest-api/objects/Authentication.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | type: object 3 | properties: 4 | username: 5 | type: string 6 | password: 7 | type: string 8 | context: 9 | type: string 10 | device: 11 | "$ref": DefaultDevice.yaml 12 | required: 13 | - username 14 | - password 15 | # - device # XXX to set mandatory later 16 | additionalProperties: false 17 | 18 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/tab/hoc/withUpdateTab.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import TabConsumer from '../components/TabConsumer'; 3 | 4 | export const withUpdateTab = () => (C) => 5 | function (props) { 6 | return ( 7 | } 9 | /> 10 | ); 11 | }; 12 | -------------------------------------------------------------------------------- /src/backend/defs/rest-api/objects/ShortContact.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | type: object 3 | properties: 4 | contact_id: 5 | type: string 6 | family_name: 7 | type: string 8 | given_name: 9 | type: string 10 | tags: 11 | type: array 12 | items: 13 | type: string 14 | title: 15 | type: string 16 | required: 17 | - contact_id 18 | additionalProperties: false 19 | 20 | -------------------------------------------------------------------------------- /src/backend/main/go.main/helpers/misc.go: -------------------------------------------------------------------------------- 1 | // Copyleft (ɔ) 2017 The Caliopen contributors. 2 | // Use of this source code is governed by a GNU AFFERO GENERAL PUBLIC 3 | // license (AGPL) that can be found in the LICENSE file. 4 | 5 | package helpers 6 | 7 | func EscapeUsername(username string) string { 8 | // TODO : implement an algorithm against injections 9 | return username 10 | } 11 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/discussion/selectors/discussionIdSelector.js: -------------------------------------------------------------------------------- 1 | export const discussionIdSelector = (state, { discussionId }) => { 2 | if (!discussionId) { 3 | throw new Error( 4 | 'discussionId must be passed when calling discussionIdSelector, e.g discussionIdSelector(state, { discussionId })' 5 | ); 6 | } 7 | 8 | return discussionId; 9 | }; 10 | -------------------------------------------------------------------------------- /devtools/api-mock/settings/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "default_locale": "en-US", 3 | "message_display_format": "rich_text", 4 | "contact_display_format": "given_name, family_name", 5 | "contact_display_order": "given_name", 6 | "notification_enabled": true, 7 | "notification_message_preview": "always", 8 | "notification_sound_enabled": true, 9 | "notification_delay_disappear": 10 10 | } 11 | -------------------------------------------------------------------------------- /devtools/storybook/stories/Changelog.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Markdown from 'react-markdown'; 3 | import input from './CHANGELOG.md'; 4 | 5 | const styles = { 6 | main: { 7 | margin: 30, 8 | }, 9 | }; 10 | 11 | const Changelog = () => ( 12 |
13 | 14 |
15 | ); 16 | 17 | export default Changelog; 18 | -------------------------------------------------------------------------------- /src/backend/components/py.tag/caliopen_tag/utils.py: -------------------------------------------------------------------------------- 1 | from nltk.tokenize import word_tokenize 2 | from bs4 import BeautifulSoup 3 | 4 | resources_path = "/var/tmp/" 5 | 6 | 7 | def pre_process(text, html=False): 8 | if html: 9 | text = BeautifulSoup(text, "html.parser").text 10 | return " ".join(word_tokenize(text)) \ 11 | .replace("\n", " ") \ 12 | .lower() 13 | -------------------------------------------------------------------------------- /src/backend/interfaces/REST/py.server/caliopen_api/base/deserializer.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """Caliopen api deserializers.""" 3 | from __future__ import absolute_import, print_function, unicode_literals 4 | 5 | 6 | def json_deserializer(request): 7 | """Manage json content type.""" 8 | if request.json_body: 9 | return request.json_body 10 | return request.body 11 | -------------------------------------------------------------------------------- /src/backend/main/py.main/caliopen_main/common/core/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """Caliopen common core classes.""" 3 | from __future__ import absolute_import, print_function, unicode_literals 4 | 5 | from .base import BaseUserCore 6 | from .pubkey import PublicKey 7 | from .related import BaseUserRelatedCore 8 | 9 | __all__ = ['BaseUserCore', 'PublicKey', 'BaseUserRelatedCore'] 10 | -------------------------------------------------------------------------------- /src/backend/main/py.main/caliopen_main/tests/fixtures/vcard/rfc2425-2.vcard: -------------------------------------------------------------------------------- 1 | begin:VCARD 2 | source:ldap://cn=bjorn%20Jensen, o=university%20of%20Michigan, c=US 3 | name:Bjorn Jensen 4 | fn:Bj=F8rn Jensen 5 | n:Jensen;Bj=F8rn 6 | email;type=internet:bjorn@umich.edu 7 | tel;type=work,voice,msg:+1 313 747-4454 8 | key;type=x509;encoding=B:dGhpcyBjb3VsZCBiZSAKbXkgY2VydGlmaWNhdGUK 9 | end:VCARD 10 | -------------------------------------------------------------------------------- /src/frontend/web_application/server/api/lib/sub-request-manager.js: -------------------------------------------------------------------------------- 1 | const CALIOPEN_SUBREQUEST = 'X-Caliopen-SSR'; 2 | const CALIOPEN_SUBREQUEST_VALUE = 'SSR'; 3 | 4 | export const getSubRequestHeaders = () => ({ 5 | [CALIOPEN_SUBREQUEST]: CALIOPEN_SUBREQUEST_VALUE, 6 | }); 7 | 8 | export const isSubRequest = (req) => 9 | req.headers[CALIOPEN_SUBREQUEST] === CALIOPEN_SUBREQUEST_VALUE; 10 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/components/DropdownMenu/style.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/common'; 2 | @import '../../styles/object/o-triangle'; 3 | 4 | .m-dropdown-menu { 5 | background-color: $co-color__fg__back; 6 | 7 | &--has-triangle { 8 | &::before { 9 | @include o-triangle('top', 1rem, $co-color__primary--lower); 10 | 11 | right: 1rem; 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/frontend/web_application/test/msw-handlers/tags.ts: -------------------------------------------------------------------------------- 1 | // eslint-disable-next-line import/no-extraneous-dependencies 2 | import { rest } from 'msw'; 3 | 4 | import tags from '../fixtures/tags/data.json'; 5 | 6 | export const tagsHandlers = [ 7 | rest.get('/api/v2/tags', (req, res, ctx) => { 8 | return res(ctx.json({ tags, total: tags.length }), ctx.status(200)); 9 | }), 10 | ]; 11 | -------------------------------------------------------------------------------- /src/backend/components/py.data/caliopen_data/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | from .provider import DataProvider, FileDataProvider, ESProvider 4 | from .interface import IDataProvider 5 | from .store import save_file 6 | 7 | __version__ = '0.23.0' 8 | 9 | 10 | __all__ = ['IDataProvider', 'DataProvider', 11 | 'FileDataProvider', 'ESProvider', 12 | 'save_file'] 13 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/components/TextareaFieldGroup/style.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/common'; 2 | @import '../../styles/object/o-form-element'; 3 | 4 | .m-textarea-field-group { 5 | &__label { 6 | display: block; 7 | margin-bottom: map_get($co-form__spacing, 'small'); 8 | } 9 | 10 | &__errors { 11 | margin-top: map_get($co-form__spacing, 'medium'); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/RemoteIdentitySettings/components/NewIdentity/provider-list.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../styles/common'; 2 | @import '../../../../styles/vendor/bootstrap_foundation-sites'; 3 | 4 | .m-provider-list { 5 | &__provider { 6 | margin-top: map_get($co-margin_, 'xsmall'); 7 | 8 | &:first-of-type { 9 | margin-top: unset; 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/services/username-utils/username-availability.ts: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | 3 | export const checkAvailability = async (username: string) => { 4 | const response = await axios.get('/api/v2/username/isAvailable', { 5 | params: { username }, 6 | headers: { 'X-Requested-With': 'XMLHttpRequest' }, 7 | }); 8 | return response.data.available; 9 | }; 10 | -------------------------------------------------------------------------------- /src/backend/defs/nats-messages/inboundSMTP_deliver_msg.yaml: -------------------------------------------------------------------------------- 1 | # this is the model of the json payload that must be sent to 'inboundSMTP' subject on NATS 2 | # to trigger incoming email processing for an user, after the raw email has been accepted, stored and indexed by email broker 3 | order: process_email_message 4 | user_id: 1aae81ea-2f21-483e-8e68-b4fcf664df5a 5 | message_id: 1aae81ea-2f21-483e-8e68-b4fcf664df5a -------------------------------------------------------------------------------- /src/backend/main/go.main/facilities/REST/username.go: -------------------------------------------------------------------------------- 1 | // Copyleft (ɔ) 2017 The Caliopen contributors. 2 | // Use of this source code is governed by a GNU AFFERO GENERAL PUBLIC 3 | // license (AGPL) that can be found in the LICENSE file. 4 | 5 | package REST 6 | 7 | func (rest *RESTfacility) UsernameIsAvailable(username string) (bool, error) { 8 | return rest.store.UsernameIsAvailable(username) 9 | } 10 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/contact/actions/loadMoreContacts.ts: -------------------------------------------------------------------------------- 1 | import { AppDispatch } from 'src/types'; 2 | 3 | import { getNextOffset, requestContacts } from '../store/reducer'; 4 | 5 | export const loadMoreContacts = () => (dispatch: AppDispatch, getState) => { 6 | const offset = getNextOffset(getState().contacts); 7 | 8 | return dispatch(requestContacts({ offset })); 9 | }; 10 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/remoteIdentity/services/getProvider.js: -------------------------------------------------------------------------------- 1 | import getClient from '../../../services/api-client'; 2 | 3 | export const getProvider = ({ providerName, identifier }) => 4 | getClient() 5 | .get( 6 | `/api/v2/providers/${providerName}?identifier=${encodeURIComponent( 7 | identifier 8 | )}` 9 | ) 10 | .then((payload) => payload.data); 11 | -------------------------------------------------------------------------------- /src/frontend/web_application/test/fixtures/device/index.ts: -------------------------------------------------------------------------------- 1 | import { STATUS_UNVERIFIED } from 'src/modules/device'; 2 | import { Device } from 'src/modules/device/types'; 3 | 4 | export function generateDevice(): Device { 5 | return { 6 | device_id: 'aunrsite', 7 | name: 'My Device', 8 | status: STATUS_UNVERIFIED, 9 | type: 'other', 10 | user_agent: 'whatever', 11 | }; 12 | } 13 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/Discussion/components/InstantMessage/instant-message-participants.scss: -------------------------------------------------------------------------------- 1 | .m-instant-message-participants { 2 | width: auto; 3 | margin-right: 0; 4 | 5 | &__to, 6 | &__from { 7 | display: block; 8 | font-size: 0.825rem; 9 | } 10 | 11 | &__from { 12 | font-size: 0.875rem; 13 | } 14 | 15 | &__to { 16 | color: #a7abad; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/contact/services/form.ts: -------------------------------------------------------------------------------- 1 | import { ContactFormData } from '../types'; 2 | 3 | export const getNewContact = (): ContactFormData => ({ 4 | name_prefix: '', 5 | given_name: '', 6 | family_name: '', 7 | name_suffix: '', 8 | organizations: [], 9 | identities: [], 10 | infos: {}, 11 | emails: [], 12 | phones: [], 13 | ims: [], 14 | addresses: [], 15 | }); 16 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/routing/services/findTabbableRouteConfig.js: -------------------------------------------------------------------------------- 1 | import { matchPath } from 'react-router-dom'; 2 | import { flattenRouteConfig } from './flattenRouteConfig'; 3 | 4 | export const findTabbableRouteConfig = ({ pathname, routes }) => 5 | flattenRouteConfig(routes).find( 6 | ({ tab, path, exact, strict }) => 7 | !!tab && matchPath(pathname, { path, exact, strict }) 8 | ); 9 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/View/components/MessageSelector/style.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../styles/common'; 2 | 3 | .m-message-selector { 4 | display: flex; 5 | align-items: center; 6 | justify-content: flex-end; 7 | max-width: $co-site-width; 8 | height: $co-component__height; 9 | margin: 0 auto; 10 | 11 | &__checkbox { 12 | margin: auto $co-component__spacing; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/contact/components/AddFormFieldForm/style.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../styles/common'; 2 | @import '../../../../styles/vendor/bootstrap_foundation-sites'; 3 | 4 | .m-add-form-field-form { 5 | &__col-button { 6 | @include flex-grid-size(shrink); 7 | } 8 | 9 | @include breakpoint(medium) { 10 | &__legend { 11 | display: none; 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/styles/object/o-navigation.scss: -------------------------------------------------------------------------------- 1 | @import '../common'; 2 | 3 | $l-navigation-item__border-width: 0.25rem; 4 | $l-navigation__height: $co-component__height + 2 * 5 | $l-navigation-item__border-width; 6 | 7 | @mixin o-navigation-wrapper { 8 | z-index: $l-z-index__navbar; 9 | 10 | &--sticky { 11 | position: fixed; 12 | top: 0; 13 | width: 100%; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/frontend/web_application/server/auth/router/index.js: -------------------------------------------------------------------------------- 1 | import { Router as createRouter } from 'express'; 2 | import createSigninRouting from './signin'; 3 | import createSignupRouting from './signup'; 4 | 5 | const getRouter = () => { 6 | const router = createRouter(); 7 | createSigninRouting(router); 8 | createSignupRouting(router); 9 | 10 | return router; 11 | }; 12 | 13 | export default getRouter; 14 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/components/DatePickerGroup/index.jsx: -------------------------------------------------------------------------------- 1 | import { createSelector } from 'reselect'; 2 | import { connect } from 'react-redux'; 3 | import Presenter from './presenter'; 4 | 5 | const i18nSelector = (state) => state.i18n; 6 | const mapStateToProps = createSelector([i18nSelector], (i18n) => ({ 7 | locale: i18n.locale, 8 | })); 9 | 10 | export default connect(mapStateToProps)(Presenter); 11 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/message/types.d.ts: -------------------------------------------------------------------------------- 1 | import { Participant } from './models/Participant'; 2 | /** 3 | * cf. NewMessageV2.ymaml 4 | */ 5 | export interface IDraftMessagePayload { 6 | message_id?: string; 7 | subject?: string; 8 | body?: string; 9 | parent_id?: string; 10 | user_identities: Array; 11 | tags?: Array; 12 | participants?: Array; 13 | } 14 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/contact/ContactBook/components/TagList/style.scss: -------------------------------------------------------------------------------- 1 | @import 'src/styles/vendor/bootstrap_foundation-sites'; 2 | 3 | .m-tag-list { 4 | &__tag { 5 | color: $co-color__fg__text--high; 6 | font-weight: 400; 7 | line-height: $co-font__line-height; 8 | 9 | &--active { 10 | color: $co-color__fg__text; 11 | font-weight: 600; 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/backend/defs/rest-api/objects/NewOrganization.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | type: object 3 | properties: 4 | department: 5 | type: string 6 | is_primary: 7 | type: boolean 8 | job_description: 9 | type: string 10 | label: 11 | type: string 12 | name: 13 | type: string 14 | title: 15 | type: string 16 | type: 17 | type: string 18 | required: 19 | - name 20 | additionalProperties: false 21 | 22 | -------------------------------------------------------------------------------- /src/frontend/maintenance/src/assets/scss/style.scss: -------------------------------------------------------------------------------- 1 | @import 'params/variables'; 2 | @import 'params/images'; 3 | @import 'params/fonts'; 4 | @import 'params/grid'; 5 | @import 'parts/global'; 6 | @import 'parts/header'; 7 | @import 'parts/front'; 8 | @import 'parts/devices'; 9 | @import 'parts/body'; 10 | @import 'parts/form'; 11 | @import 'parts/roadmap'; 12 | @import 'parts/footer'; 13 | @import 'parts/mautic-form'; 14 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/components/TextList/style.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/common'; 2 | 3 | .m-text-list { 4 | list-style: none; 5 | margin: 0; 6 | padding: 0; 7 | 8 | &__item { 9 | color: $co-color__fg__text--low; 10 | font-size: $co-font__size; 11 | line-height: $co-font__line-height; 12 | 13 | &--large { 14 | line-height: $co-component__height; 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/control/components/PageActions/style.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../styles/common'; 2 | @import '../../../../styles/util/flex-grid'; 3 | 4 | .m-page-actions { 5 | @include flex-grid-row; 6 | 7 | &__action-btns { 8 | @include flex-grid-size(shrink); 9 | 10 | margin-right: $co-margin; 11 | } 12 | 13 | &__search-field { 14 | @include flex-grid-size; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/routing/services/flattenRouteConfig.js: -------------------------------------------------------------------------------- 1 | export const flattenRouteConfig = (routes) => 2 | routes.reduce((acc, route) => { 3 | const { routes: subRoutes, ...routeConfig } = route; 4 | let flattened = [...acc, routeConfig]; 5 | if (subRoutes) { 6 | flattened = [...flattened, ...flattenRouteConfig(subRoutes)]; 7 | } 8 | 9 | return flattened; 10 | }, []); 11 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/Discussion/components/InstantMessage/instant-message-author.scss: -------------------------------------------------------------------------------- 1 | .m-instant-message-author { 2 | display: flex; 3 | flex-direction: column; 4 | align-content: center; 5 | overflow: hidden; 6 | text-align: center; 7 | 8 | &__avatar { 9 | margin-bottom: 0.25rem; 10 | } 11 | 12 | &__time { 13 | color: #a7abad; 14 | font-size: 0.625rem; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/Timeline/components/DiscussionSelector/style.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../styles/common'; 2 | 3 | .m-discussion-selector { 4 | display: flex; 5 | align-items: center; 6 | justify-content: flex-end; 7 | max-width: $co-site-width; 8 | height: $co-component__height; 9 | margin: 0 auto; 10 | 11 | &__checkbox { 12 | margin: auto $co-component__spacing; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /devtools/api-mock/local_identities/data.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "credentials": {}, 4 | "display_name": "Jown d'eau", 5 | "identity_id": "b7a715aa-8fff-4083-9dab-0c85b2634c0b", 6 | "identifier": "john@caliopen.local", 7 | "infos": {}, 8 | "last_check": "0001-01-01T00:00:00Z", 9 | "protocol": "smtp", 10 | "status": "active", 11 | "type": "local", 12 | "user_id": "u-john-01" 13 | } 14 | ] 15 | -------------------------------------------------------------------------------- /src/backend/defs/rest-api/objects/Actions.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | type: object 3 | properties: 4 | actions: 5 | type: array 6 | items: 7 | type: string 8 | enum: 9 | - send 10 | - set_read 11 | - set_unread 12 | - reset_password 13 | - delete 14 | - device-validation 15 | params: 16 | type: object 17 | additionalProperties: false 18 | required: 19 | - actions 20 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/avatar/services/stylesheet-helper/index.js: -------------------------------------------------------------------------------- 1 | export default function getClassName(word, defaultLetter = 'none') { 2 | let letter = defaultLetter; 3 | 4 | if (word) { 5 | letter = word.substr(0, 1).toLowerCase(); 6 | } 7 | 8 | if ('abcdefghijklmnopqrstuvwxyz'.indexOf(letter) === -1) { 9 | letter = defaultLetter; 10 | } 11 | 12 | return `m-letter--${letter}`; 13 | } 14 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/remoteIdentity/selectors/identitySelector.js: -------------------------------------------------------------------------------- 1 | import { createSelector } from 'reselect'; 2 | import { identityStateSelector } from './identityStateSelector'; 3 | 4 | export const identitySelector = createSelector( 5 | [identityStateSelector, (state, { identityId }) => identityId], 6 | (remoteIdentityState, identityId) => 7 | remoteIdentityState.remoteIdentitiesById[identityId] 8 | ); 9 | -------------------------------------------------------------------------------- /src/backend/main/go.backends/TagsInterfaces.go: -------------------------------------------------------------------------------- 1 | package backends 2 | 3 | import ( 4 | . "github.com/CaliOpen/Caliopen/src/backend/defs/go-objects" 5 | ) 6 | 7 | type TagsStorage interface { 8 | RetrieveUserTags(user_id string) (tags []Tag, err error) 9 | CreateTag(tag *Tag) error 10 | RetrieveTag(user_id, tag_id string) (tag Tag, err error) 11 | UpdateTag(tag *Tag) error 12 | DeleteTag(user_id, tag_id string) error 13 | } 14 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/device/actions/verifyDevice.js: -------------------------------------------------------------------------------- 1 | import { verifyDevice as verifyDeviceBase } from '../../../store/modules/device'; 2 | import { requestDevice } from './requestDevice'; 3 | 4 | export const verifyDevice = 5 | ({ device }) => 6 | async (dispatch) => { 7 | await dispatch(verifyDeviceBase({ device })); 8 | 9 | return dispatch(requestDevice({ deviceId: device.device_id })); 10 | }; 11 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/message/services/sortMessages.js: -------------------------------------------------------------------------------- 1 | // Array.prototype.sort() is destructive, hence we need a copy of messages array. 2 | export const sortMessages = (messages, reversed = false) => 3 | [...messages].sort((a, b) => { 4 | if (reversed) { 5 | return new Date(b.date_sort) - new Date(a.date_sort); 6 | } 7 | 8 | return new Date(a.date_sort) - new Date(b.date_sort); 9 | }); 10 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/user/components/UserMenu/style.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../styles/common'; 2 | @import '../../../../styles/vendor/bootstrap_foundation-sites'; 3 | 4 | .m-user-menu { 5 | &__user-info { 6 | margin-top: $co-component__spacing; 7 | } 8 | 9 | &__button-label { 10 | display: none; 11 | 12 | @include breakpoint(medium) { 13 | display: inline; 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/RemoteIdentitySettings/components/RemoteIdentityEmail/style.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../styles/common'; 2 | @import '../../../../styles/vendor/bootstrap_foundation-sites'; 3 | 4 | .m-remote-identity-email { 5 | &__action { 6 | &:not(:first-child) { 7 | margin-left: $co-component__spacing; 8 | } 9 | 10 | &--push-right { 11 | float: right; 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/frontend/web_application/template/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | CaliOpen 8 | %HEAD% 9 | 10 | 11 |
%MARKUP%
12 | %BODY_SCRIPT% 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/backend/defs/rest-api/objects/ECKey.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | type: object 3 | properties: 4 | curve: 5 | type: string 6 | enum: 7 | - P-256 8 | - P-384 9 | - P-512 10 | hash: 11 | type: string 12 | enum: 13 | - SHA256 14 | - SHA384 15 | - SHA512 16 | x: 17 | type: string 18 | y: 19 | type: string 20 | required: 21 | - curve 22 | - x 23 | - y 24 | additionalProperties: false 25 | -------------------------------------------------------------------------------- /src/backend/tools/py.doc/caliopen_api_doc/swagger-ui/lib/jquery.slideto.min.js: -------------------------------------------------------------------------------- 1 | (function(b){b.fn.slideto=function(a){a=b.extend({slide_duration:"slow",highlight_duration:3E3,highlight:true,highlight_color:"#FFFF99"},a);return this.each(function(){obj=b(this);b("body").animate({scrollTop:obj.offset().top},a.slide_duration,function(){a.highlight&&b.ui.version&&obj.effect("highlight",{color:a.highlight_color},a.highlight_duration)})})}})(jQuery); 2 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/layouts/Page/style.scss: -------------------------------------------------------------------------------- 1 | .l-page { 2 | &__main-actions { 3 | padding-top: 1.625rem; 4 | padding-bottom: 1.25rem; 5 | } 6 | } 7 | 8 | // .header-device { 9 | // background-color: #2bc1ac; 10 | // height: 40px; 11 | // line-height: 40px; 12 | // font-size: 14px; 13 | // 14 | // &, 15 | // .m-link { 16 | // color: black; 17 | // font-weight: normal; 18 | // } 19 | // } 20 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/device/index.ts: -------------------------------------------------------------------------------- 1 | export * from './actions/requestDevice'; 2 | export * from './actions/requestDevices'; 3 | export * from './actions/revokeDevice'; 4 | export * from './actions/saveDevice'; 5 | export * from './actions/verifyDevice'; 6 | export * from './services/ecdsa'; 7 | export * from './services/storage'; 8 | export * from './services/status'; 9 | export * from './services/clientDevice'; 10 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/UserProfile/components/ProfileForm/style.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../styles/common'; 2 | @import '../../../../styles/vendor/bootstrap_foundation-sites'; 3 | 4 | .s-profile-form { 5 | display: grid; 6 | column-gap: map_get($co-margin_, 'xsmall'); 7 | row-gap: map_get($co-margin_, 'xsmall'); 8 | 9 | @include breakpoint(medium) { 10 | grid-template-columns: auto auto; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/backend/defs/rest-api/objects/DeviceLocation.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | type: object 3 | properties: 4 | address: 5 | type: string 6 | country: 7 | type: string 8 | device_id: 9 | type: string 10 | type: 11 | type: string 12 | default: other 13 | enum: 14 | - other 15 | - home 16 | - work 17 | - public 18 | user_id: 19 | type: string 20 | required: 21 | - address 22 | additionalProperties: false 23 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/layouts/Page/components/Navigation/withTabs.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { TabConsumer } from '../../../../modules/tab'; 3 | 4 | export const withTabs = () => (C) => 5 | function (props) { 6 | return ( 7 | ( 9 | 10 | )} 11 | /> 12 | ); 13 | }; 14 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/form/services/validators.ts: -------------------------------------------------------------------------------- 1 | import { withI18nProps } from '@lingui/react'; 2 | 3 | export const validateRequired = 4 | (i18n: withI18nProps['i18n']) => 5 | (value: string): string | undefined => { 6 | if (!value) { 7 | return i18n._(/* i18n */ 'form-validation.required', undefined, { 8 | message: 'Required', 9 | }); 10 | } 11 | 12 | return undefined; 13 | }; 14 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/tags/store/selectors.ts: -------------------------------------------------------------------------------- 1 | import { RootState } from 'src/store/reducer'; 2 | import { TagState } from './reducer'; 3 | 4 | /** 5 | * @deprecated 6 | */ 7 | export const stateSelector = (state: RootState): TagState => state.tag; 8 | 9 | /** 10 | * @deprecated 11 | */ 12 | export const shouldFetchSelector = (state: RootState) => 13 | ['idle', 'invalidated'].includes(stateSelector(state).status); 14 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/Discussion/components/AddParticipantsToContactBook/add-participants-dropdown.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../styles/vendor/bootstrap_foundation-sites'; 2 | @import '../../../../styles/common'; 3 | 4 | .m-add-participants-dropdown { 5 | &__label { 6 | vertical-align: middle; 7 | } 8 | 9 | @include breakpoint(small only) { 10 | &__label { 11 | max-width: 87%; 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/RemoteIdentitySettings/components/NewIdentity/new-identity.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../styles/common'; 2 | 3 | .m-new-identity { 4 | &__main-help { 5 | color: $co-color__fg__text--higher; 6 | } 7 | 8 | &__email-form { 9 | margin-top: map_get($co-margin_, 'xsmall'); 10 | padding: map_get($co-margin_, 'xsmall'); 11 | background-color: $co-color__bg__back--higher; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/styles/object/o-hidden-element.scss: -------------------------------------------------------------------------------- 1 | @mixin o-hidden-element--input-file { 2 | display: block; 3 | position: absolute; 4 | top: 0; 5 | right: 0; 6 | min-width: 100%; 7 | min-height: 100%; 8 | font-size: 999px; 9 | text-align: right; 10 | cursor: inherit; 11 | opacity: 0; 12 | filter: alpha(opacity=0); 13 | } 14 | 15 | @mixin o-hidden-element--label { 16 | position: relative; 17 | } 18 | -------------------------------------------------------------------------------- /devtools/api-mock/devices/data.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "device_id": "00001", 4 | "ecdsa_key": { 5 | "curve": "P-256", 6 | "hash": "SHA256", 7 | "x": "fd73920f7e2ad3ce524b5b08cab21357dd6a4d7d5d3c267e42a834d8ac1af244", 8 | "y": "1bf08f940c720b5a021863f03029cbf62ea7a4837460da957be9f4704eff76bd" 9 | }, 10 | "status": "unverified", 11 | "name": "device to revoke", 12 | "type": "smartphone" 13 | } 14 | ] 15 | -------------------------------------------------------------------------------- /src/frontend/web_application/server/express-react/index.js: -------------------------------------------------------------------------------- 1 | import ErrorComponent from '../error/components/Error'; 2 | import createEngine from './create-engine'; 3 | import View from './view'; 4 | 5 | export const configure = (app) => { 6 | app.set('view', View); 7 | app.set('view engine', 'component'); 8 | app.engine( 9 | 'component', 10 | createEngine({ 11 | 'error.component': ErrorComponent, 12 | }) 13 | ); 14 | }; 15 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/components/Icon/style.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/common'; 2 | @import '../../styles/vendor/bootstrap_font-awesome'; 3 | 4 | .m-icon { 5 | &--spaced { 6 | margin-right: calc($co-margin / 4); 7 | margin-left: calc($co-margin / 4); 8 | } 9 | 10 | &--right-spaced { 11 | margin-right: calc($co-margin / 4); 12 | } 13 | 14 | &--svg svg { 15 | width: 1em; 16 | height: 1em; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/device/hooks/useDevice.ts: -------------------------------------------------------------------------------- 1 | import { useSelector } from 'src/store/reducer'; 2 | import { selectDevice } from '../selectors'; 3 | import { useDevices } from './useDevices'; 4 | 5 | export function useDevice(id: string) { 6 | const { isFetching } = useDevices(); 7 | const device = useSelector((state) => selectDevice(state, id)); 8 | 9 | return { 10 | isFetching, 11 | device, 12 | }; 13 | } 14 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/encryption/actions/fetchRemoteKeys.js: -------------------------------------------------------------------------------- 1 | import { requestPublicKeys } from '../../../store/modules/public-key'; 2 | import { tryCatchAxiosAction } from '../../../services/api-client'; 3 | 4 | export const fetchRemoteKeys = (contactIds) => (dispatch) => 5 | Promise.all( 6 | contactIds.map((contactId) => 7 | tryCatchAxiosAction(() => dispatch(requestPublicKeys({ contactId }))) 8 | ) 9 | ); 10 | -------------------------------------------------------------------------------- /devtools/kubernetes/services/external-python-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: apiv1 5 | spec: 6 | ports: 7 | - name: apiv1 8 | protocol: "TCP" 9 | port: 6543 10 | selector: {} 11 | --- 12 | 13 | kind: Endpoints 14 | apiVersion: v1 15 | metadata: 16 | name: apiv1 17 | subsets: 18 | - addresses: 19 | - ip: 172.17.0.1 20 | ports: 21 | - port: 6543 22 | name: "apiv1" 23 | -------------------------------------------------------------------------------- /devtools/storybook/stories/presenters/Code.jsx: -------------------------------------------------------------------------------- 1 | import React, { PropTypes } from 'react'; 2 | 3 | const style = { 4 | code: { 5 | margin: '1rem', 6 | padding: '1rem', 7 | backgroundColor: '#333', 8 | }, 9 | }; 10 | 11 | const Code = ({ children }) => ( 12 |
{children}
13 | ); 14 | 15 | Code.propTypes = { 16 | children: PropTypes.node.isRequired, 17 | }; 18 | 19 | export default Code; 20 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/components/BlockList/index.spec.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { shallow } from 'enzyme'; 3 | import BlockList from '.'; 4 | 5 | describe('component BlockList', () => { 6 | it('render', () => { 7 | const comp = shallow({['Foo', 'Bar']}); 8 | 9 | expect(comp.find('li').length).toEqual(2); 10 | expect(comp.find('li').first().text()).toEqual('Foo'); 11 | }); 12 | }); 13 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/control/components/ComposeButton/style.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../styles/common'; 2 | @import '../../../../styles/vendor/bootstrap_foundation-sites'; 3 | 4 | .m-control-compose-button { 5 | &__label { 6 | display: none; 7 | } 8 | 9 | @include breakpoint(medium) { 10 | &__label { 11 | display: inline; 12 | } 13 | 14 | &__icon { 15 | display: none; 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/frontend/web_application/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | ## Development 4 | 5 | ### installation 6 | 7 | ``` 8 | yarn 9 | ``` 10 | 11 | ### USAGE 12 | 13 | **For web** 14 | 15 | ``` 16 | yarn start 17 | ``` 18 | 19 | **For web (without SSR)** 20 | 21 | ``` 22 | yarn start:dev 23 | ``` 24 | 25 | **For desktop** 26 | 27 | ``` 28 | yarn start:desktop 29 | ``` 30 | 31 | Open console with `ctrl+maj+I`. 32 | To see changes:`ctrl+R` . 33 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/layouts/Page/components/Navbar/components/ItemButton/style.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../../../styles/common'; 2 | 3 | .m-item-button { 4 | display: inline-block; 5 | color: $co-color__primary--low; 6 | line-height: $co-component__height; 7 | 8 | &:hover { 9 | background: none; 10 | color: $co-color__primary--high; 11 | } 12 | 13 | &:active { 14 | color: $co-color__primary--lower; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/avatar/components/ContactAvatarLetter/index.spec.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { shallow } from 'enzyme'; 3 | import ContactAvatarLetter from '.'; 4 | 5 | describe('component ContactAvatarLetter', () => { 6 | it('render', () => { 7 | const comp = shallow(); 8 | 9 | expect(comp.find('AvatarLetter').length).toEqual(1); 10 | }); 11 | }); 12 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/identity/index.js: -------------------------------------------------------------------------------- 1 | export * from './actions/getIdentities'; 2 | export * from './actions/getLocalIdentities'; 3 | export * from './actions/getRemoteIdentities'; 4 | export { default as WithIdentities } from './components/WithIdentities'; 5 | export * from './hoc/withIdentities'; 6 | export * from './selectors/identitiesSelector'; 7 | export * from './services/identityToParticipant'; 8 | export * from './hooks/useIdentities'; 9 | -------------------------------------------------------------------------------- /src/backend/defs/go-objects/privacy_features.go: -------------------------------------------------------------------------------- 1 | // Copyleft (ɔ) 2017 The Caliopen contributors. 2 | // Use of this source code is governed by a GNU AFFERO GENERAL PUBLIC 3 | // license (AGPL) that can be found in the LICENSE file. 4 | 5 | package objects 6 | 7 | type PrivacyFeatures map[string]string 8 | 9 | func (pf *PrivacyFeatures) UnmarshalMap(input map[string]interface{}) { 10 | for k, v := range input { 11 | (*pf)[k] = v.(string) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/components/Link/index.spec.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import { render, screen } from '@testing-library/react'; 3 | import { AllProviders } from 'test/providers'; 4 | import Link from '.'; 5 | 6 | describe('component Link', () => { 7 | it('render', () => { 8 | render(Foo, { wrapper: AllProviders }); 9 | 10 | expect(screen.getByText('Foo')).toBeInTheDocument(); 11 | }); 12 | }); 13 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/message/actions/requestMessages.js: -------------------------------------------------------------------------------- 1 | import { requestMessages as requestMessagesBase } from '../../../store/modules/message'; 2 | import { tryCatchAxiosAction } from '../../../services/api-client'; 3 | 4 | // @deprecated: use fetchMessages instead or request collection directly 5 | export const requestMessages = 6 | (...params) => 7 | (dispatch) => 8 | tryCatchAxiosAction(() => dispatch(requestMessagesBase(...params))); 9 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/notification/selectors/messageNotificationsSelector.js: -------------------------------------------------------------------------------- 1 | import { createSelector } from 'reselect'; 2 | 3 | const MESSAGE_NOTIFICATION_TYPE = 'new_message'; 4 | 5 | export const messageNotificationsSelector = createSelector( 6 | [(state) => state.notification], 7 | (notificationState) => 8 | notificationState.notifications.filter( 9 | (notif) => notif.type === MESSAGE_NOTIFICATION_TYPE 10 | ) 11 | ); 12 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/contact/components/PublicKeyForm/style.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../styles/common'; 2 | @import '../../../../styles/vendor/bootstrap_foundation-sites'; 3 | 4 | .m-public-key-form { 5 | padding-left: map_get($co-form__spacing, 'medium'); 6 | background-color: $co-color__bg__back--higher; 7 | 8 | &__actions { 9 | display: flex; 10 | } 11 | 12 | &__button-cancel { 13 | margin-left: auto; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/backend/main/py.main/caliopen_main/message/parameters/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import absolute_import, print_function, unicode_literals 3 | from .attachment import Attachment 4 | from .draft import Draft 5 | from .external_references import ExternalReferences 6 | from .message import NewMessage, NewInboundMessage, Message 7 | 8 | 9 | __all__ = ['Attachment', 'Draft', 'ExternalReferences', 10 | 'NewMessage', 'Message'] 11 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/message/actions/setMessageRead.js: -------------------------------------------------------------------------------- 1 | import { postActions, requestMessage } from '../../../store/modules/message'; 2 | 3 | export const setMessageRead = 4 | ({ message, isRead = true }) => 5 | async (dispatch) => { 6 | const action = isRead ? 'set_read' : 'set_unread'; 7 | 8 | await dispatch(postActions({ message, actions: [action] })); 9 | 10 | return dispatch(requestMessage(message.message_id)); 11 | }; 12 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/remoteIdentity/selectors/identitiesSelector.js: -------------------------------------------------------------------------------- 1 | import { createSelector } from 'reselect'; 2 | import { identityStateSelector } from './identityStateSelector'; 3 | 4 | export const identitiesSelector = createSelector( 5 | [identityStateSelector], 6 | (remoteIdentityState) => 7 | remoteIdentityState.remoteIdentities.map( 8 | (identityId) => remoteIdentityState.remoteIdentitiesById[identityId] 9 | ) 10 | ); 11 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/Discussion/components/ReplyExcerpt/style.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../styles/common'; 2 | @import '../../../../styles/object/o-form-element'; 3 | 4 | .m-reply-excerpt { 5 | width: 100%; 6 | height: $co-component__height; 7 | padding: $co-component__spacing; 8 | background: $co-color__fg__back; 9 | overflow: hidden; 10 | text-overflow: ellipsis; 11 | color: $co-color__fg__text; 12 | white-space: nowrap; 13 | } 14 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/TagsSettings/components/TagSearch/style.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../styles/common'; 2 | @import '../../../../styles/vendor/bootstrap_foundation-sites'; 3 | 4 | .m-add-tag { 5 | @include flex-grid-row($size: expanded); 6 | 7 | margin-bottom: map_get($co-form__spacing, 'large'); 8 | 9 | &__input { 10 | @include flex-grid-size; 11 | } 12 | 13 | &__button { 14 | @include flex-grid-size(shrink); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/backend/defs/go-objects/actions_payload.go: -------------------------------------------------------------------------------- 1 | // Copyleft (ɔ) 2018 The Caliopen contributors. 2 | // Use of this source code is governed by a GNU AFFERO GENERAL PUBLIC 3 | // license (AGPL) that can be found in the LICENSE file. 4 | // 5 | // only struct and interfaces definitions in this pkg 6 | 7 | package objects 8 | 9 | type ActionsPayload struct { 10 | Actions []string `json:"actions"` 11 | Params interface{} `json:"params"` 12 | UserId string 13 | } 14 | -------------------------------------------------------------------------------- /src/backend/main/py.main/caliopen_main/protocol/core/provider.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """Caliopen device core classes.""" 3 | from __future__ import absolute_import, print_function, unicode_literals 4 | 5 | from caliopen_storage.core import BaseCore 6 | 7 | from ..store.provider import Provider as ModelProvider 8 | 9 | 10 | class Provider(BaseCore): 11 | """Provider core class""" 12 | 13 | _model_class = ModelProvider 14 | _pkey_name = "name" 15 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/tab/index.js: -------------------------------------------------------------------------------- 1 | export { default as TabProvider } from './components/TabProvider'; 2 | export { default as TabConsumer } from './components/TabConsumer'; 3 | export * from './hoc/withCurrentTab'; 4 | export * from './hoc/withCloseTab'; 5 | export * from './hoc/withUpdateTab'; 6 | export * from './hooks/useCloseTab'; 7 | export * from './hooks/useCurentTab'; 8 | export * from './model/Tab'; 9 | export * from './services/getTabUrl'; 10 | -------------------------------------------------------------------------------- /devtools/kubernetes/services/cassandra-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: cassandra 5 | spec: 6 | type: NodePort 7 | selector: 8 | app: cassandra 9 | ports: 10 | - name: "9042" 11 | port: 9042 12 | targetPort: 9042 13 | nodePort: 9042 14 | - name: "9160" 15 | port: 9160 16 | targetPort: 9160 17 | nodePort: 9160 18 | - name: "7000" 19 | port: 7000 20 | targetPort: 7000 21 | nodePort: 7000 22 | -------------------------------------------------------------------------------- /doc/welcome.md: -------------------------------------------------------------------------------- 1 | # The Welcome Guide 2 | 3 | You are involved in Caliopen developments, you are at the right place. 4 | 5 | ## Git 6 | 7 | Please configure your git to sign your commits with GPG. 8 | 9 | ``` 10 | git config commit.gpgsign true 11 | ``` 12 | 13 | Publish your public key on [github](https://github.com/settings/keys) 14 | 15 | _Some info to help you with gpg and signed commits: https://help.github.com/en/articles/managing-commit-signature-verification_ 16 | -------------------------------------------------------------------------------- /src/backend/Dockerfile.caliopen-python: -------------------------------------------------------------------------------- 1 | # Base Python image to build Caliopen Python applications 2 | # Author: Caliopen 3 | # Date: 2018-07-20 4 | 5 | FROM python:2-alpine 6 | MAINTAINER Caliopen 7 | 8 | # Install gcc openssl and ffi lib 9 | RUN apk add --no-cache build-base openssl-dev libffi-dev 10 | 11 | # Install cassandra-driver regex 12 | RUN pip install --upgrade pip 13 | RUN pip install cassandra-driver==3.4.1 14 | RUN pip install regex 15 | 16 | CMD ["python2"] 17 | -------------------------------------------------------------------------------- /src/backend/defs/rest-api/objects/NewMessage.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | type: object 3 | properties: 4 | bcc_recipients: 5 | type: array 6 | items: 7 | "$ref": Recipient.yaml 8 | cc_recipients: 9 | type: array 10 | items: 11 | "$ref": Recipient.yaml 12 | reply_to: 13 | type: string 14 | subject: 15 | type: string 16 | text: 17 | type: string 18 | to_recipients: 19 | type: array 20 | items: 21 | "$ref": Recipient.yaml 22 | 23 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/avatar/components/AvatarLetter/services/stylesheet-helper/index.js: -------------------------------------------------------------------------------- 1 | export default function getClassName(word, defaultLetter = 'none') { 2 | let letter = defaultLetter; 3 | 4 | if (word) { 5 | letter = word.substr(0, 1).toLowerCase(); 6 | } 7 | 8 | if ('abcdefghijklmnopqrstuvwxyz'.indexOf(letter) === -1) { 9 | letter = letter === '+' ? 'plus' : defaultLetter; 10 | } 11 | 12 | return `m-letter--${letter}`; 13 | } 14 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/encryption/index.js: -------------------------------------------------------------------------------- 1 | export * from './actions/decryptMessage'; 2 | export * from './actions/encryptMessage'; 3 | export * from './actions/getRecipientKeys'; 4 | export { default as CheckDecryption } from './components/CheckDecryption'; 5 | export { default as LockedMessage } from './components/LockedMessage'; 6 | export * from './selectors/message'; 7 | export * from './selectors/publicKey'; 8 | export * from './services/keyring/remoteKeys'; 9 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/tags/hoc/withTags/index.jsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import { useTags } from '../../hooks/useTags'; 3 | 4 | /** 5 | * @deprecated use `useTags` instead 6 | */ 7 | const withTags = () => (WrappedComponent) => { 8 | function WithTags(props) { 9 | const { tags } = useTags(); 10 | return ; 11 | } 12 | 13 | return WithTags; 14 | }; 15 | 16 | export default withTags; 17 | -------------------------------------------------------------------------------- /src/frontend/web_application/test/server.ts: -------------------------------------------------------------------------------- 1 | import { setupServer } from 'msw/node'; 2 | import { settingsHandlers } from './msw-handlers/settings'; 3 | import { contactsHandlers } from './msw-handlers/contacts'; 4 | import { tagsHandlers } from './msw-handlers/tags'; 5 | import { userHandlers } from './msw-handlers/user'; 6 | 7 | export const server = setupServer( 8 | ...contactsHandlers, 9 | ...settingsHandlers, 10 | ...tagsHandlers, 11 | ...userHandlers 12 | ); 13 | -------------------------------------------------------------------------------- /devtools/api-mock/authentications/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "tokens": { 3 | "access_token": "de85ce575fe7f6262e0cd11582ff33ee848f1027", 4 | "expires_at": "2017-03-07T13:37:39.280870", 5 | "expires_in": 99999999999, 6 | "refresh_token": "f8576a2b8e1e6967b5a58a195b32e860fa8076ca34768d6b6e7a957ae95fff6214167af26f67455e" 7 | }, 8 | "user_id": "d46d717a-57f5-4b11-b086-11caeac05261", 9 | "username": "john", 10 | "device": { 11 | "device_id": "", 12 | "status": "" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/backend/components/py.tag/caliopen_tag/models_manager/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """Caliopen tagging model manager logic.""" 3 | from __future__ import absolute_import, print_function, unicode_literals 4 | 5 | from .manager import ModelManager 6 | from .data_manager import UsenetDataManager, ESDataManager, \ 7 | MultipleSourceDataManager 8 | 9 | __all__ = ['ModelManager', 'UsenetDataManager', 'ESDataManager', 10 | 'MultipleSourceDataManager'] 11 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/pi/components/BackgroundImage/o-background-image.scss: -------------------------------------------------------------------------------- 1 | $co-background-image__path: './assets/' !default; 2 | $co-background-image__files: ( 3 | secure: 'co_bg_secure.jpg', 4 | // public: 'co_bg_public.jpg', 5 | ); 6 | 7 | @mixin o-background-image { 8 | @each $context, $file in $co-background-image__files { 9 | &--#{$context} { 10 | background-image: url('#{$co-background-image__path}#{$file}'); 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/routing/services/getRouterHistory.js: -------------------------------------------------------------------------------- 1 | let history; 2 | export const getRouterHistory = () => { 3 | if (!history) { 4 | if (BUILD_TARGET === 'browser') { 5 | history = require('history').createBrowserHistory(); // eslint-disable-line 6 | } 7 | 8 | if (BUILD_TARGET === 'server') { 9 | history = require('history').createMemoryHistory(); // eslint-disable-line 10 | } 11 | } 12 | 13 | return history; 14 | }; 15 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/tab/hooks/useCloseTab.ts: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import { TabContext } from '../contexts/TabContext'; 3 | 4 | export function useCloseTab() { 5 | const { getCurrentTab, removeTab } = React.useContext(TabContext); 6 | 7 | function closeTab(tab?: any) { 8 | if (!tab) { 9 | return removeTab({ tab: getCurrentTab() }); 10 | } 11 | 12 | return removeTab({ tab }); 13 | } 14 | 15 | return closeTab; 16 | } 17 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/Discussion/components/QuickDraftForm/components/ToggleAdvancedFormButton/toggle-advanced-draft-button.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../../../styles/vendor/bootstrap_foundation-sites'; 2 | 3 | .m-toggle-advanced-draft-button { 4 | display: flex; 5 | flex-direction: column; 6 | align-items: center; 7 | justify-content: center; 8 | height: 100%; 9 | padding-top: 0.375rem; 10 | background-color: #07b798; 11 | font-size: 1.3rem; 12 | } 13 | -------------------------------------------------------------------------------- /devtools/kubernetes/deployments/redis-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: redis 5 | spec: 6 | replicas: 1 7 | selector: 8 | matchLabels: 9 | app: redis 10 | template: 11 | metadata: 12 | labels: 13 | type: storage 14 | tier: backend 15 | app: redis 16 | spec: 17 | containers: 18 | - image: redis 19 | name: redis 20 | ports: 21 | - containerPort: 6379 22 | -------------------------------------------------------------------------------- /src/backend/tools/py.CLI/caliopen_cli/commands/setup.py: -------------------------------------------------------------------------------- 1 | """Setup backend.""" 2 | 3 | import logging 4 | 5 | from .setup_storage import setup_storage 6 | from .setup_notifications_ttls import setup_notifications_ttls 7 | 8 | log = logging.getLogger(__name__) 9 | 10 | 11 | def setup(): 12 | """Setup backend, storage and configuration.""" 13 | log.info('Setup storage') 14 | setup_storage() 15 | log.info('Setup notification ttls') 16 | setup_notifications_ttls() 17 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/device/actions/revokeDevice.js: -------------------------------------------------------------------------------- 1 | import { removeDevice, invalidate } from '../../../store/modules/device'; 2 | import { tryCatchAxiosPromise } from '../../../services/api-client'; 3 | 4 | export const revokeDevice = 5 | ({ device }) => 6 | async (dispatch) => { 7 | const result = await tryCatchAxiosPromise( 8 | dispatch(removeDevice({ device })) 9 | ); 10 | dispatch(invalidate()); 11 | 12 | return result; 13 | }; 14 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/tab/hoc/withCurrentTab.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import TabConsumer from '../components/TabConsumer'; 3 | 4 | export const withCurrentTab = () => (C) => 5 | function (props) { 6 | return ( 7 | { 9 | const currentTab = getCurrentTab(); 10 | 11 | return ; 12 | }} 13 | /> 14 | ); 15 | }; 16 | -------------------------------------------------------------------------------- /devtools/kubernetes/deployments/nats-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: nats 5 | spec: 6 | replicas: 1 7 | selector: 8 | matchLabels: 9 | app: nats 10 | template: 11 | metadata: 12 | labels: 13 | type: nats 14 | tier: backend 15 | app: nats 16 | spec: 17 | containers: 18 | - image: nats:0.9.6 19 | name: smtp-server 20 | ports: 21 | - containerPort: 4222 22 | -------------------------------------------------------------------------------- /src/backend/defs/rest-api/paths/raws.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | raws_{raw_msg_id}: 3 | get: 4 | description: Returns a raw message 5 | tags: 6 | - messages 7 | security: 8 | - basicAuth: [] 9 | parameters: 10 | - name: raw_msg_id 11 | in: path 12 | required: true 13 | type: string 14 | produces: 15 | - text/plain 16 | responses: 17 | '200': 18 | description: the raw message 19 | schema: 20 | type: string 21 | 22 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/user/actions/getUser.js: -------------------------------------------------------------------------------- 1 | import { tryCatchAxiosAction } from '../../../services/api-client'; 2 | import { requestUser } from '../store/reducer'; 3 | import { userSelector } from '../selectors/userSelector'; 4 | 5 | export const getUser = () => async (dispatch, getState) => { 6 | const user = userSelector(getState()); 7 | 8 | if (user) { 9 | return user; 10 | } 11 | 12 | return tryCatchAxiosAction(() => dispatch(requestUser())); 13 | }; 14 | -------------------------------------------------------------------------------- /src/backend/defs/rest-api/objects/NewPostalAddress.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | type: object 3 | properties: 4 | address_id: 5 | type: string 6 | city: 7 | type: string 8 | country: 9 | type: string 10 | is_primary: 11 | type: boolean 12 | label: 13 | type: string 14 | postal_code: 15 | type: string 16 | region: 17 | type: string 18 | street: 19 | type: string 20 | type: 21 | type: string 22 | required: 23 | - city 24 | additionalProperties: false 25 | 26 | -------------------------------------------------------------------------------- /src/backend/main/go.backends/store/object_store/attachments.go: -------------------------------------------------------------------------------- 1 | // Copyleft (ɔ) 2017 The Caliopen contributors. 2 | // Use of this source code is governed by a GNU AFFERO GENERAL PUBLIC 3 | // license (AGPL) that can be found in the LICENSE file. 4 | 5 | package object_store 6 | 7 | import ( 8 | "io" 9 | ) 10 | 11 | func (mb *MinioBackend) PutAttachment(attchId string, attch io.Reader) (uri string, size int64, err error) { 12 | return mb.PutObject(attchId, mb.AttachmentBucket, attch) 13 | } 14 | -------------------------------------------------------------------------------- /src/backend/main/py.main/caliopen_main/common/parameters/tag.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """Caliopen tags parameters.""" 3 | 4 | from schematics.models import Model 5 | from schematics.types import StringType, UUIDType, DateTimeType, IntType 6 | 7 | 8 | class ResourceTag(Model): 9 | """Tag related to a resource.""" 10 | 11 | date_insert = DateTimeType() 12 | importance_level = IntType() 13 | name = StringType() 14 | tag_id = UUIDType() 15 | type = StringType() 16 | -------------------------------------------------------------------------------- /src/backend/interfaces/REST/py.server/caliopen_api/discussion/config.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import absolute_import, print_function, unicode_literals 3 | 4 | import logging 5 | 6 | log = logging.getLogger(__name__) 7 | 8 | 9 | def includeme(config): 10 | """ 11 | Serve discussion related REST API. 12 | """ 13 | 14 | config.commit() 15 | 16 | log.debug('Loading participants discussion API') 17 | config.scan('caliopen_api.discussion.participants') 18 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/user/services/isAuthenticated/index.js: -------------------------------------------------------------------------------- 1 | import cookie from 'cookie'; 2 | 3 | export const isAuthenticated = () => { 4 | if (BUILD_TARGET === 'server') { 5 | return global.user && true; 6 | } 7 | 8 | if (BUILD_TARGET === 'browser') { 9 | const { 'caliopen.web': token } = cookie.parse(document.cookie); 10 | 11 | return token && true; 12 | } 13 | 14 | throw new Error('isAuthenticated does not support the current BUILD_TARGET'); 15 | }; 16 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/services/asciify.spec.js: -------------------------------------------------------------------------------- 1 | import { asciify } from './asciify'; 2 | 3 | describe('service asciify', () => { 4 | it('asciify', () => { 5 | expect(asciify('Ñareèm')).toEqual('Nareem'); 6 | expect(asciify('Ñがarêèm ?!')).toEqual('Nareem ?!'); 7 | expect(asciify('Ñがarêè-m ?!')).toEqual('Naree-m ?!'); 8 | expect(asciify('ẹ́')).toEqual('e'); 9 | // XXX: could be better to equal `-e` 10 | expect(asciify('がé')).toEqual('e'); 11 | }); 12 | }); 13 | -------------------------------------------------------------------------------- /src/backend/main/py.main/caliopen_main/user/core/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import absolute_import, print_function, unicode_literals 3 | 4 | from .user import User, Tag, FilterRule, UserIdentity, ReservedName 5 | from .user import allocate_user_shard 6 | from .identity import IdentityLookup, IdentityTypeLookup 7 | 8 | __all__ = [ 9 | 'User', 'Tag', 'FilterRule', 'UserIdentity', 'ReservedName', 10 | 'allocate_user_shard', 'IdentityLookup', 'IdentityTypeLookup' 11 | ] 12 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/layouts/Page/components/NotificationCenter/index.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Notify } from 'react-redux-notify'; 3 | import 'react-redux-notify/dist/ReactReduxNotify.css'; 4 | import './style.scss'; 5 | 6 | const notificationCustomStyles = { 7 | containerTopRight: 'l-notification-center', 8 | }; 9 | 10 | function NotificationCenter() { 11 | return ; 12 | } 13 | 14 | export default NotificationCenter; 15 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/message/selectors/messageSelector.js: -------------------------------------------------------------------------------- 1 | import { getModuleStateSelector } from '../../../store/selectors/getModuleStateSelector'; 2 | 3 | export const messageSelector = (state, { messageId }) => 4 | getModuleStateSelector('message')(state).messagesById[messageId]; 5 | 6 | // FIXME: isfetching, isLoaded … 7 | export const shouldFetchSelector = (state, messageId) => { 8 | const message = messageSelector(state, { messageId }); 9 | 10 | return !message; 11 | }; 12 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/Discussion/components/MessageList/style.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../styles/common'; 2 | @import '../../../../styles/vendor/bootstrap_foundation-sites'; 3 | 4 | .m-message-list { 5 | &__placeholder { 6 | height: $co-component__height--large; 7 | margin-bottom: map_get($co-margin_, small); 8 | } 9 | 10 | &__load-more { 11 | text-align: center; 12 | 13 | // FIXME 14 | & .m-button { 15 | margin: 4px 0 3px; 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/contact/components/BirthdayDetails/index.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import { Icon } from 'src/components'; 3 | 4 | interface Props { 5 | birthday: string; 6 | } 7 | function BirthdayDetails({ birthday }: Props): JSX.Element { 8 | return ( 9 | 10 | {birthday && } 11 | {birthday} 12 | 13 | ); 14 | } 15 | 16 | export default BirthdayDetails; 17 | -------------------------------------------------------------------------------- /devtools/drone/test_go.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | if [ "$SRC_CHANGED" = "false" ]; 5 | then 6 | echo "No changes to backend" 7 | return 8 | fi 9 | 10 | # Respect GOPATH conventions and package imports 11 | cp -r /srv/caliopen/src/backend/* /go/src/github.com/CaliOpen/Caliopen/src/backend 12 | . devtools/drone/get_go_dependencies.sh 13 | 14 | echo Testing the following dependencies: $DEPS 15 | 16 | for dep in $DEPS; 17 | do 18 | go test github.com/CaliOpen/Caliopen/src/backend/$dep/... 19 | done 20 | -------------------------------------------------------------------------------- /devtools/drone/test_py.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | if [ "$SRC_CHANGED" = "false" ]; 5 | then 6 | echo "No changes to backend" 7 | return 8 | fi 9 | 10 | cd src/backend 11 | pip install main/py.storage components/py.pgp components/py.pi main/py.main interfaces/REST/py.server 12 | pip install interfaces/NATS/py.client tools/py.CLI tools/py.doc 13 | pip install ipdb docker-compose gitpython nose 14 | nosetests -sv main/py.main/caliopen_main/tests 15 | nosetests -sv components/py.pi/caliopen_pi/tests 16 | -------------------------------------------------------------------------------- /devtools/fixtures/vcard/multi.vcf: -------------------------------------------------------------------------------- 1 | BEGIN:VCARD 2 | VERSION:3.0 3 | FN:Patrice Tran 4 | N:Tran;Patrice;;; 5 | X-EVOLUTION-FILE-AS:Tran\, Patrice 6 | EMAIL;TYPE=OTHER:patrice@caliopen.org 7 | UID:pas-id-58AF0A5A00000000 8 | REV:2017-02-23T16:14:18Z(1) 9 | END:VCARD 10 | 11 | BEGIN:VCARD 12 | VERSION:3.0 13 | FN:Lison Ferez 14 | N:Ferez;Lison;;; 15 | X-EVOLUTION-FILE-AS:Ferez\, Lison 16 | EMAIL;TYPE=OTHER:lison@caliopen.org 17 | UID:pas-id-58AF0A5A00000001 18 | REV:2017-02-23T16:14:18Z(1) 19 | END:VCARD 20 | 21 | -------------------------------------------------------------------------------- /src/backend/Dockerfile.caliopen-go: -------------------------------------------------------------------------------- 1 | # Base GO image to build Caliopen GO applications 2 | # Author: Caliopen 3 | # Date: 2018-07-20 4 | 5 | FROM golang:1.10.3 6 | MAINTAINER Caliopen 7 | 8 | RUN go get -u github.com/kardianos/govendor 9 | RUN go install github.com/kardianos/govendor 10 | 11 | COPY ./vendor /go/src/github.com/CaliOpen/Caliopen/src/backend/vendor 12 | WORKDIR /go/src/github.com/CaliOpen/Caliopen/src/backend 13 | 14 | # Fetch dependencies needed for Caliopen GO apps 15 | RUN govendor sync -v 16 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/scenes/ForgotPassword/presenter.spec.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { shallow } from 'enzyme'; 3 | import Presenter from './presenter'; 4 | 5 | describe('scene - ForgotPassword', () => { 6 | const props = { 7 | i18n: { _: (str) => str }, 8 | }; 9 | 10 | it('render', () => { 11 | const comp = shallow() 12 | .dive() 13 | .dive(); 14 | 15 | expect(comp.text()).toContain('ForgotPasswordForm'); 16 | }); 17 | }); 18 | -------------------------------------------------------------------------------- /devtools/api-mock/bin/start: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Generate swagger specifications from JSON schema definitions 4 | 5 | set -e 6 | PROJECT_DIRECTORY="$( cd "$( dirname "${BASH_SOURCE[0]}" )/.." && pwd )" 7 | SCRIPT_PATH=${PROJECT_DIRECTORY}/node_modules/.bin/bouchon 8 | CMD="yarn start" 9 | 10 | 11 | if [[ ! -f "${SCRIPT_PATH}" ]]; then 12 | echo "You should have nodejs > 6 and yarn" 13 | 14 | (cd $PROJECT_DIRECTORY && yarn install) 15 | fi 16 | 17 | 18 | (cd $PROJECT_DIRECTORY && ${CMD}) 19 | 20 | set +e 21 | -------------------------------------------------------------------------------- /src/frontend/web_application/server/assets/index.js: -------------------------------------------------------------------------------- 1 | import express from 'express'; 2 | import favicon from 'serve-favicon'; 3 | 4 | const PUBLIC_PATHS = { 5 | '/': ['dist/server/public/', 'public/'], 6 | }; 7 | const FAVICON_PATH = 'public/favicon.ico'; 8 | 9 | export default (app) => { 10 | app.use(favicon(FAVICON_PATH)); 11 | Object.keys(PUBLIC_PATHS).forEach((target) => { 12 | PUBLIC_PATHS[target].forEach((path) => { 13 | app.use(target, express.static(path)); 14 | }); 15 | }); 16 | }; 17 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/components/TextBlock/style.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/common'; 2 | 3 | .m-text-block { 4 | display: block; 5 | overflow: hidden; 6 | text-overflow: ellipsis; 7 | 8 | &--nowrap { 9 | white-space: nowrap; 10 | } 11 | 12 | &--inline { 13 | display: inline-block; 14 | } 15 | 16 | &--small { 17 | font-size: $co-font__size--xsmall; 18 | line-height: $co-font__size--xsmall; 19 | } 20 | 21 | &--strong { 22 | font-weight: 700; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/frontend/web_application/src/modules/draftMessage/index.js: -------------------------------------------------------------------------------- 1 | export * from './actions/getDefaultIdentity'; 2 | export * from './actions/reply'; 3 | export * from './actions/requestDraft'; 4 | export * from './actions/saveDraft'; 5 | export * from './actions/sendDraft'; 6 | export { default as AttachmentManager } from './components/AttachmentManager'; 7 | export * from './models'; 8 | export * from './selectors/draft'; 9 | export * from './services/getIdentityProtocol'; 10 | export * from './services/validate'; 11 | --------------------------------------------------------------------------------