├── 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 | 
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 | 
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 | 
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 |
--------------------------------------------------------------------------------