Commit graph

2120 commits

Author SHA1 Message Date
weiminyu
f6d9b46622 Reorganize Gradle dependencies
Move configs and dependencies from root script to subprojects.
There is not too much commonality between subprojects. Besides,
the gradle lint plugin (not added to this project yet) does not
handle inherited dependencies properly.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=218698818
2018-10-25 14:50:26 -04:00
jianglai
ca97d66dd7 Update .gitignore for gradle related files
Ignore all gradle build artifacts.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=218693364
2018-10-25 14:47:10 -04:00
jianglai
f0195f3ed6 Explicitly state which Gradle version is tested.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=218687425
2018-10-25 14:45:30 -04:00
jianglai
85d971c943 Allow admin to set AllowedTlds in RegistrarSettingsAction
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=218508076
2018-10-25 14:43:54 -04:00
weiminyu
6f155ed3d2 Properly label compile-only dependencies in Gradle script
Dependencies labeled as 'neverlink' in bazel should have two
labels in Gradle: compileOnly and testCompileOnly/testImplementation.
This excludes the dependency from deployment archive.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=218394354
2018-10-25 14:42:17 -04:00
jianglai
57d95d4bec Refactor TmchCertificateAuthority
The main goal of this CL is to make the clock constructor injectable (so that tests do not need to use InjectRule to override the clock). The complication is that the clock is used by two static caches (ROOT_CACHE directly and CRL_CACHE indirectly). The clock is not actually used to construct the lock, but rather to verify that the root certificate is within its validity period.

For ROOT_CACHE we move the verification to its call sites. This adds a bit overhead because the validity check happens every time the cache is called, not just when the cache is built or refreshed. However this check is rather cheap.  Also the resources are included in the jar and the cache is valid for 1 year. Given that we deploy every week, there's not much point making it an expiring cache rather than a static map.

For CRL_CACHE we change the key to a tuple of TmchCaMode and X509Certificate. The certificate is no longer provided from the ROOT_CACHE directly and must be verified before it is provided as a cache key. We left the CRL verification inside the cache loader because it (signature verification) is more expensive compared to simple expiration check, and we do not want to do this every time the cache is called.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=218385684
2018-10-25 14:40:38 -04:00
jianglai
589e98a1db Explicitly set the shard size when saving the claims list
This allows us to get rid of the use of InjectRule in tests.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=218221409
2018-10-22 19:13:11 -04:00
jianglai
6a560c18ce Do not monitor gradle temp files changes
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=218213950
2018-10-22 19:11:39 -04:00
jianglai
e39cc04110 Test AsyncFlowMetrics without mock
Instead of verifying interactions on the mocks, we instead assert on the real test subject directly.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=218209556
2018-10-22 19:10:01 -04:00
guyben
d2ca67460c Allow admins read/write access to all registrar in web console
This CL removes the "READ vs UPDATE" feature completely. Now anyone with access
has full read+write access.

We still keep track of which role a user has (did they get access "explicitly"
because they are an "allowed access" contact? Or do they have access because
they are admins?) for the logs and UI, and also so we could in the (very near)
future have features only available to admins.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=218169608
2018-10-22 19:08:09 -04:00
jianglai
2020dcb50f Refactor StringGenerator bindings
Make every dependency request explicit on what encoding is used. Also get rid of InjectRule in XjcToDomainResourceConverterTest.

Random number generator providers are separated to secure and insecure ones. The insecure ones must be explicitly requested (usually for use cases where security is not of concern, for better speed).

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=217921422
2018-10-22 19:06:35 -04:00
guyben
1a4aae8f7d Use RDAP test tools in RdapActionBaseTest
This should have been part of []

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=217881035
2018-10-22 19:03:14 -04:00
guyben
3a3b0b738a Centralize RDAP test initialization and login
All RDAP actions inherit from a common RdapActionBase class.

All RDAP search actions inherit from a comman RdapSearchActionBase class, which inherits from RdapActionBase

Each of the base classes has @Before initialization needed for the tests, as well as utility functions (such as login and logout).

Currently, these were copied in all test classes. Instead, we created a similar test inheritance tree to centralize the initialization and place common utility functions.

