From d0874a5b2ad921818892e7b7af1e35e9b8752e2a Mon Sep 17 00:00:00 2001 From: Joel von der Weid <joel.von-der-weid@hesge.ch> Date: Tue, 5 Mar 2024 15:14:41 +0100 Subject: [PATCH] Add sonar support for assignment creation --- ExpressAPI/.env.vault | 6 +++--- ExpressAPI/assets/OpenAPI/OpenAPI.yaml | 10 ++++++++++ ExpressAPI/src/helpers/GlobalHelper.ts | 11 +++++++++++ ExpressAPI/src/routes/AssignmentRoutes.ts | 10 +++++++++- 4 files changed, 33 insertions(+), 4 deletions(-) diff --git a/ExpressAPI/.env.vault b/ExpressAPI/.env.vault index ffc78bf..c28cb64 100644 --- a/ExpressAPI/.env.vault +++ b/ExpressAPI/.env.vault @@ -4,11 +4,11 @@ #/--------------------------------------------------/ # development -DOTENV_VAULT_DEVELOPMENT="Fd25NWoFJbBzT9wwBCRGUOXTJ1c7zrEJ+iju5jTuU6Vm0K6JwkdsL/TO2+Lb5Qw1VGuSsly+oU/Dm0hrdjwP6Tjo67Xi8Mgct8Hs7MzsAzfSqvY0if0V7imVM5GhjwxnOD6wc9RZeb1iNeBflrcp69LhFHWY8DzX9DL75BeXCmDJyk2E/jD64othmpognt7e5pwznljWcxd1zZaMUMHfV0GlWiLdJfr712D4kFOtqW4TGL0Dh1s/E/xI8TY/HnwmFRDL5n4KiAWg89gFi3OxpRUOQeTHOtq5RwVo3Bi+ImFpbFRtfFkxOT5SLoPvnQrljR/VzcQw8cFuSeCsEfnN/4dabm7TVfsN906UsEQcX1gbYB1PmejWfNcD533kaew0Nw7PxNonoHqqPHQbzjKb+d3P63j3UmHeUJy2oZoIswAuhi0/uENDFzvN9dahBGeZmhJHFAkBiyTl5LMboCPWLyUzdx4ACM0qAsV/gTRv2ZkZI6UJ7GKei7SsDddbWeppK+vsHFgWpKRJtWflbHSqlGMT0uDRXo8B8LvulMwwz1NGXYC99QNkrNnQDFKa9OCAjVRAu0EnBHGYaK/dyZm69Wx44n4gP1ZQqzwxAqJvJIMkF1VjNsJpVcxOsTUQ6eEIGhIrRYBtjYHSPUHmVffpbgBHEwdChn4y62L+98+SSxkeTCjhZRLdEhwzObLVd5DYhED/tKVUW44Ut5pAOt/ZNULM2PixH0StlPCFpqQMkeX4GTCldC8agwzj2Mj5QHSAdhQwBS0hdwHR6fbxUO3OCQ7aNjU/M/cBCSgJb9KyP5Yn9vhDSjIea/itaOWhTLC8sXNfBbArkRgwDQWBj/PL8yBgSTJRlDX5g9jYWf1v9dJpzqpMr3K2dEjqJ+ymWSGpLuFDC19s2OwBM/+RA3zwvEVUTP0/QNeLHVQR88DBbdIzttnEKscEtz2KBZ1GISeo5zkhQCw3PtI3438lj5ybYOvq9psb8APC4VyfWWJwToR4DfuLzFvHYjBTWhSpzRSRwGdG7FOhS+z5azc3NVQ8h9qCD6ImZ05AtQtBnYYVPrKxP2y1lx0ZaY8+FKqGZtLowgGecSidhJdelw4+tZaf7yL6MaE6gJGPhWuyTKTJeVGSYy6W+aGW0EuvhhlW5cUpUvSD60cIUHTHDghMUOJVoo7y4s7eghixnP3S/tfXZDQCSgl5h2veogPMS4cGBIlg9x7Dp5wY95xsp+9bHu34w05K7EiXRDwa2gH4kaX8KrDmyXKaCG0b7LI0Th888kw61pz0Row/MepeVVJB+oTQvOH1+zezw93zBtEU4TB0PA1KCne29Qd+vzsbTIa+82+1cndhoBm0KLxPYHnten4hMAcPq1s3/elIwyl1vmF3hJ6ZTBeqyrc674PQu/kOkh1B55CbV2MQLYHxOA4awVF35vmc1l53Y26uqtXkvCK7f6m5sj8NCc2lmPEe4HSHSRF3E3TojOzrlcRwkmkZzVulJgFSOViLIDmJ8Fnr3lseb7d43yyos2LjvMrLpjAZq372XRT1VyN2oAuBVOzM2dSnL8Mu/pPxVWE9/z9zxkoB1Yf65FWHoJYI8WZH9Ya6aIvXF0BoAeI9JgdyYcg53Ua01kaI6w1SLo0REI9xesw2t7VeeWrWQX0Mst0Q0T+Qarv75rvF9vmQkF3uK3FQgBEMc4S09zYsVyZmpuOV2RRwGrQj/vn7u0bjpMF6grM2nocfyd89Uaj03TSLNhQPIzq0zpl/Mdhqsec=" +DOTENV_VAULT_DEVELOPMENT="wV1mMYrxqWTL2Wj96VczZ0UYNUBtFDVOopa5U5UmB4eF2mZ37ZvClwEWQweRzQYxWUgAw4gH8syFzXZ+SReEYdanIoYNGn7zSvwtiOUX8kSv9CXOrD7NfCCgz5UEQm/D8ZfI2yaAaZ/YX+oFibloejnhAvNTlATLv/PNbKBe9af5JhLZQ2BKKy2N9FUS+FK1rZvfStdAhOmPSGnY9gAwKT4sHfF80LTaG2r0HLTO7icbSM1R7ro2P7U7JMPKuC9AJwj4fKmf5lkw50Lsc2DUI5/WsJScg/1SntGsnsCewJOv2ciz1HZNAq2r2Iko9z264eG6DA7+PUSn35M/NgxWkfqYHGzaGzs/4nOw9YcaxyKUr8fw+hvqUivx979eYAAkQRrzLDA4N5jWQX0TZXEhw9mY8jsBLnYdwz7fERfkyHTZKHXDDsnq99NArBI2k0iiFZkNkG2vkVRhBFd7X42XEVfxhfrYl8DExzWyXKxiLWHFvTf4JOTDNaWdmHRxbFHG/ONz8sxBZuTzeV2pXQSFmWP1sBUwksr8NX80SqZDfGK+CXA6h9oi2+KdFUS9a5/0hgHRt4JzrpHvniQaEF5n1+MLGN0m4jFxEFefzUV/5WF/e5KoBgODAlgr8o8t+p1GTj85skmaYD2Y8uSQtRGyjSyay55txOz8V3XiOiksOjGeP/0tRjcbWL0Oxpzgy7OKbGOJauPMaHyL49P+GJ5/P7S5O2whu11L7VlbtwwuI06Vm4+hPrE2XybO+1EcaKFDBSgd138pK+e2c23uG2vg/6JPqKGUESivD+wEnl2MKo4bwpPT4KsQLyYer6QjMLHiQFkCE8Kf1bPQKiKbjQLNf9tBWegj9R/tH43X6e+lT7gdmqWQAMJOWj0wG+vcJ9F0urHFE45K5p57rEZJKXUJ84AKVRHtW+fgpVbLKxalIHqNJCpoR33W1z6D1qEMGHguLx1VbiWxofGRLFUMHMeEMlxmVjr5MVWFfh9o4cmsdJfUZAqDgtR6GDNMkhXsoFPul5ucbA84RBUeHP1XhD1rVB5jwdS7zxagrMxZrnadzS26IAldHcHyEJyeWNrdbGiGSW9y9Yom6e9q94eK2UbhPKV6NbcIeHcTi7DQgxrVuKdd3dvqEvyHrt93e7/t5iKWAKXZhw3nqQm/h8mMs92YSyO3meKNht8mDeOC65Ot/86dDN/OfRCGqkvjPUgQGUVmXDOv8gTqkZyN5/+tSaIRI3gWkd7iwOhhEwJjxwuRwP9XA5eygXgvcn8je/Oi2k0pkyBQiram+IlOAoHQmMTosvsiKJi3fR4dzP/mGjOKmSE0vm3IGUxLu7gyqswBTW0ZS+wqZrXsFJpJ8LStf2F73cSg+meOxNR/HiryDVJVTNHi0qv9aoM/wQMVxKT18QLN1CFNo5qKXf5IaViLhQH0q+9BcT4LdmBqw5TzrMUOgWBR3YyLEGQgsYPO4NTtMfKKd4loUXLehFtxG1EjtdCmILA+yTMbjJ6yKCqoLQTpHc7VeSIGzE+87WDocum2N9Fo6TAoFeheNXMNIuNd1pcKoYNVSIzG4d82VVzT7lgdMkpE6KKAHKjUhM3GsL8kB2gU81bnqFj5HvCZJRUdC4wIEORWB/HOYUIY5z9jwFnMUJpflqFPLM4JXIvPBw++3xNCs9cMUISdBosRNRu8hp8O16kfNe+gojkfWAqyCdAttfolpLa5YSIUsf/rnxRTewHLYpJAf9JIjWzAu6pmmoHARZ9SLwOH7FNfV4qH0jQlVj+mgYEjH4pkcDzH3nowpbbDvy4wDxXlKBCX2jJJx6tIYxEFJmxCPXFudMdNvu6zOoK52aQDRzLWz+x/FBD/hO12HRNrCN49nEFOcjaAdrwrj1ELWKRH3eRm85p6nVrxDUs=" # production -DOTENV_VAULT_PRODUCTION="0OzXeuQZxAt17kp/qb9ocAB9iAjs1CxKeWnrV5bOpSfxdQzuWnbKq5QdPOPhFOF/PfK5bhwXZ9Rwc/2ZcpJHTyRQvi24/y3pUf4GjWeKBVn+MynOeO7X8OMgW5xQpmz7Gfgn198gFOIl8A57dtE00rCa+itlnkM/srqPWWsySkvoO0ncScqZJRQVK1r1w+jiM8SV1Ikcq/RMr5n3xHEd3fZLmuHdp3AGcZ8opo/nNu9GEXMWCoGTgdYUaTzwnEbzHvP/9dGRrQiFd9hZjM96rXjYOPBadLmNC63u3YaaJ+AztChZM7QnMYy0FHqvQT4OIVWqkB1H+hxaavnENrd0MAkEhVg/kCHN7Ao1cvauPwh9gWlIbOvTH4Q231hkXDz3Ud07kX07VLYKEZUBG8yjkjSmTS+UQ8oWzBRwtvW7FKcDSOYiG5sw7oY16TSrHe+rAQUwB0Ii6PaP9UM/yQ5GUNePBQwwPkc9w2mU4SDzmh1e78kqK5HIRH+GtT/ld4HgVbkOoJkdAUtqJJwdNwaUkrT17Z5CV56+6ntydZhoa14urPBU9AaiDaC+EhhnnIjTeTdQaev02t9d2iqm5M67GgLsADlyGlzVtr2Dpn+Dtnvic8Qw0CE9zhGUwh11GQdImUYpr7QPvmAI/Rr6gFetWTaIyh7Uz8KixINqMvWlVmS0KNN46R9g2GeeBqKqJ5hF0k6i+psWquZo988cE5mYIb9FTe1lQL2mfGAJiIz7YKHLDTZEIOtD7DV74Tb4E3ylXFS6JZPuIv2ehhZO+4GqYaXAvjWpLDfFOAR3rbzBs92ZHmnbebyh6bEaU7G8ojDxYSddfGeB+R/Vts/WFJfxpcB04kAeOSdb4uSS6qh2inq9eAHO3lfeD3CyJ4Q7l0GwHSLB2sxm4cfYw7kZgPQMaaO2hOanQSG5JiAhQi+zyF1p3vUVwgVeepuF3scF4EpU/sBtBm9k7qoonIsGYKRcEiQUcRj6zOCGgmkKshqdNIVUvRfioBgkHiz+ozx3sSdA8hKrqw17LcDFHJr/m4VjixxbNRtK1pi9VCsw4n6Yrp6ezNa+3CU4M5BfXeDHsA2kPBwrie//wmiliq0cq1KR0xp51SBOG5NhBmx7Bf086D6nLKWpC5PATL6GsptiZs0TkPGIYTjh/Suh6usZ9NU9pUKaB88lVQuMgAHkRKG3Z6Qhb9nWoqUEBCi/LkkAk1u4e/rKTEBBxa/hTH8q9dfo9VX8XbgKS1LJXaYAV2aXn/dAfn4W4/yFsyL3n7M9LabXVVEIxc9Lh0j4QrRtmvsYv0cptIsdxMlpobWlKB9eVfEMo79TBAnJIOgt18ihWfUq57bClN9qyRZ7qV7N4mG4AgfG/Zx3o5Kvpyp6FqI0KlGRhgcUDkUt/CDy/RHjQ+U1VbybbbrPdSu6xw3fmrWbf095YLP2vZGuC7o1RZUGM4hbLkGlpfMkw4izcNmD5K3E1Zwmuh2JhlqZZf7AA3l5EjTCTL4FudNm8mRpbvJ7qgEA0tawozC52HtngnrlaTS+LMuN7YsoUh2w61JFkbCTjzMbQ8uCXjArW21tPWaHBQqm2jMyOYN1/wIPIM8E6LVHUq0N68jOVZC5bxIt0bT+sTxzUT2U1pz9kHiOoKUOQYl/Kj+0Z6H5zTotyNEpomkmpukudLcjkmjxfcJkOrFZQfbQdRCO5Jl8Pce4u0Z0EDfOskkEwRWBPCZnlqR/jajBaP2qGMySbS6l8v7YSuzfuSUA2/c56x0yCoFhc7+d90C5" +DOTENV_VAULT_PRODUCTION="1Q6Ywlc8nD2awsBAkACqpP1fpmxJGBvQrVaIiioJZHMk5ho/TpIO8m+24D4orDiIf9eBEtzcZBp3gyT7suEHRh/AKTVeH1ronQtCX0iTQhxb1QYmnULYqRqczl5/yt6j8i6Cjz9PpRHJIPuEUl1nZg1OGbxaVMs2gk+IHrH8dgu6sfppPV7OfMs9tB/wg8vG67W1ppZOrBgAZAtCGLhfElLrHV+J4gs17WjLdsmdPIxvkA4fLQakbccUPS938tmxJIA7ViKVamcTKK7BqYGSBhyPX9YfRlBgUvL+G+wS4/QcD2MHF1aoojhVg2DPFlVX3ELO6mVH4621wu+G13ca5gtYtxbZrvenKId8yFhF3mDoEU4doLayw8uRs5qHkEw9KWgynrN3p7I1X0u9kxf0hfWIJN6HoptGdbemjL8+ptxQuDD7bJt4zNYHDmEz7ZKfmYCGz5PphHLiMsdcidlxkpbt/Ktk1mktXNJXswdq2XXmPNP98tR7ixzd47c6CG5RMjT9FyyvsWhXEUHwCy0SJ2glLk9I7JcA3sK9iOU1BTRXjSFbk6+DE1rqUkd1dJTHGAusV7ej9Po9Yb0GWX6Hm6nxXuockpXBxPV21ByCPPJRBhv/5tBKqg2vtqPvBCAEjomJFO2/zvQR0sAPrykViU5Qyi2G+ISVXxhPz2k1PO0i887hM2WwtJIDaKv2K5WZfURohkDTh2JCQ6LAZEUu3KInfIbtQyo+ZWMWipdAe+CQAuYAsP8UV19sRaBYI72SRzxQJVOVu4dXLCXn7yTAzTZz9fvCke66aRKz4LWeICBEWyd+6BzgjFyBtxIA1WqmT6cyVN0/RjdYf6zpJdli4jNZnrYNbAqQUgYX1rI9JaCdnHZwF9uUu5INaHwGZ1Sq7Huv10V68UUW9HBzeR/C1I5ZzRSLjTlCnWN+VkQwydRARnx0oPXP4kPv70j9TE0Yjh2F4p0NwVlyRr9ImPeUtY1LAlO5YGZnexRNk2Q9F5juZ5bxzMUbXVVdM9kaFHJrlKkJHwFjsnS79YYmj1ZTHHokI+eN7k/3i6Md/e96Ylfnm12oOsKOQ6EmAqR/+kh0NIyFrszb4a3AxQE7jq5fpl6A8vUtZv1SB1G/ssQhB4pA5qUpUNBtzxml2j87unYPjZgpPIKSKcANQEIn4kCg5xkg4dMZgzCEfvliTHTQ84gVYh0+jZOnH/QtXvLt01yajVnYCuJPUXUfjyHb5NQH04AOPvG+eea4p7z9YI4LyK5LdMhIfgha5Rx3JPbBKQuZ/b3cy6m07Bh2PsWX6hPrs0w14XPbWojglkJR4nV+9d9jT9tyts+VZLlvG4yDlZULhm0vBK6zHZ2O+3DGRhQOPrj59Qw81jKgqwTdkWW7tjRbfGXsuaCfA/nABgW/CCC0khWpGcfr4u7bIdP6hMsADlg6Xv7/BHedc2RznBvTUeJRVd/9azYT67I4bgfXDmzA2mHRbV8QMXQZ+xo/d5Fr69Cs6gSkRZiImW3cwi4ovGbg1UqE8Pl2B887PCJIoEtldcKNFO1oovLa1Z/SyCrQg1ESFmNKtA0CmImAwIWgi3tUzD/SFxo5hyoe1GAp+3LmpRwSeJhOx/33Aobld2o04+yaydH+npUEryc6fE5vlXRjA5shW9xJIDa+LuBao60iQID2fU9CKmEjx1zrCn3afQbhPvN3LAAUnu8HUCqQzT43pH4lVedm5Em0aDMYh2qMSzZLwCW0cSrIhqFT38YsaDg4cl1R5aoJngCBw85Ra40kygBrvOdxlKk3fDtBqEDPmcWT61EIbUqSlZ857GEhvhRoM6okfpF7ksyQNRzNOx875D9f5hn9cfrO2R8dV5GuVmvdcTGTX5D93UORt6Pg0FzLHiPerqVJdSr2LX4v3iqqs3vDhdRt0ph/" # test -DOTENV_VAULT_TEST="PT3yDxOvkX0FmdvfLXZz6lqc0ra5aVnKVQ10ccpXr9CANo8d7hFT8vQcN8dgdYci43tIKclQ4MWKCWukWX76cCZdkEYMnF8W3zmjtRNDTKpzjcNocW2TjtzNsM7aCGKM1QS9qpBqRmyvBqjIXHz1UAZYwyC7Z58BXOIOW8UY+Nf2eQmLn5jTl3ClPT1HcdROaXv3b3wykgZkBB0M82b4+RcF9MrJeS5zhf3X8hMYAlqPk2r5x8T6neFPThcXl5pX39xc/31B/Xin6jo9E94RaBVVKQQnEJD5BV+rKfPCStSCvlme5s74+yfKutx5ZD0zzx0sqy6LfDIo0YEvvz3v1eUTYwKARnQ7Ua7OSE/pslyvAKlePlfdurO9vdFq/tvgLFhbPWQnG6zRonJg2xxX5h/fp/W1U4h57oP6KnIG3bAnIcS3nZ1JXvI1PAwRasXhJzdF28Vy1TufK2D7RNlZwDZuVfBaXiltAQWBXcGgo4AqC8WHRwDS/ZO7q2zcxiFQ9z7YHfOL3pogr16VP5T7IUS5AD5U8ZgFmARmLNluaZTQfrXfByqzu5Z6f9w/OBOM7RaNG5aeK/YtVm9CMwz3ZVw0a+5Un6lY33WzStynucNcai2/1kEyxDrloKstSoYp2nzWsBIHUS2DbRYN50JWgkRuC7n6KXHfovnJ97/YAUmlaDBETO0uK9Lj0zzaGEDEEU/4vZRLQfzqc0iwU8R5alBSH0egn1o+Wm+hEpeWecyZmB7IfxO7cGMjSRuW0tAwPCrAMwWfXRiGQdpNmrL3jj2yqLN9dABOy5yWkOaofJ9czkXA2J6CnKDRwB1A6tQ7L/sohnjwpkFXwjgsI8zPrROWga7m5Z8rQMLDQ93ZYHc4onYfA6ey1bgSgu4u3vZZ6LB4x3F3FITA5JskrgyAxgvgU2iKyasOZO24CAQ+Noz+I6lfY89hIV4MzNio0pTeZmlv4fhHnPVj9n5fqsgt5+f0gzXGRx1U7Swtam9grOdHu2aC//jtnUe/vvoimq+EE9q0e7cPzWtt0LjgKB2PpVc5U8v7gZiHowMlyyr0/plDnCNgtih5Dt7l7O5pUaPLiF5EW81u2UeHsUYxu7okSmHRELVTQjV19TMUquyGhtng+Et1EOmHJ6qA+qMCjmsZfqEzNGmOm3WOc8kpodP1d2yph/KBSm8Ozu20YJmc73fSw83ia6BKhVrRFw0pm7mzFH7+IXE0ZcGdHtwiwrrKrJBztuHxL+kBOZiYgL/cR6LOVUwuF3stQX3fWST8W+0gZyWOKn18DCVhkfQqH84b9ZeQ365f6PDAk0BNPtdI6X8sLCZcSIAu8Nqt61aqCIsR3apE2jhLoqjaMuJLKK1rbwCBgX6gdIwS2jbVLuog+F1lh8bJgh5mr1F5Quu4triX1O2IIoTY51nsEaYGnwiFtS155lgUIt7KHuRaOKI8JhW3U5fxJa0R/BJW0OVuyu4zV4LDRYsIrR3b9ZSyKqpzHiWhV1wA73tszMIOfAxt3hxFIjHskUaxJ4AxW/pmiIJobXR5VXDPSt/zTF9Bi2fB3uXaYTlaKCTYhRXIm8q52hxIqNOFmUtzuidy8brm40okpbt8lthZ6Xz+qtSjFqNe6YJKyEpssLnLfghoWvX6V5MdhzQHZTCMolxejQCP7QJv2Wdhrm9d9rC1gHxv7NSKyZfQqxB3JyVOS9CE/afb5vlYBD/gL1/bPHP4GM/tIxAji2Gf2sLF6hslio7hwgl2zUxOGNwhOAJrJv1e96UQQW3yIMu/7SE9" +DOTENV_VAULT_TEST="1+zTbDzJhNzZftiNfawwioYqlzqnVxHH2pvd1rRFMUvdVXoqhG+/qJpTkXlgIhys6PkWPGSYOy7492mHFxVrT3aMomUYWGMQf+o1hDdDY4p2X0td/mM+SLcrhJFGV6Vqj3vho9bPwi0PNhludbEmXH5NFtHrlnEkFE4Gx8Y+5R5dVtet5XPAEdaeNV4XuFhMengUjovpS2ZC3Tl6AR3kKXeV3s0TKNmGEGYdh00/uEUKkCUKWduJKMbT5S6sY2OZ3E20KvyNhSOGvJvvn5/ubphItZeJCEjQCTAeoJg1/LnZw9w96odcctlUI3Mk6GHJfsXgf/aD2f75wHaNmqIB88D3mkv23mpaQJF64/UU6MQtmXpTx6effhO0VY41FVeIIlQYos5/hdWo7dnJ+6M06RVmeepKDSXJwuSpd7sr02GkOfAo+FsyMavFfhh/KXhmMuSpG9cesrN6UV8jfMOMjrZR/TegaHNzvr3OVU8u/16QdtUiAV/oOHMbWIM7CLHvn6wTCMltpdUqwAV8B8sPQcMk7R8L15sfkXD3PaasxdSKy8xdn06afJ8GcrxUy4ggvTgJU4GUJS6E0AIVa1fs9amtTENARwIzxHi5FV3Vsl98u6M+i6W6DTZwOkGoTcJ17F38Bw1evLPxGA6n8G6kPjW7QzWxNAG7vIF/OoYhADMqLS6sm0+FCucIciM42r9LHNKDizZfsAdGcnYRzcp1cFTSHXqKyFuNma79Gxo95qJL4rfYnxrSZdJ2WJURPMuhFXBIqTsiK5bbCLBkhn5U9Ef8nJAjz/dMw8K1x9VbYWbEETF01MT5Ay5KhNqXeeLGbrR25yKnTuKcHY2bIE/dlgBmGbxmnw2KAcrhn1HCmNlzEbjyaoVfV6EiHnT2wmiT5xpy66MWj0XgNio/Ujjqkjydtd28iCdcJkfneyB3PO7jfSNP0pm+9XSLCFx3KkQ20BLnm6vgQ0pbuoDs+v6lswOfAktd0mon7T4ZUEY2qTmozEzdrCSy8Ef2hoSb5sdUiO5AwF1ec+qXn3FiOpl0/hunrSSeEIv6GOJxnpGrZ7aOATRru3oUB90du9wb9jDn0UCQF3OaJSXERvlK7IX06JPC11inStwzwnObUdnFNEHJucOg9vdIx27b2H5unDiu6VzGsjpvg4J8dYHjhkkjtzWtpXFEcdjezlZqhJCuprdu9x71JUW2FwCMJt70H9R+W8VUtnDTGD+zYJqzELCCP9C0Kji8tYkuKP6X7N1K3wUWqbi6TePpKEu9B1TxyF84ANlg6k4Zkh6Sj09uARbw5uA0yegYyojRC9N/JxBhr/dI13wWH5ClGLUApv08KE/EIAX5NznLWgMRWukW9kt1fJ0Tz43odgeh/ovyvasLoeg+QFLnd9NJbpqiC5UULbgYMF/qG9ko7JeXGZPrnL6pgCmxOfZB7vhb5b60aQWmjLiKLvGV3GbIu6TRvR/1OY0AWlljK0zYP0Qk/cEwAQEp/rqcIrZwPMgb764PoIzQNWR2hOXj3POGVsDXGJcOoTa/dsC+vZUYWOeQErBaILUACvvLizIZS/RgpKzotEFe/IEtRVMuW4RcVctjl0ykYAIiTbcyB/byG9lSzlDEy31uKU64Cnwk/4/88T3kIVHZUy9LEMtr8t4QymqKYnEkRuj0GB0/hcsK7lsnSMwzro/jju4coPgplP/UQ9efxmwtNE5BUdcgPEFot4+x4jtxSxWrJsAOqImN+GBMD/yIvzZb6t5p24lKyJorsNjFBKlNpHNrrx2L1ujySUZaGsJx6CWpLkIvSzveuaPkRgzh2RfU1LM5BY/q1jYKtnVMP3UsqwUqdS5UJgOWXyAZ5Eg/jYAMQxUfpap6lrBf8ET7r+GlDObJ6Ca4DYvOnrir3mgeAfy5tEy7vQIKt3tkCwOf7Q+w" diff --git a/ExpressAPI/assets/OpenAPI/OpenAPI.yaml b/ExpressAPI/assets/OpenAPI/OpenAPI.yaml index 7c83f80..72494a9 100644 --- a/ExpressAPI/assets/OpenAPI/OpenAPI.yaml +++ b/ExpressAPI/assets/OpenAPI/OpenAPI.yaml @@ -329,6 +329,11 @@ paths: type: string format: url description: URL of the template to use as base of the assignment + useSonar: + type: boolean + default: false + description: Whether or not to use the Sonar integration to validate the assignment and exercise solutions + required: - name - members @@ -802,6 +807,10 @@ components: type: boolean examples: - true + useSonar: + type: boolean + examples: + - true staff: type: array items: @@ -818,6 +827,7 @@ components: - gitlabLastInfo - gitlabLastInfoDate - published + - useSonar - staff - exercises Exercise: diff --git a/ExpressAPI/src/helpers/GlobalHelper.ts b/ExpressAPI/src/helpers/GlobalHelper.ts index 9d5e5e8..a4f6ef2 100644 --- a/ExpressAPI/src/helpers/GlobalHelper.ts +++ b/ExpressAPI/src/helpers/GlobalHelper.ts @@ -5,6 +5,8 @@ import DojoStatusCode from '../shared/types/Dojo/DojoStatusCode.js'; import { StatusCodes } from 'http-status-codes'; import { GitbeakerRequestError } from '@gitbeaker/requester-utils'; import * as Gitlab from '@gitbeaker/rest'; +import axios, { AxiosError } from 'axios'; +import SharedConfig from '../shared/config/SharedConfig'; class GlobalHelper { @@ -55,6 +57,15 @@ class GlobalHelper { } }; } + + async isSonarSupported(): Promise<boolean> { + try { + const sonar = await axios.get(SharedConfig.sonar.url); + return SharedConfig.sonar.enabled && sonar.status == 200; + } catch ( error ) { + return false; + } + } } diff --git a/ExpressAPI/src/routes/AssignmentRoutes.ts b/ExpressAPI/src/routes/AssignmentRoutes.ts index 8cb5f41..cc6231b 100644 --- a/ExpressAPI/src/routes/AssignmentRoutes.ts +++ b/ExpressAPI/src/routes/AssignmentRoutes.ts @@ -40,6 +40,9 @@ class AssignmentRoutes implements RoutesManager { trim : true, custom : DojoValidators.templateUrlValidator, customSanitizer: DojoValidators.templateUrlSanitizer + }, + useSonar: { + notEmpty: true } }; @@ -93,6 +96,7 @@ class AssignmentRoutes implements RoutesManager { delete assignment.gitlabCreationInfo; delete assignment.gitlabLastInfo; delete assignment.gitlabLastInfoDate; + delete assignment.useSonar; delete assignment.staff; delete assignment.exercises; } @@ -127,11 +131,14 @@ class AssignmentRoutes implements RoutesManager { private async createAssignment(req: express.Request, res: express.Response) { const params: { - name: string, members: Array<Gitlab.UserSchema>, template: string + name: string, members: Array<Gitlab.UserSchema>, template: string, useSonar: boolean } = req.body; params.members = [ await req.session.profile.gitlabProfile.value, ...params.members ]; params.members = params.members.removeObjectDuplicates(gitlabUser => gitlabUser.id); + if (params.useSonar && !(await GlobalHelper.isSonarSupported())) { + return req.session.sendResponse(res, StatusCodes.UNPROCESSABLE_ENTITY, {}, `Sonar integration is not supported`, DojoStatusCode.ASSIGNMENT_CREATION_SONAR_ERROR); + } let repository: Gitlab.ProjectSchema; try { @@ -178,6 +185,7 @@ class AssignmentRoutes implements RoutesManager { gitlabCreationDate: new Date(), gitlabLastInfo : repository as unknown as Prisma.JsonObject, gitlabLastInfoDate: new Date(), + useSonar : params.useSonar, staff : { connectOrCreate: [ ...params.members.map(gitlabUser => { return { -- GitLab