{"id":44518791,"url":"https://github.com/grnet/agora-sp","last_synced_at":"2026-02-13T17:31:04.339Z","repository":{"id":38375480,"uuid":"119038563","full_name":"grnet/agora-sp","owner":"grnet","description":"A Service Portfolio Management Tool ","archived":false,"fork":false,"pushed_at":"2024-03-11T10:18:16.000Z","size":34132,"stargazers_count":6,"open_issues_count":8,"forks_count":5,"subscribers_count":9,"default_branch":"master","last_synced_at":"2024-03-11T11:35:19.330Z","etag":null,"topics":["api","apimas","django-application","ember-gen","material-ui"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/grnet.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2018-01-26T10:26:07.000Z","updated_at":"2024-01-22T08:48:02.000Z","dependencies_parsed_at":"2024-03-11T11:45:25.315Z","dependency_job_id":null,"html_url":"https://github.com/grnet/agora-sp","commit_stats":null,"previous_names":[],"tags_count":41,"template":false,"template_full_name":null,"purl":"pkg:github/grnet/agora-sp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grnet%2Fagora-sp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grnet%2Fagora-sp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grnet%2Fagora-sp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grnet%2Fagora-sp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/grnet","download_url":"https://codeload.github.com/grnet/agora-sp/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grnet%2Fagora-sp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29413365,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-13T06:24:03.484Z","status":"ssl_error","status_checked_at":"2026-02-13T06:23:12.830Z","response_time":78,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","apimas","django-application","ember-gen","material-ui"],"created_at":"2026-02-13T17:31:04.274Z","updated_at":"2026-02-13T17:31:04.331Z","avatar_url":"https://github.com/grnet.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Agora\n[![Build Status](https://jenkins.einfra.grnet.gr/job/AGORA/job/devel/badge/icon)](https://jenkins.einfra.grnet.gr/job/AGORA/job/devel/)\n[![Selenium Tests](https://jenkins.einfra.grnet.gr/job/AGORA/job/devel/badge/icon?config=teststatus)](https://jenkins.einfra.grnet.gr/job/AGORA/job/devel/)\n\nThe service portfolio management tool is a tool that allows a company / project to manage the portfolio of services they to maintain (offered to users / customers or internal).\nAgora provides an intuitive user interface which allows users to create/edit/update/delete their services and components. Users can login with credentials provided by the administrator, or use the shibboleth login functionality to login with their academic account.\n\n\n### Dependencies\n\n* [git](https://git-scm.com/)\n* [virualenvwrapper](https://virtualenvwrapper.readthedocs.io/en/latest/)\n* [pip](https://pypi.python.org/pypi/pip)\n* [NodeJS](https://nodejs.org/en/download/)\n* [Yarn](https://yarnpkg.com/en/docs/install)\n\n\n## Development instructions\n\n### Get the code\n\n```\ngit clone https://github.com/grnet/agora-sp.git\n```\n\n### Create a virtualenv for agora\n\n```\ncd agora\nmkvirtualenv agora\n```\n\n### Install requirements\n\nWith virtualenv activated install python dependencies:\n\n```\npip install -r requirements.txt\n```\n\nThen run `yarn` inside the `ui` directory to install npm depending libraries.\n\n### Configuration\n\n#### Backend configuration\n\nYou can create a configuration file in order to override the default settings for the agora project. The default location of the .conf file is `/etc/agora/settings.conf`\n\nThe default contents of `settings.conf` are:\n\n```\nSQLITE = {\n    'default': {\n        'ENGINE': 'django.db.backends.sqlite3',\n        'NAME': '/tmp/db.agora.sqlite3'\n    }\n}\n\nDATABASES = SQLITE\nEMAIL_FILE_PATH = '/tmp/agora/agora_emails'\nEMAIL_BACKEND = 'django.core.mail.backends.filebased.EmailBackend'\n```\n\nYou should override it with your database settings, [you can read more information here](https://docs.djangoproject.com/en/1.11/ref/databases/).\n\n\n**NOTE:** You must create a `log` folder containing a `debug.log` file in your base project directory or configure LOGGING setting with custom log options.\n\n\nFinally, you should also create a `deployment.conf` file which should specify the `root_url` attribute to reflect the url of the backend server.\n\nThe default location of `deployment.conf` is in '/etc/agora/`.\n\nExample:\n\n```\n{\n    \":root_url\": \"http://127.0.0.1:8000\"\n}\n```\n\n\n#### UI configuration\n\nYou can edit the `ui/config/environment.js` file to set the default configuration options.  \nYou can alter the value of `rootURL` and `appURL` that define where the ui is served and what is the main endpoint  where the backend is located.   \nThe page's title can be changed by setting the `title` option to your desired value. \n\nExample options:\n\n```\nvar ENV = {\n  rootURL: '/ui/'\n  appURL: '/api/v2/',\n  title: 'Agora Admin',\n}\n```\n\n#### UI Customization\n\nYou can customize the appearance of your installation by adding your own logo, favicon, style and domestic login method text.\n\nYou can place your own logo inside `public/assets` directory, whose name you must set in `ui/config/environment.js`.\nYou can place your favicon inside `public/assets` directory, using the name `favicon.ico`.  \nYou can also use a custom preprocessed stylesheet, which you should place inside `styles` folder.\nIn order to process and and import the theme, you have to edit `ui/config/environment.js` file and set the `theme` option to match the name of the stylesheet `my-themes.scss`:\n\n```\nvar ENV = {\n    theme: 'my-theme',\n    logo: 'my-logo.name.png',\n}\n```\n\nMoreover, you have add the compiled style file in `ui/ember-cli-build.js`:\n\n```\napp: {\n  css: {\n    'my-theme': '/assets/my-theme.css',\n  }\n}\n\n```\n\nIn case you want to alter the text for domestic login method, you can change the configuration option in `config/environment.js` as follows:\n\n```\nvar ENV = {\n  APP: {\n    domestic_login_msg: \"My login method\"\n  }\n}\n\n```\n\nYou can additionally customize the content of the footer.\nThe available options can be found in `ui/config/environment.js` file:\n\n```javascript\nAPP: {\n  footer: {\n    // If set, \"Copyright © \u003ccopyright_years\u003e\" will appear in footer.\n    copyright_years: '2018-2019',\n    // If set, contact info  will be visible in footer.\n    contact: 'contact@example.com',\n    // If set, \u003cinfo\u003e will be visible in footer.\n    info: 'Agora is a service developed and maintained by \u003ca href=\"https://grnet.gr/en/\" alt=\"grnet\"\u003eGRNET\u003c/a\u003e co-funded by \u003ca href=\"\" alt=\"https://www.eosc-hub.eu/\"\u003eEOSC-Hub\u003c/a\u003e and \u003ca href=\"https://www.eudat.eu/eudat-collaborative-data-infrastructure-cdi\"\u003eEUDAT CDI\u003c/a\u003e',\n    // Privacy Policy settings\n    privacy_policy: true,\n    privacy_login_service: 'AGORA AAI',\n    privacy_login_url: 'aai.agora.grnet.gr',\n    privacy_service_url: 'agora.grnet.gr',\n    // Cookies settings\n    cookies_policy: true,\n    cookies_title: 'Cookie Policy',\n    cookies_service_name: 'Agora service',\n    // ['Cookie Type', 'Cookie Provider', 'Cookie Name', 'Third party Cookies', 'Persistent or session Cookies', 'Purpose of Cookie']\n    cookies: [\n      ['Session State', 'agora.grnet.gr', '_shibsession_xyz', 'No', 'Session', 'Preserve user session information'],\n    ],\n    // Acccess Policy settings\n    access_policy: false,\n    // Terms of use settings\n    terms: false,\n    // If  set, logos will be visible in footer.\n    logos: [{\n      url: 'http://grnet.github.io/grnet-media-pack/grnet/logos/grnet_logo_en.svg',\n      alt: 'grnet',\n    }, {\n      url: 'https://upload.wikimedia.org/wikipedia/commons/b/b7/Flag_of_Europe.svg',\n      alt: 'europe',\n    }],\n  },\n}\n```\n\n\nThey are all optional.\n\n\n\n#### API calls to EOSC PORTAL\n\nUsers with role `provideradmin` and `portfolioadmin` can publish and unpublish resources and providers to EOSC Portal via agora.\nThe `portfolioadmin` can also approve or reject onboarding applications for provider/resources from agora list pages.\nIn order to disable this features, you must alter `ui/config/environment.js` as follows:\n\n```javascript\nAPP: {\n  eosc_portal: {\n    enabled: false,\n    show_actions_resource: true,\n    show_actions_provider: false,\n  }\n}\n```\n\nPublish to EOSC Portal actions are visible in the UI only when `show_actions` is true.\n\n\nTo be able to publish resources to EOSC-API you should setup the values at `agora/agora/settings.py`\n- `EOSC_API_URL`: 'https://beta.providers.eosc-portal.eu/api/'\n- `OIDC_URL`: 'https://aai.eosc-portal.eu/oidc/token' #Authorization athentication client url\n- `OIDC_CLIENT_ID`: 'Authorization athentication client ID'\n- `OIDC_REFRESH_TOKEN`: 'User refresh token'\n\nUse a user refresh token to connect with eosc-api as a service-to-service integration is not yet implemented.\nTo get the client id and the user refresh token go to https://aai.eosc-portal.eu/\n\n#### Text editor configuration\n\nWe use [TinyMCE](https://www.tiny.cloud/docs/) editor for rich html  textarea fields.  \nIn order to use it you have to register in https://www.tiny.cloud/, get an API key and register your Domain name.  \nThen, you have to include your API key in UI  configuration in `ui/config/environment.js` file:\n\n```\n  tinyMCE:{\n    apiKey: 'my-api-key',\n  },\n```\n\n### Migrations\n\nRun all migrations in order to construct the database schema.\n\nMove inside `agora` folder, and run:\n\n```\npython manage.py migrate\n```\n\nYou can load some initial data by running:\n```\n./populate.db\n```\n\nIf you want to add dummy users to agora, for developoment purposes, run:\n```\npython manage.py loaddata fixtures/sample-providers.json\npython manage.py loaddata fixtures/sample-users.json\npython manage.py loaddata fixtures/sample-contactInformations.yaml\npython manage.py loaddata fixtures/sample-resources.yaml\n```\n\n`users.json` will create users with usernames/passwords:\n\n* superadmin/12345\n* portfolioadmin/12345\n* provideradmin/12345\n* service_admin_1/12345\n* service_admin_2/12345\n* observer/12345\n\n\n### Serving\n\nServe ui files by running the command from inside `ui/` directory:\n\n```\n./node_modules/.bin/ember build\n```\n\nThis will create a `dist` , that will be served by Agora to deliver the UI.\n\nFinally, run `python manage.py runserver` from inside `agora` folder to test that the application is installed properly.\n\nYou can now view your application in `http://127.0.0.1:8000/`\n\n\n## Development with Docker\n\nYou will need [docker-compose](https://docs.docker.com/compose/install/).\n\nWhile on the root directory of the repo use the following command:\n```\n# docker-compose -f docker-compose-local-devel.yml up --build\n```\n\n\u003e If you want to check the Selenium tests locally :\n\u003e ```\n\u003e # docker-compose -f docker-compose.yml --project-name test-env  up --build\n\u003e # or\n\u003e # docker-compose -f docker-compose.yml --project-name test-env  up --build --abort-on-container-exit --exit-code-from selenium-python-tests\n\u003e ```\n\u003e\n\u003e or if you want to set up all the environment without run the selenium tests:\n\u003e ```\n\u003e docker-compose -f docker-compose.yml up --build selenium agora-backend agora-frontend\n\u003e ```\n\n\nThis will create a container for the backend (manage.py runserver) and the frontend (ember build --watch). The containers are named `agora-backend` and `agora-frontend` respectively.\n\nAgora can be accessed at localhost:8000.\n\nTo check the output of the container use docker logs, e.g. `docker logs [-f] agora-backend`\n\nThe database will be created in the backend directory (agora/mydb-docker.sqlite3) and will be reused across docker builds. If you want to reset it, just remove the file. If you want to use an existing database, overwrite it. You'll probably need root, as Docker runs and therefore creates/modifies files as root.\n\nThe database will be populated with some initial data. The users with username/password:\n\n* superadmin/12345\n* portfolioadmin/12345\n* provideradmin/12345\n* service_admin_1/12345\n* service_admin_2/12345\n* observer/12345\n\nwill be created.\n\nIf you want to run a shell in a container use\n```\n# docker exec -it agora-backend bash\n```\n\nIf you want to attach to the running process use:\n```\n# docker attach agora-backend\n```\n\n### Running without docker-compose:\n- To use the containers without docker-compose, you will have to build the containers, create and start them. You can check docker-compose.yml for info on options to use during container creation.\n\n\n## Testing\n\n### Selenium\nWe use [**Selenium**](selenium.dev/) with **Python 3** to do UI testing.\nThe code of the Selenium tests is [here](tests/selenium_tests).\n\nTo run the end-to-end selenium tests you just need a python environment with [`selenium` package installed](https://pypi.org/project/selenium/).\n\nYou can run the Selenium tests with the following command :\n```\npython agora_ui_tests.py --url https://agora.example.com/\n```\n\nHowever, before using the Selenium tests, we would suggest you to read more about them [here](tests/selenium_tests/README.md). Their purpose, their prerequisites, how to execute them, etc..\n\n\n### Pytest\nWe also use [pytest](https://docs.pytest.org/en/latest/index.html) to run API testing and [cypress](https://www.cypress.io/) for some e2e testing.\n\nIn order to test API, you must run\n```\npytest\n```\nfrom inside `agora` folder with virtualenv activated. Make sure you have already installed the development requirements by issuing: `pip install -r requirements_dev.txt`. This will install the required version of `pytest` along with the needed dependencies `pytest-env` and `pytest-django`.\n\n### Cypress\nFor e2e testing, open cypress using yarn:\n```\nyarn run cypress open\n```\nand follow the instruction in [cypress test runner docs](https://docs.cypress.io/guides/core-concepts/test-runner.html#Overview).\n\n### Jenkins CI/CD\nTo run the tests easily and quickly when new changes are made in the source code we use Jenkins with docker.\nIn order to make tests run quicker we use a pre populated database using this [docker image](https://github.com/ARGOeu/docker-images/blob/master/agora-backend/Dockerfile). It is very important to notice that when a fixture is updated we have to create a new image version for agora backend\nFollow these steps if you want to make fixture changes:\n- Make changes to fixtures in agora-sp and merge it to devel\n- go to agora-backend docker image and bump the version. (This will trigger the building of an image containing the changes made to devel)\n\n# Copyright and license\n\nThe work represented by this software was partially funded by:\n- EOSC-Hub project European Union (EU) Horizon 2020 program under Grant number 77753642.\n- EUDAT2020 European Union’s H2020 Program under Contract No. 654065.\n- EUDAT s Framework Programme 7 under Contract No. 283304.\n\nCopyright (C) 2017-2022 GRNET S.A.\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU Affero General Public License as\npublished by the Free Software Foundation, either version 3 of the\nLicense, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU Affero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public License\nalong with this program.  If not, see [http://www.gnu.org/licenses/]([http://www.gnu.org/licenses/).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgrnet%2Fagora-sp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgrnet%2Fagora-sp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgrnet%2Fagora-sp/lists"}