This way, the @Before of every test only needs to initialize the variables new to the specific action, making the code somewhat clearer.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=217856844
2018-10-22 19:01:37 -04:00
jianglai
b254269d2f Refactor LordnTask to LordnTaskUtils
Made it clear that it is a util class and moved some of the functions only used in NordnUploadAction (to NordnUploadAction). Also used Retrier to handle retries when leasing tasks.

These changes allow us to no longer use InjectRule in related unit tests.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=217761117
2018-10-22 18:59:48 -04:00
guyben
0f1f418034 Add registrar contact to OTE registrars
When creating the various registrar objects in Sandbox for OTE, we also give access to all the registrars' data to a given google account (identified by the email)

This email has to belong to the registry's G-Suite account, just like in the registrar_contact command.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=217728407
2018-10-22 18:58:06 -04:00
jianglai
bc2c0350d7 Remove InjectRule in UrlFetchUtilsTest
It should have been removed in []

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=217728371
2018-10-22 18:56:30 -04:00
jianglai
3daf62a486 Remove the use of InjectRule in IdnLabelValidatorTest
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=217707263
2018-10-22 18:54:53 -04:00
mcilwain
9e4222a5cb Default to REAL TLDs in nomulus list_domains command
This is what you want most of the time when you're running the command to
see recent domains, as this will list all the real billable domains and
exclude the prober ones.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=217603275
2018-10-22 18:53:16 -04:00
weiminyu
b81525cea4 Set up gradle for Nomulus on github
Also updates apache-sshd dependencies.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=217603216
2018-10-22 18:51:39 -04:00
mcilwain
8e67cc7cbb Switch Random to SecureRandom
Someone may @Inject a Random at some point in the future where security matters,
so always provide a secure one.

Also, this shouldn't be in ConfigModule (it's not configuration) -- but that can
be changed separately. We might want a larger refactor that has a utils module
or similar to provide extremely generic things like random number generators.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=217602486
2018-10-22 18:50:02 -04:00
jianglai
82252dfcd6 Fix FOSS build
com.google.common.base.Randoms.insecureRandom is not open sourced.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=217598084
2018-10-22 18:48:20 -04:00
jianglai
f174ec6cd4 Do not use InjectRule to mock stdin in ExecuteEppCommandTest
Use System.setIn() to do the same thing.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=217595385
2018-10-22 18:46:36 -04:00
jianglai
4140ef6315 Remove the use of InjectRule in UrlFetchUtilsTest
Random used to be a static variable which requires InjectRule to mock it in unit tests. It is now a singleton, which ensures that the same instance is called every time and Random.nextBytes() generates results that distribute uniformly between each call.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=217592767
2018-10-22 18:44:56 -04:00
jianglai
84c3544097 Change SendEmailService to an instance field.
This allows us to inject it with Dagger and avoid using InjectRule to set it
in unit tests.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=217571475
2018-10-22 18:43:18 -04:00
guyben
06ce429c5a Include the performing user in the "Registrar updated" emails
Whenever a registrar is changed via the registrar console, we send out a
notification of that change.

Since we're going to allow Admins and soon Vendors to use the console in
addition to the registrars, it becomes important to know who actually performed
the changes if the registrars complain.

In addition, we will now send notifications for changes in Sandbox since we're
going to actually allow registrars to update sandbox data.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=217539534
2018-10-22 18:41:38 -04:00
mcilwain
f43125bb04 Add a RESERVED billing event flag for creates of reserved domains
This is an additional signal we can use for the billing/invoicing pipeline that
will be helfpul in targeting invoice rows that may need adjustment.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=217524250
2018-10-22 18:38:23 -04:00
jianglai
3cfde5d4a1 Fix EPP quota handling bug
We limit the maximum number of concurrent connections that a client can make the proxy. The quota is implemented as a (thread-safe) map of client certificate hash to available number of connections. When a new connection is made, we decrement the availability counter by one. When the counter hits zero, no more connections can be made and any new connection from the same client is terminated by the proxy.

Currently, the counter is incremented when a connection is terminated, including connections that are terminated *because* the quota is reached (i. e. the connections for which the counter is not decremented because the counter is already zero). This means that the first time the quota is reached, the next connection is dropped, the counter is incremented to 1 and new connections can be made again, bypassing the quota. This process can be repeated to achieve, theoretically, infinite quota.

