Ejemplo n.º 1
0
    def Run(self, args):
        client = registrations.RegistrationsClient()
        registration_ref = args.CONCEPTS.registration.Parse()

        # TODO(b/110077203) Tweak the message.
        console_io.PromptContinue(
            'You are about to detach registration [{}]'.format(
                registration_ref.registrationsId),
            throw_if_unattended=True,
            cancel_on_no=True)

        response = client.Detach(registration_ref)

        if args. async:
            # TODO(b/110077203): Log something sensible.
            return response

        operations_client = operations.Client.FromApiVersion('v1alpha1')
        operation_ref = util.ParseOperation(response.name)
        response = operations_client.WaitForOperation(
            operation_ref,
            'Waiting for [{}] to complete'.format(operation_ref.Name()))

        log.UpdatedResource(
            registration_ref.Name(),
            'registration',
            details=('Note:\nRegistration remains valid until expiry. See '
                     'https://support.google.com/domains/answer/6339340 for '
                     'information how to access it in Google Domains.'))
        return response
Ejemplo n.º 2
0
    def Run(self, args):
        client = registrations.RegistrationsClient()

        registration_ref = args.CONCEPTS.registration.Parse()

        name_servers = util.ParseNameServers(args.name_servers,
                                             args.cloud_dns_zone,
                                             registration_ref.registrationsId)

        registrant_contact = util.ParseWhoisContact(
            args.registrant_contact_from_file)

        whois_privacy = util.ParseWhoisPrivacy(args.whois_privacy)

        new_labels = None
        labels_diff = labels_util.Diff.FromUpdateArgs(args)
        if labels_diff.MayHaveUpdates():
            orig_resource = client.Get(registration_ref)
            new_labels = labels_diff.Apply(
                client.messages.Registration.LabelsValue,
                orig_resource.labels).GetOrNone()

        response = client.Patch(registration_ref,
                                name_servers=name_servers,
                                registrant_contact=registrant_contact,
                                whois_privacy=whois_privacy,
                                labels=new_labels,
                                validate_only=args.validate_only)

        if args.validate_only:
            # TODO(b/110077203): Log something sensible.
            return

        if args. async:
            # TODO(b/110077203): Log something sensible.
            return response

        operations_client = operations.Client.FromApiVersion('v1alpha1')
        operation_ref = util.ParseOperation(response.name)
        response = operations_client.WaitForOperation(
            operation_ref,
            'Waiting for [{}] to complete'.format(operation_ref.Name()))

        log.UpdatedResource(registration_ref.Name(), 'registration')
        return response
Ejemplo n.º 3
0
  def Run(self, args):
    client = registrations.RegistrationsClient()

    registration_ref = args.CONCEPTS.registration.Parse()
    location_ref = registration_ref.Parent()

    labels = labels_util.ParseCreateArgs(
        args, client.messages.Registration.LabelsValue)

    name_servers = util.ParseNameServers(args.name_servers, args.cloud_dns_zone,
                                         registration_ref.registrationsId)
    registrant_contact = util.ParseWhoisContact(
        args.registrant_contact_from_file)
    if registrant_contact is None:
      registrant_contact = util.PromptForWhoisContact()
    if registrant_contact is None:
      raise exceptions.Error(
          'Registrant contact is required. It can be provided interactively or '
          'through --registrant-contact-from-file flag.')

    availability = client.CheckAvailability(
        location_ref, registration_ref.registrationsId).availability

    if availability.available != client.availability_enum.AVAILABLE:
      raise exceptions.Error(
          'Domain [{}] is not available for registration: [{}]'.format(
              registration_ref.registrationsId, availability.available))

    whois_privacy = util.ParseWhoisPrivacy(args.whois_privacy)
    if whois_privacy is None:
      whois_privacy = util.PromptForWhoisPrivacy(
          availability.supportedWhoisPrivacy)

    hsts_notice_accepted = False
    if client.notices_enum.HSTS_PRELOADED in availability.notices:
      console_io.PromptContinue(
          ('{} is a secure namespace. You may purchase {} now but it will '
           'require an SSL certificate for website connection.').format(
               util.DomainNamespace(availability.domainName),
               availability.domainName),
          throw_if_unattended=True,
          cancel_on_no=True)
      hsts_notice_accepted = True

    console_io.PromptContinue(
        'Yearly price: {}\n'.format(
            util.TransformMoneyType(availability.yearlyPrice)),
        throw_if_unattended=True,
        cancel_on_no=True)

    response = client.Create(
        location_ref,
        registration_ref.registrationsId,
        name_servers=name_servers,
        registrant_contact=registrant_contact,
        whois_privacy=whois_privacy,
        yearly_price=availability.yearlyPrice,
        hsts_notice_accepted=hsts_notice_accepted,
        labels=labels,
        validate_only=args.validate_only)

    if args.validate_only:
      # TODO(b/110077203): Log something sensible.
      return

    if args.async:
      # TODO(b/110077203): Log something sensible.
      return response

    operations_client = operations.Client.FromApiVersion('v1alpha1')
    operation_ref = util.ParseOperation(response.name)
    response = operations_client.WaitForOperation(
        operation_ref,
        'Waiting for [{}] to complete'.format(operation_ref.Name()))

    log.CreatedResource(registration_ref.Name(), 'registration')
    return response