* $sess returned from SMS::session_create() can be either
>0 = success
0 = remote rejected (subscriber=inactive)
-1 = internal error
* improve the error messages and the session reason based
on the refined return values
Change-Id: I775c637bd3d08fea3bf53094b4ab60072daabfa6
We can replace the apply usage with map plus a returning s///.
This also fixes a hidden bug with the liblist-moreutils-perl dependency
missing from debian/control, being indirectly pulled by some other
dependency, while an implementation detail.
Change-Id: Ibfc7b362ad77c4b202d93cf71774c40623503f14
* perform_prepaid_billing() part of the code
that cancels the session is moved into a new
function cancel_prepaid_billing()
* cancel_prepaid_billing is called in perform_prepaid_billing()
and after init_prepaid_billing() if session status != 'ok'
* add_journal_record() set default coding=0 if undefined
Change-Id: Id98f8e5b738953d5bb047f59657218f5fa6cab62
* smsc_peer is set as 'default' if none is identified
* fill in status and reason fields for sms receive
* write 'cli' fields as intended
Change-Id: I7316935c3253563db96104d481cbaba7213ad436
* fix routine path
* fix passing arguments as an array, not hashref
* send_sms() uses UTF-8 charset for the query_form() method
Change-Id: I3039999751ffc666ce10b40cb01209a69c98e94e
one was actually a true positive. the others were false positives
and are going to be silenced for the time being, while we try to find
an upstream solution. more details can be found in the ticket.
Change-Id: Iae8df7606774a9d26e4d44dbba557c9fe62d2252
this is to fix the TAP tests of the sipwise QA chain
fixed (or ignored):
- ControlStructures::ProhibitMutatingListFunctions
- Documentation::RequirePodSections
- InputOutput::RequireEncodingWithUTF8Layer
- Subroutines::ProhibitSubroutinePrototypes
- BuiltinFunctions::ProhibitStringySplit
- TestingAndDebugging::ProhibitNoStrict
- TestingAndDebugging::ProhibitProlongedStrictureOverride
- InputOutput::ProhibitTwoArgOpen
- CodeLayout::ProhibitQuotedWordLists
Change-Id: I7dce4ce123bad40de2d9b51ba5b1a141e20c3783
to fix:
Can't modify non-lvalue subroutine call of &NGCP::Panel::Utils::Generic::is_int
in scalar assignment at lib/NGCP/Panel/Controller/Rewrite.pm line 278, near ")) "
Change-Id: Ic19001b4e8ebae843b2371e83c8cf4329d2b091b
these are to fix sipwise TAP tests. The following policies were
violated and have been fixed (or ignored where apppropriate):
- Variables::ProhibitAugmentedAssignmentInDeclaration
- Variables::ProhibitConditionalDeclarations
- Variables::RequireLocalizedPunctuationVars
Change-Id: Ifee93d537cd6e33d9e6e6ef8026be4b2b9fd0ee5
* enables fetching captured sip data
GET all collection returns JSON with available SIP messages
GET item collection requires a valid call-id and
returns pcap data generated from the packets of the call-id
Change-Id: I552ee9a312a4b9acf95bde93f6c584bbf82f9ea9
* Storage model provides with a layer for more than one
DBIx::Class connection and handles them, currently only
first connection is supported.
* Storage model also uses different DSN than the DB model
* Callflows use the Storage model to fetch captured dialogs
Change-Id: I6e742b7a7f1f9f047ca68ea75f6eea01349c8664
this is to clean the Sipwise TAP tests for this repo
the critical places where undef is really the intended return value (because
a scalar should always be returned) the rule has been overridden
Change-Id: I66e217a03a00e0f366db9c0cbc5007dd15cd9f96
"Mixed high and low-precedence booleans"
The operations have different precedence and must not be mixed together.
Change-Id: If38e25d6e94f599dc9462d9ee37ce165fa303b35
translate forms in NGCP::Panel::Form (the caching module) instead of in the
templates. This gives us better control to avoid translating cached forms
multiple times. Multiple translations lead to errors due to escaping of
special symbols and simply fails from one (non-english) language to another.
Change-Id: I234b22cb70dc068530e4a9f241cb9bb5653e1959
The only two files left with such warning:
* lib/NGCP/Panel/Field/URI.pm
* t/lib/Selenium/Remote/Driver/Extensions.pm
While they need some special Perl magic to be fixed.
Change-Id: I23553bbffd5bfb38b222733bdeb3937945eabf3e
Revert "TT#11701 check existence of voip number in InterceptionDB"
This reverts commit b803c1ae3e.
Change-Id: I56832cf412a97c4f0fc9f169498a60653d979614
* add missing 'sip:' prefix for caller_uri/callee_uri containing the
domain part
* caller_domain is used in callee_uri if callee_domain is not
specified
Change-Id: Iacf0e29f6ec5c2d97aad5918bb4afef67e4e0e45
inflate/deflate DateTime for simple (complete) timestamps
considering the correct timezone at the latest possible point
in the action chains: on form-level as well as in the DataTables json output.
Change-Id: Icfe94d6d5a9ac02d9fca0f4b8d048d86cf66cffa
* Consider POST body not utf8 encoded, so encode "json" parameter
* Allow empty body for multipart/form-data controlled by configuration
as faxes took text from "json" part too.
* Allow empty return from create, meaning asynchronous operations,
like fax creation
* Allow to skip hal validation through form.
Can be used for collections without PUT and PATCH.
Change-Id: If0d0e7cdc6abe53d76ad0b18568e93743040e90f
* remove $config->{sms}{smsc} selection as
there is no such thing as smsc in ngcp_panel.conf
* remove charset from the send_sms query form as charset
is now set in the smsc peer group and taken from the template
Change-Id: I12ac8b74d2923a54194685c3f5e28a37f8df1902
* smsc_peer preference is mandatory for NGCP::Utils::SMS::send_sms()
and contains a handle of one of the avilable group=smsc id
* sms_journal is extended to also store smsc_peer
Change-Id: I1a368b55c263bb5ea2acda004bbaf463d6431413
* moved sms_journal record creation into a new
NGCP::Utils::SMS::add_journal_record()
* 'cli' is used when sending sms to store
user_cli or cli subscriber preference.
that is useful for calls where caller is a
remote number
Change-Id: I80bc31da294a56b302e154133525eea187ab6aff
* in case of a specified fax format (pdf)
the temp filehandle had been closed before filled in with data
Change-Id: I938cfa47051a525069902f73b83de121838c00bb
* colelction_nav_links() should be used instead of the old
self/prev/next href link code
* Entities.pm fix colletion_nav_links() to pass missing
$c->request->params
* collection_nav_links() use default $c->request->path and
$c->request->params if those arguments are not specified
Change-Id: Icca5afac812f2e06e6927ba6f4e91057f9745d21
* /api/phonebookentries is used for the
phonebook_reseller
phonebook_contract
phonebook_subscriber data storage interaction
Change-Id: If45390fd3080886e03602216cfbacc33296f1558
* Sequences with escaping a non-special char in the search pattern
like \43699 or \abc are now checked and prohibited
Change-Id: I72d65f2dbf5b9b9bae1ff37af098d74d238f77cb
The DB has lengths of 4, 7 and 31 for cc, ac and sn, respectively.
Instead of letting the DB fail and cause a 500, check the length
properly upfront.
Also make use of cc/ac/sn_regex from config.yml to allow narrowing
down the format by the operator.
Change-Id: Ie738177f7942454054c37bf8be66ab01cfe05ad5
* return HTTP_UNPROCESSABLE_ENTRY if form data is not valid
or a susbcriber is not found
* POST: do not commit transaction if update_item fails
Change-Id: I7149922d4e4d701213ce351112cc67e611c3d910
now there is a tag per API rail instead of per method
this also makes it easy to render the documentation centrally per API rail
Change-Id: I683048f742c2bd2da591e502bc2d8f63cc422627
by using strict where it wasn't used before
plus fix all bugs that were discovered along the way by enabling strict
Change-Id: I7f9a8bf0cee74014fd7551ec26f2ab3922715efc
these errors were missing imports and were discovered with "perl -c".
DbStrings.pm is a generated file, therefore to comply with the syntax check
here we need to change the generator. (this is completely cosmetic)
Change-Id: Ia2dba1f04cbdc3bb76245b19de1f34c8c8a3a2c0
* Fix item update: a new reloaded item is correctly fetched
fom the db
* Fix Location header: path and item id are correctly delivered
with the header
* Fix xmlrpc ul.add call params:
- correct params order
- "expires" param value is properly calculated
Change-Id: I194b6bab9cb0d295e0a350e6317f7ddbcebdc021
with the previous commit, there is no need anymore to specify form
exceptions manually. validate_form will now automatically consider fields
in the correct format with and without "_id"
Change-Id: I70afae4003c6407c7a37396630110736f1fb13f8
exceptions here means, the fields are not automatically changed to
the format {field}{id} for form validation because a field named
{field_id} is present in the form anyway.
Change-Id: I64b8e3ca1864c2b3b2697a69f87cfba17683bd19
* /api/voicemailrecordings now support mp3 and ogg formats
when specified as query parameters: e.g. ?format=mp3
* add dependency to libsox-fmt-mp3
Change-Id: I0815be013814edc42559c75e26d64b537507334d
does not contain sensitive data, only a list of available timezones for the
datatables table to be shown. this is needed in Subscribers -> edit Master
dialogue for subscribers
Change-Id: Ie05f8635e97ad3814332e07e879979bb07664393
* search_rs(undef... did not work as the related query
contained a non-existing column 'aor', failing it silentlly
and caused a full join select without the where clause
* search() now provides with a fail immediately if a column does not
exist
Change-Id: If28d985b634809ae6583eebd6ffe7e302a2012fc
build_options on a field of type HTML::FormHandler::Field::Select is
always run on instantiation time. Since this is dynamic and dependent on
the external db values for destinationsets, timesets and sourcesets, the
form has to be re-instantiated every time
Change-Id: I724ea782c11b8208738731165cfe9d1a54b274f6
apply_rewrite demands a billing subscriber object
this resulted in an uncaught server error before
Change-Id: Ia11dc12b8a1a2f71b74881356dcd0b1ec7bf73fc
Consider item_rs probable additional params in get_list
Use uuid from get_owner for conversation filtering
Define subscriber_id for fax conversations
More clear debug
Change-Id: Ibef1662795a07e6b31e1dcf0052d618efeb2dbcd
* with the removal of PCMA transcoding for music_on_hold
sound files, the transcoding only applies to convert
any WAV -> expected WAV format by sems
* adjust File::Slurp play_file() to use the buffer, to
avoid possible issues with the stream data read
* fail if the sound file to upload is empty or cannot be read
Change-Id: I527aadd279dfe7dee42593be89f65dedf65fd6dd
was used to allow specifying a custom config file in order
to quickly test manually with a different db
Change-Id: I03db8ca922037f9d342a81236e6dfbfe79575c36
When clicking on the "Dashboard Administration" link in the Monitoring
and Statistics menu of the panel, grant administrative access to the
grafana dashboard.
This privilege elevation is kept in the session until you click any
of the other dashboard links in the Monitoring and Statistics menu.
Change-Id: I703a05b74fc6943ecac82cca5acb2d71674028e7
* Make sure resellers with interception rights can query both
collections and items
* Make sure we only query the reseller specific interceptions
when accessing API as reseller
Change-Id: I3010f899cbbd1a7a4f60025d95f09f013cc07c03
This prevents e.g. to insert \", which will break the trigger
populating kamailio, and will also protect against SQL injection
attacks, because the "name" value is taken as is in the trigger
statement without escaping it.
Change-Id: Ic2f911f4ce7fa79516796141d565bd3fe4a4044a
* NGCP sound files do not need transcoding anymore and
it is disabled for the sound file upload/download logic
(voicemail sound files transcoding is still required
and retained)
Change-Id: I756c794ae614d3d85096936e217d83f3e0c6db44
Certain forms like SubscriberCFSimple need $c as ctx already when
setting up the form, so move setting ctx=>$c right before that.
Change-Id: I8d377b20a1b62ffa8bba1277fdaf1b144a7c1607
Otherwise, sound handles and pbx devices are displayed in UI
based on the order of insertion, which is not nice from a
usability perspective.
Change-Id: I584a40ec7a55e4317126a2eb073951b3c8ae8332
* When enabling password_sip/web_validate, panel checks password
against username (web and sip, respectively), and runs it through
cracklib to enforce a reasonably strong password.
* Add auto-generate buttons next to web/sip password.
Change-Id: I11f5f6c2d69dc5658f298094f7d17d26d0a26ee1
scalar returns an arrayref with an item for every request,
which we then didn't unpack. better to request an array here
Change-Id: I80717c9e957ad44ad5d75db36735180123ab931c
This patch reuses existing forms by clearing them, rather than
re-instantiating them again and again.
Also, panel start time should be better due to less package
pre-loading.
Change-Id: Ia3e64fd4b4084bb5ec35a669c5840c9fc3c58f2e
Used to fetch whether pbx, faxserver, rtcengine etc is enabled.
* Fix rtcengine reseller creation:
- Refuse to create reseller if rtcengine part fails
- Use proper auto-generated rtcengine values (pass, domain)
to not fail on reseller names which are not forming valid
hostnames.
* Implement /api/admins/id to support testing
- add test
- fix creating admins with overly long login
- fix various ACL bugs handling /api/admins/
- fix creating /api/admincerts/ as r/o user
* Fix test framework
- use proper client cert when switching API user
Change-Id: I602fdd8181c0b3f23e76e3eab0df90a1ff9e986f
(cherry picked from commit 0d376bd8b59db65296090d26f2c84d704129beef)
Remove excrescent code from the pbxdevicemodels API & Panel
Add roles control per method for the API
Use form field "required" attribute for the API uploads
Fix getting old resource for the PATCH and PUT methods
Change-Id: Ia0515b3d071d45435db7c9138ea9de9447775143
* Fix syntax errors and internal errors
* Pass set ids back in mappings
* Allow updates of mappings both via name and ids
Change-Id: I26fdfe96d67563c11040a6c1e87f13a835bb793f
* Implement r/o access to /api/customers for subadmin
* Implement r/o access to /api/subscribers for subs
* Implement create access to /api/subscribers for subadmins
* Implement /api/numbers to re-assign a number
* Implement CF endpoints access for subs
* Implement new test framework to simplify testing
* Fix updating number by using Utils to make sure allowed_clis etc
are handled correctly
* Install missing docker dependencies for new test framework
* Add edr handling on /api/numbers/xx update
Change-Id: I678da16cfb1361b2809780cba8c204ac90bb1736
+ added conversations to api_root.t
+ disabled xmpp conversations source, since "soap"
MySQL user is not yet granted to prosody.* tables
Change-Id: I3d6a9418e7c2b77503f8472fe639e971ad7be3fa
* billing is split into 2 parts:
- init_prepaid_billing (reserves billing/creates session)
- perform_prepaid_billing (commits or cancels the session)
* when sms fails to be sent the billing session is canceled
(was committed before, regardless)
* NGCP::Panel::Entities::post
- do not do $self->return_representation_post() if
api_error_message is present, therefore, the actual
error is returned
* sms_journal item is now created also in case of an error
* improved errors indication
Change-Id: I454b8c6a1c04d743ee82e03f8621c7cc4c7c4f98
When creating or updating a reseller, catch non-numeric contract_id
and return 422, otherwise 500 would be returned.
Change-Id: I0e22f6f514fef80f5265eca28d7ec97811c1172f
* create reseller with enable_rtc now succeds but shows an
error if the "rtc" related part cannot be created
* update reseller with enable_rtc now succeds but shows an
error if the "rtc" related part cannot be update
* terminate reseller with enable_rtc now fails with an
error if the "rtc" related part cannot be deleted
Change-Id: I59a8b531d59bc3d4ca9201a2a25c783cb149b759
added checking and persisting of timezone for
+ panel UI subscriber create
+ POST /api/subscribers
+ PUT /api/subscriber/x
+ PATCH /api/subscriber/x
+ central is_valid_timezone_name method
Change-Id: I59865f5af33a71e5b5032dc35ba9c41eca74b04c
* new "Manager Secretary" call forwarding type
* new /api/managersecretary
- controls "Manager Secretary" call forwarding auto set
* support Prefer='internal' to avoid all form validations,
and creations as well as no hal is created but json body
is returned instead. only usable on port 1442 for
internal ngcp api clients.
* Role/API valid_uuid() check
Change-Id: I826138d8cdbce737c09c3b98bc7bdd905d09e81c
* enables a mode for cf source sets, where all numbers are
considered as whitelisted or blacklisted (similar to the
NCOS levels mode)
Change-Id: I84e76e5ba717050c48bcaf5c1fd5f67ed5582cab
When requested with an "Accept: application/json" header, return
the response in json format instead of xhtml.
Change-Id: Iba4135d8013fd200af426f2eb3d67b97282c034b
The error happens while preparing ngcp-panel translations
Creating lib/NGCP/Panel/I18N/messages.pot
Merging lib/NGCP/Panel/I18N/ru.po
lib/NGCP/Panel/I18N/ru.po:13386: duplicate message definition...
lib/NGCP/Panel/I18N/ru.po:13359: ...this is the location of the first
definition
msgmerge: found 1 fatal error
Change-Id: I704df2e5751e6189a34f489b0fe0c78413457ff9
Under Subscribers > Call Forward > Manage Timesets, the label for the
hour period has a typo. Should be "through" instead of "trough". Fix.
Change-Id: Iad07cb3c8ee69cd147e7629f1e551cd69da709ec
- read key from specific config file
- key is hex encoded
+ fix: add libcryptx-perl as dependency (actually dep of libcrypt-jwt-perl)
+ fix: typo in perl (comma instead of assignment)
+ fix: chomp any preceeding newlines from jwt_secret
Change-Id: I6c6bd4dc0d7fa7fa43868afb13b4d8d838d90564
Try to match up the peer_auth_realm with peer's ip or host, and if
found, check for outbound_socket of this peer and use it as contact
if found.
Change-Id: I428c408d6f3b0796fab2306cc129478806ac9bd3
* add missing Form/Faxserver/T38 form
* add missing Form/Faxserver/ECM form
* add T38, ECM forms for the API
Change-Id: Idb1d28f8bbe33a7383a88c074cc4a009f4c37ff4
as read-only access to subscriberadmin in order to view neccessary
details for creation of pbxdevices.
Change-Id: I369c3a1936e46a4144652f0a65899fc4defcb501
* enables a filter for calls that were initated or received
by the specified subscriber/custoemr
* set direction for internal subscriber calls to "out"
Change-Id: I2f3b543b57352f92dc5a67bc82779cf371b6f23c
from perl core documentation:
> $& returns the entire matched string.
> (At one point $0 did also, but now it returns the name of the program.)
Change-Id: Ia884ac758c91da7e365f609c2d5f0dbe784e763b
* Add dispatcher reload helper in peer utils
* Handle probe flag for peer hosts
* Reload dispatcher on proxies on peer host change
* Reworked kamailio cache reload to perform it after commit,
otherwise kamailio won't see the changes yet!
Change-Id: I9a53854b4a42c97a2889c63f8bf2c878c6f48a2d
- move the "group" field from Rule.pm/InboundRule.pm into
RuleEditAdmin.pm/InboundRuleEditAdmin.pm respectively
- the "group" field is used only by the GUI rule edit forms
Change-Id: I1c1ebf883848e90c9412784c8d8610fcbebc4331
- a new feature, "Peering Overview" under the "Tools" menu that
shows a consolidated table of peering rules, peering groups and
peering hosts with a quick links to the related edit dialogs
- added a group selection for "peering rule edit" dialogs that
enables a possibility to move a peering rule into another
peering group
- changed the "back" uri in the "peering host" and "peering rule"
dialogs to return back to the previous uri instead of forcing it
to /peering, that is needed to call those dialogs from
/peeringoverview and then get back to the original uri upon
completion
- dynamic columns support
- separate outbound and inbound peering rules respresentation
- export to "CSV", also with the "Search" filter support
- add dynamic column join detection excluding excessive joins
if no related columns are selected
Change-Id: I71b4c62c4583989baacfc166f08e965c4464e4b2
- mask (anonymise) the caller if source_clir is enabled and the auth
role is non-admin, and the call is not inside the same customer
- if source_cli is "anonymous" try to use source_user@source_domain
as the caller and in case if the "domain part" is used check and
mask it if the auth user is non-admin
Change-Id: I835679ed7a2a0c070542fbd9a625fed7ffe2d71f
Only use request param "q" for filtering firmware versions. Otherwise
devices which attach a specific verstion to the download url will not
find the latest/next version.
Change-Id: Ibd92de4c73ad20cc5a0e06f185171fff370ceaf6
the factory Catalyst::ActionRole::HTTPMethods action role
is set for any action, and in race with our own
NGCP::Panel::Role::HTTPMethods. the testcase could have
been misleading ever since, as it uses DELETE /api/customers,
which was present when implemting the method override initially,
but dropped on the road to 4.5.
the issue is resolved by overriding
Catalyst::Controller::gather_default_action_roles.
until the class hierachy refactoring is completed, only
consistent way is to add the override to each api controller.
the action_roles config attribute can therefore be
removed.
using Plack::Middleware::MethodOverride as an alternative from
upstream has the drawback to work only with POST. but a required
usecase is to also support translation DELETE requests to PATCH.
Change-Id: I204ba59869a8327bdd5db8a867fbbb061d1c9e7c
This avoids having to look for the customer with the last customer
id and click Details there, rather than now having a direct link.
Change-Id: Ie7688607cf29ed7eb6c4e52bd42244730be783de
It's fine to remove read-only fields only if $run==1, but in any
case remove unknown fields.
Also the force-array change broke additional tests, fixed them.
Change-Id: I48ffcf201bd1eedb8fb317f1ca248af9e4a01e60
- including the desired sorting by call leg depth
- "... order by length(call_id) asc, start_time asc;"
seems to cover the call flow sceanrios.
Change-Id: I294c27985627bea6a9acdaff8aeedc84e365c34e
Also take into account latin1 characters when calculating number
of parts for billing, because SMS uses some special derivation of
latin-1 and can therefore encode certain chars without the use of
UTF-8.
Change-Id: Ia7f02a3cf96040e5ad23da9037d05422beecea74
OR-part must go into parantheses, otherwise $c->user is called
on an undefined $c if $c is not passed in.
Change-Id: Iebc07eb19ae306c61fbcfd39f35325b3c69d2bc4