{"id":20846369,"url":"https://github.com/ransuum/provisioning-hw","last_synced_at":"2026-04-09T21:03:11.184Z","repository":{"id":263059957,"uuid":"876902271","full_name":"ransuum/provisioning-hw","owner":"ransuum","description":"Voxloud hw","archived":false,"fork":false,"pushed_at":"2024-12-23T16:53:52.000Z","size":24,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-19T05:09:27.986Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ransuum.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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,"publiccode":null,"codemeta":null}},"created_at":"2024-10-22T18:37:37.000Z","updated_at":"2024-12-23T16:53:55.000Z","dependencies_parsed_at":"2024-11-15T22:26:24.616Z","dependency_job_id":"d5029f6a-2c20-4fd5-aeea-55836550f256","html_url":"https://github.com/ransuum/provisioning-hw","commit_stats":null,"previous_names":["ransuum/provisioning-hw"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ransuum%2Fprovisioning-hw","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ransuum%2Fprovisioning-hw/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ransuum%2Fprovisioning-hw/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ransuum%2Fprovisioning-hw/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ransuum","download_url":"https://codeload.github.com/ransuum/provisioning-hw/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243207880,"owners_count":20253938,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":[],"created_at":"2024-11-18T02:15:57.510Z","updated_at":"2025-12-25T22:05:20.844Z","avatar_url":"https://github.com/ransuum.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Voxloud Logo](https://www.voxloud.com/wp-content/uploads/2020/07/voxloud_logo_@1x.png)\n\n# Provisioning server #\n\n## Context ##\nProvisioning, in the context of VoIP and other telecommunication, means providing an automated process to make a \ndevice able to connect and configure itself to be enabled to make and receive calls. This normally happens when the \ndevice is plugged and boots up, connecting to a central server that releases the needed configuration.\nThe scope of this application is to create a simple provisioning server that is able to generate dynamically the \nneeded configuration for every device type. \n\n## Requirements ##\nThere are two device types in the system:\n\n- Desk: used on office desks\n- Conference: used in conference rooms\n\nWhen users connect these devices to the network, they should automatically get their configuration from server and \nbe enabled to make and receive phone calls. They are different physical devices thus they are using different configuration files.\nWhat they have in common is that, when booting, they perform the following HTTP request to the server, putting their MAC \naddress in the URL:\n\n```\nGET /api/v1/provisioning/aa-bb-cc-11-22-33\n```\n\nThe server stores a table that contains all the phones in the inventory. If a phone is found in the inventory then its\nconfiguration file should be dynamically generated, according to the phone model configuration format. If a phone is not \nfound in the inventory, the server should deny the provisioning request, returning a proper HTTP error code.\nAs an additional requirement, the system should be able to support new device type provisioning with minimal code/configuration change.\n\n### Configuration file formats ###\nThe two device types use the following configuration file formats:\n\n#### Desk: Property file ####\n\n```\nusername=john         # From database\npassword=doe          # From database\ndomain=sip.voxloud.com # From application.properties\nport=5060             # From application.properties\ncodecs=G711,G729,OPUS # From application.properties\n```\n\n#### Conference: JSON file ####\n  \n```json\n{\n  \"username\" : \"john\",              // From database\n  \"password\" : \"doe\",               // From database\n  \"domain\" : \"sip.voxloud.com\",      // From application.properties\n  \"port\" : \"5060\",                  // From application.properties\n  \"codecs\" : [\"G711\",\"G729\",\"OPUS\"] // from application.properties\n}\n```\n\nThe final configuration file should be created by taking data from database and from configuration properties contained \nin `provisioning.*` namespace in `application.properties`\n\n### Override fragment ###\nIn addition to standard provisioning described above, there should be the possibility to manually override final \nconfiguration file, by providing a file fragment in the database (it should be Property or JSON file) that can replace or add some configuration \nproperties at runtime. Let's see the two cases:\n\n#### Desk: Property file ####\n```\nusername=john                # From database\npassword=doe                 # From database\ndomain=sip.anotherdomain.com # From override fragment (replaced application.properties)\nport=5161                    # From override fragment (replaced application.properties)\ncodecs=G711,G729,OPUS        # From application.properties\ntimeout=10                   # From override fragment (added)\n```\nwhere the override fragment in the database is:\n```\n\ndomain=sip.anotherdomain.com\nport=5161\ntimeout=10\n```\n\n#### Conference: JSON file ####\n  \n```json\n{\n  \"username\" : \"john\",                // From database\n  \"password\" : \"doe\",                 // From database\n  \"domain\" : \"sip.anotherdomain.com\", // From override fragment (replaced application.properties)\n  \"port\" : \"5161\",                    // From override fragment (replaced application.properties)\n  \"codecs\" : [\"G711\",\"G729\",\"OPUS\"],  // From application.properties\n  \"timeout\" : 10                      // From override fragment (added)\n}\n```\nwhere the override fragment in the database is:\n```\n\n{\n  \"domain\" : \"sip.anotherdomain.com\",\n  \"port\" : \"5161\",\n  \"timeout\" : 10 \n}\n``` \n\n## How to access database ###\nDatabase is automatically recreated at startup with sample data. You can connect to [H2 Console](http://localhost:8080/h2-console), using the following parameters:\n\n- JDBC URL: `jdbc:h2:mem:test`\n- User Name: `sa`\n- Password: `password`\n \n## Project delivery\nThe final output of the project should include the following artifacts:\n\n- Complete `ProvisioningController` to handle provisioning requests according to the given request format\n- Complete `ProvisioningServiceImpl` implementation in order to support provisioning requests. Create all the necessary \nclasses to realize the best possible implementation, considering OOP principles   \n- Make `ProvisioningServiceImpl` able to support override fragments for some devices, according to the requirements\n- Tests for the implemented classes\n\nAll the code should be pushed in __**your public Git repository**__(Bitbucket, Github, etc), since you can't push branches on this repository. \nThese are the steps:\n\n1. You create a public fork of this project on your Bitbucket account clicking [here](https://bitbucket.org/voxloud/provisioning-hw/fork) or you clone it and push to your account if you use other Git platforms (Github, Gitlab, etc)\n2. You commit and push to your fork master branch\n3. You share the (public) repository link with the reviewer when development is completed\n\nNote: The system will be tested by the reviewer on the sample data by running `results.sh`","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fransuum%2Fprovisioning-hw","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fransuum%2Fprovisioning-hw","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fransuum%2Fprovisioning-hw/lists"}