This CL fixes this bug by only incrementing the counter, upon connection termination, for connections that have decremented the counter in the first place.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=217231593
2018-10-17 11:56:04 -04:00
jianglai
ecdbdbca63 Update terraform version constraint
There is no "google_project" resource managed by terraform, so we are not worried about the new terraform binary destroying/re-creating GAE resources.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=217206226
2018-10-17 11:54:34 -04:00
weiminyu
fed4ec496f Add Gradle scripts to Nomulus
Experimental Gradle scripts that build and run all Java tests.

Please see README.md for status and limitations.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=217203690
2018-10-17 11:53:01 -04:00
jianglai
476759e861 Update Spec 11 emails body and add a bcc address.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=217150650
2018-10-17 11:51:28 -04:00
guyben
8d93cd8edf Refactor SessionUtil, and Add dropdown menu to switch clientId
SessionUtil is renames AuthenticatedRegistrarAccessor, as it's used to access a registrar for an authenticated user.

It will now be injected with the AuthResult instead of receiving it in every function call, since there's only one "legal" AuthResult to use.

The AccessType names are changed from READ_ONLY/READ_WRITE to READ/UPDATE, as it was confusing that a user could have both READ_ONLY AND READ_WRITE access to the same registrar.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=216958306
2018-10-17 11:49:50 -04:00
mcilwain
bec7a91cfc Allow choice of Keyring to be configured in YAML
This uses a Dagger-provided map of Keyring implementations, with two currently available,
"KMS" and "Dummy". The active keyring is configured in the YAML file, so we no longer
require MOE directives to choose which one to use for internal/external builds.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=216898058
2018-10-17 11:48:12 -04:00
guyben
3bb525349f Wrap render of console.main soy in a utility function
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=216695490
2018-10-17 11:46:17 -04:00
weiminyu
9e02502fd4 Fix bugs exposed by testing with Gradle
The following issues are addressed:
- XML sanitizer should preserve input encoding. Gradle loses any that is not UTF-8. Bazel loses any that is not ASCII.
- Verify that XML sanitizer works with non-UTF8 encoding
- GpgSystemCommandRule breaks when $TMPDIR env variable is not set
- TestDataHelper throws exception when loading resources if resources are plain files on default file system as opposed to being in a jar file.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=216537258
2018-10-17 11:44:41 -04:00
mcilwain
218c4517eb Stop exporting EPP flow metrics to BigQuery
These are simply too costly in their current form now that we are handling double-digit QPS, so at a minimum we'd want to refactor these for batched exports using a background thread (like how Stackdriver metrics work). However, upon further review, that work isn't worth doing if this BigQuery table isn't actually being used for anything, and it seems that we aren't using it anymore given that ICANN transaction reporting no longer requires it.

So the simplest thing to do is simply to get rid of this entirely, and just use a combination of Stackdriver metrics and App Engine logs. The eppMetrics BigQuery table is ~1.2 billion rows and takes up 223 GB, so that's not an insignificant GCP billings saving if we can delete it.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=215905466
2018-10-08 16:59:29 -04:00
jianglai
7b9d562043 Explicitly set terraform version in preparation for the incoming 1.13.0 update
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=215806094
2018-10-08 16:59:29 -04:00
jianglai
68bd502ba7 Update apache sshd version
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=215783691
2018-10-08 16:59:29 -04:00
Ben McIlwain
ac05ccb95e [CL 2 of 3] Update apache mina library from v1_6_0 to v2_1_0
Adapts all code for backwards incompatible API changes in one go and sets global default version to v2_1_0

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=215769488
2018-10-08 16:59:29 -04:00
jianglai
e3a35f0aa0 Do not include transactions with zero unit price in invoice
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=215611195
2018-10-08 16:59:29 -04:00
jianglai
4a9b715020 Update bazel version to 0.17.2
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=215603517
2018-10-08 16:59:29 -04:00
mcilwain
1586813398 Bypass EAP fees for anchor tenants
Note that the check flow does not yet handle any kind of allocation token
handling at all. Step 2 will be to add allocation token handling there, so a
RESERVED_FOR_ANCHOR_TENANT or RESERVED_FOR_SPECIFIC_USE domain will show as
available instead of reserved if the right token is specified using the
extension. Then once that's done, we can use that information to adjust the
price accordingly as well.

Right now the behavior with a domain check is that reserved domains always show
as reserved, even if they're anchor tenants.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=215599350
2018-10-08 16:59:29 -04:00
mcilwain
ce5bbe4bfa Add MOE equivalences for 2018-09-20 sync
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=213817394
2018-10-08 16:59:29 -04:00
guyben
1d621bd14d Allow admins read-only access to all registrars
We want to be able to view / test / debug how the registrar console looks for our clients.

However, we don't want to accidentally change the data for registrars, especially in a "non-accountable" way (where we later don't know who did that change)

So we do 2 things here:

- Add a "mode" (read-only and read-write) to the getRegistrarForUser function. We set it according to what we want to do with the registrar. Currently, read-write is only requested for the "update" RegistrarSetting action. Admins will have read-only access to all registrars, but read-write access only to the "admin registrar" (or whatever registrar they are contacts for).

- Support an undocumented "clientId=XXX" query param that replaces the "guessClientIdForUser" function in the original page load. We can then set it when we want to view a different account.

We also change the navigation links on the HTML page to preserve the query.

-------------------------

This might be used also for a better user experience for our clients, especially those with multiple "clientId"s (some registrar entities have multiple "registrar" objects)

Currently, they have to have a separate user for each clientId, and only have one user allowed which has both read and write permissions.

Using this change, we can give them the possibility to add users on their own, some with read-only access (to view billing information without being able to change anything), and use a single user for all their clientIds.

-------------------------

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=215480610
2018-10-03 12:10:28 -04:00
weiminyu
5038fa917c Remove outdated credential modules
All credentials provided by these modules have been
replaced by those in the config/CredentialsModule,
with a new set of Qualifiers. With Dagger 2, a successful
build means that the removal is safe.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=215258792
2018-10-03 12:08:55 -04:00
guyben
70273fa791 Fix error reply from RegistrarSettingsAction
RegistrarSettingsAction is a JSON in / JSON out endpoint, meaning the reply is consumed as JSON.

The current state is that if an error occurs, there are two possible replies:
- a JSON error reply is sent out, or
- a 402 HTML reply is sent out with the exception.getMessage()

The difference is only - do we actively catch the exception to translate it to JSON or not.

This fix catches ALL exceptions and translates them to JSON format. Note that there's no security change by giving the getMessage in the JSON reply since we were returning that anyway (in the HTML).

In addition - changed the "gaeUserId" to "user.getEmail" as the identifier, since it's clearer to the users who see that error - and I do want to transition to a more "email identifier" way of checking access (since that's what users put in the registrar contact info)

This too isn't leaking new information because
- the initial HTML page load already gives the user's email, and
- the logs already log the user's email for every request

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=215213807
2018-10-03 12:07:20 -04:00
mmuller
2bf06eac77 Add dependency on diffutils
com_google_truth has a dependency on diffutils that we're not exposing.  This
becomes problematic in cases where certain tests fail and the equality check
can't show the difference.  If this happens, instead of the original failure
all we see is a failure to load diffutils.

Note that com_google_truth appears to have some other dependencies that we are
also not exposing, but that so far these have not been problematic.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=214774587
2018-10-03 12:04:04 -04:00
mcilwain
aa204be45e Delete unused default registrar referral URL
We now require the URL to be filled out by all registrars and so there is no
default needed.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=214774054
2018-10-03 12:02:29 -04:00
mcilwain
a7ec72f335 Use correct disclaimer for premium terms export
Looks like a copy-paste error from the reserved list export disclaimer.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=214773560
2018-10-03 12:00:48 -04:00
mcilwain
3d71012acd Move RDAP Terms of Service into YAML config file
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=214642487
2018-10-03 11:59:11 -04:00
guyben
84a0ace2ea Clean up registrar console login flow
Replaced the plethora of inter winding access functions and inputs in SessionUtils with just 2 functions, that both accept the same type for the user (AuthResult):

guessRegistrarForUser: given an AuthResult, finds a registrar that they have access to. If none is found - a ForbiddenException is thrown.

getRegistrarForUser[Cached]: (maybe should be called getRegistrarOnBehalfOfUser?) given an AuthResult and a clientId, loads and returns the registrar ONLY IF the user has access to it. Otherwise throws a ForbiddenException.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=214630657
2018-10-03 11:57:34 -04:00